| #!/bin/sh -efu |
| |
| # Check decoding of return values injected into a syscall that "never fails". |
| |
| . "${srcdir=.}/scno_tampering.sh" |
| |
| case "$STRACE_ARCH" in |
| alpha) |
| SYSCALL=getpgrp |
| ;; |
| *) |
| SYSCALL=getpid |
| ;; |
| esac |
| |
| run_prog |
| prog="$args" |
| fault_args="-a9 -e trace=${SYSCALL} -e inject=${SYSCALL}:retval=" |
| |
| test_rval() |
| { |
| local rval |
| rval="$1"; shift |
| |
| run_strace $fault_args$rval $prog $rval > "$EXP" |
| match_diff "$LOG" "$EXP" |
| } |
| |
| test_rval 0 |
| test_rval 1 |
| test_rval 0x7fffffff |
| test_rval 0x80000000 |
| test_rval 0xfffff000 |
| test_rval 0xfffffffe |
| test_rval 0xffffffff |
| |
| case "$SIZEOF_KERNEL_LONG_T" in |
| 8) |
| test_rval 0x80000000 |
| test_rval 0xfffff000 |
| test_rval 0xfffffffe |
| test_rval 0xffffffff |
| test_rval 0x100000000 |
| test_rval 0x7fffffffffffffff |
| test_rval 0x8000000000000000 |
| test_rval 0xfffffffffffff000 |
| test_rval 0xfffffffffffffffe |
| test_rval 0xffffffffffffffff |
| ;; |
| esac |