Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP1:Update
strace.2926
0008-Fix-crash-in-ipc_sem-test.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0008-Fix-crash-in-ipc_sem-test.patch of Package strace.2926
From fa5ce3724646faf3d1a1f379e4046e307df92952 Mon Sep 17 00:00:00 2001 From: Andreas Schwab <schwab@suse.de> Date: Wed, 11 Mar 2015 12:33:30 +0100 Subject: [PATCH 08/15] Fix crash in ipc_sem test Properly use union semun as argument of semctl. * tests/ipc_sem.c (main): Properly use union semun as argument of semctl. Don't handle EFAULT specially. * tests/ipc_sem.test: Revert last change. --- tests/ipc_sem.c | 24 ++++++++++++++++-------- tests/ipc_sem.test | 19 ++++--------------- 2 files changed, 20 insertions(+), 23 deletions(-) diff --git a/tests/ipc_sem.c b/tests/ipc_sem.c index eddddd4..9373482 100644 --- a/tests/ipc_sem.c +++ b/tests/ipc_sem.c @@ -2,10 +2,19 @@ #include <errno.h> #include <sys/sem.h> +union semun { + int val; /* Value for SETVAL */ + struct semid_ds *buf; /* Buffer for IPC_STAT, IPC_SET */ + unsigned short *array; /* Array for GETALL, SETALL */ + struct seminfo *__buf; /* Buffer for IPC_INFO + (Linux-specific) */ +}; + int main(void) { int rc, id; + union semun un; struct semid_ds ds; struct seminfo info; @@ -14,16 +23,19 @@ main(void) return 77; printf("semget\\(IPC_PRIVATE, 1, 0600\\) += %d\n", id); - if (semctl(id, 0, IPC_STAT, &ds)) + un.buf = &ds; + if (semctl(id, 0, IPC_STAT, un)) goto fail; printf("semctl\\(%d, 0, IPC_STAT, %p\\) += 0\n", id, &ds); - int max = semctl(0, 0, SEM_INFO, &info); + un.__buf = &info; + int max = semctl(0, 0, SEM_INFO, un); if (max < 0) goto fail; printf("semctl\\(0, 0, SEM_INFO, %p\\) += %d\n", &info, max); - rc = semctl(id, 0, SEM_STAT, &ds); + un.buf = &ds; + rc = semctl(id, 0, SEM_STAT, un); if (rc != id) { /* * In linux < v2.6.24-rc1 the first argument must be @@ -44,10 +56,6 @@ done: return rc; fail: - /* - * If the kernel failed, SKIP the test. We want to ignore - * such failures as they're out of scope for this project. - */ - rc = errno == EFAULT ? 77 : 1; + rc = 1; goto done; } diff --git a/tests/ipc_sem.test b/tests/ipc_sem.test index f448b66..b8fa545 100755 --- a/tests/ipc_sem.test +++ b/tests/ipc_sem.test @@ -8,23 +8,12 @@ check_prog grep OUT="$LOG.out" -./ipc_sem > "$OUT" || { - case $? in - 77) - rm -f "$OUT" +./ipc_sem > /dev/null || { + if [ $? -eq 77 ]; then framework_skip_ 'ipc semget/semctl syscalls do not behave as expected' - ;; - 99) - cat "$OUT" - rm -f "$OUT" - framework_failure_ 'broken kernel detected' - ;; - *) - cat "$OUT" - rm -f "$OUT" + else fail_ 'ipc_sem failed' - ;; - esac + fi } args='-eipc ./ipc_sem' -- 2.3.3
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor