SHA256
1
0
forked from pool/strace
strace/0008-Fix-crash-in-ipc_sem-test.patch
Martin Pluskal 0b44e76647 Accepting request 292570 from home:Andreas_Schwab:Factory
- 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
2015-03-24 18:25:03 +00:00

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