forked from pool/strace
0b44e76647
- 0001-aarch64-fix-rt_sigreturn-decoding.patch, 0002-m68k-define-HAVE_SA_RESTORER.patch, 0003-Fix-decoding-of-mmap2-for-arm.patch, 0005-tests-select.test-handle-architectures-using-pselect.patch, 0006-aarch64-fix-ioctl-decoding.patch, 0007-m68k-fix-sigreturn-decoding.patch, 0008-Fix-crash-in-ipc_sem-test.patch, 0009-tests-ipc_-match-IPC_64-flag.patch, 0010-semctl-fix-indirect-syscall-decoding.patch, 0011-Fix-stat64-st_-acm-time-decoding-for-personalities-w.patch, 0012-tests-verify-that-all-patterns-match.patch, 0013-aarch64-properly-decode-generic-syscalls.patch, 0014-stat64-v.test-add-newfstatat-syscall-support.patch, 0015-tests-uid-use-fchown-instead-of-chown.patch: Patches from upstream to fix testsuite failure. - Enable libunwind support (strace -k). OBS-URL: https://build.opensuse.org/request/show/292570 OBS-URL: https://build.opensuse.org/package/show/devel:tools/strace?expand=0&rev=44
110 lines
2.5 KiB
Diff
110 lines
2.5 KiB
Diff
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
|
|
|