const vki_stack_t *, ss, vki_stack_t *, oss);
if (ARG1 != 0) {
const vki_stack_t *ss = (vki_stack_t *)(Addr)ARG1;
- PRE_MEM_READ( "sigaltstack(ss)", (Addr)&ss->ss_sp, sizeof(ss->ss_sp) );
- PRE_MEM_READ( "sigaltstack(ss)", (Addr)&ss->ss_flags, sizeof(ss->ss_flags) );
- PRE_MEM_READ( "sigaltstack(ss)", (Addr)&ss->ss_size, sizeof(ss->ss_size) );
+ PRE_MEM_READ( "sigaltstack(ss->ss_sp)", (Addr)&ss->ss_sp, sizeof(ss->ss_sp) );
+ PRE_MEM_READ( "sigaltstack(ss->ss_size)", (Addr)&ss->ss_size, sizeof(ss->ss_size) );
+ PRE_MEM_READ( "sigaltstack(ss->ss_flags)", (Addr)&ss->ss_flags, sizeof(ss->ss_flags) );
}
if (ARG2 != 0) {
PRE_MEM_WRITE( "sigaltstack(oss)", ARG2, sizeof(vki_stack_t) );
scalar.h scalar.vgtest \
scalar.stderr.exp \
scalar.stderr.exp-x86 \
+ scalar.supp \
scalar_abort2.vgtest \
scalar_13_plus.vgtest \
scalar_13_plus.stderr.exp \
struct our_sigaltstack oss;
VALGRIND_MAKE_MEM_NOACCESS(&ss, sizeof(struct our_sigaltstack));
VALGRIND_MAKE_MEM_NOACCESS(&oss, sizeof(struct our_sigaltstack));
- GO(SYS_sigaltstack, "0s 2m");
+ GO(SYS_sigaltstack, "2s 4m");
SY(SYS_sigaltstack, x0+&ss, x0+&oss); FAIL;
-
- GO(SYS_sigaltstack, "2s 0m");
- SY(SYS_sigaltstack, x0, x0); SUCC;
-
- GO(SYS_sigaltstack, "2s 2m");
- SY(SYS_sigaltstack, x0+1, x0+1); FAIL;
}
/* SYS_ioctl 54 */
Address 0x........ is not stack'd, malloc'd or (recently) free'd
---------------------------------------------------------
- 53: SYS_sigaltstack 0s 2m
+ 53: SYS_sigaltstack 2s 4m
---------------------------------------------------------
Syscall param sigaltstack(ss) contains uninitialised byte(s)
...
Syscall param sigaltstack(oss) contains uninitialised byte(s)
...
-Syscall param sigaltstack(ss) points to unaddressable byte(s)
+Syscall param sigaltstack(ss->ss_sp) points to unaddressable byte(s)
...
Address 0x........ is on thread 1's stack
-Syscall param sigaltstack(oss) points to unaddressable byte(s)
+Syscall param sigaltstack(ss->ss_size) points to unaddressable byte(s)
...
Address 0x........ is on thread 1's stack
----------------------------------------------------------
- 53: SYS_sigaltstack 2s 0m
----------------------------------------------------------
-Syscall param sigaltstack(ss) contains uninitialised byte(s)
- ...
-
-
-Syscall param sigaltstack(oss) contains uninitialised byte(s)
- ...
-
----------------------------------------------------------
- 53: SYS_sigaltstack 2s 2m
----------------------------------------------------------
-Syscall param sigaltstack(ss) contains uninitialised byte(s)
- ...
-
-Syscall param sigaltstack(oss) contains uninitialised byte(s)
+Syscall param sigaltstack(ss->ss_flags) points to unaddressable byte(s)
...
+ Address 0x........ is on thread 1's stack
-Syscall param sigaltstack(ss) points to unaddressable byte(s)
- ...
- Address 0x........ is not stack'd, malloc'd or (recently) free'd
Syscall param sigaltstack(oss) points to unaddressable byte(s)
...
- Address 0x........ is not stack'd, malloc'd or (recently) free'd
+ Address 0x........ is on thread 1's stack
---------------------------------------------------------
54: SYS_ioctl 3s 1m
--- /dev/null
+# not sure what causes this exactly# on x86 and amd64 (but not arm64)
+# there is an conditional uninit read
+# there are several if statements that use the two pointers to stack
+# structures that probably generate the error
+
+{
+ internal uninitilized read
+ Memcheck:Cond
+ fun:syscall
+ fun:main
+}
prog: scalar
-vgopts: -q --error-limit=no
+vgopts: -q --error-limit=no --suppressions=scalar.supp
stderr_filter: filter_scalar
# Remove all frames from the stack trace except the first one.
# This is important because syscall() function on x86 isn't ABI conformant