printargc(const char *fmt, struct tcb *tcp, long addr)
{
int count;
- char *cp;
+ char *cp = NULL;
- for (count = 0; umove(tcp, addr, &cp) >= 0 && cp != NULL; count++) {
- addr += sizeof(char *);
+ for (count = 0; !umoven(tcp, addr, current_wordsize, &cp) && cp; count++) {
+ addr += current_wordsize;
}
tprintf(fmt, count, count == 1 ? "" : "s");
}
bpf
caps
+execve
fanotify_mark
filter-unavailable
getrandom
check_PROGRAMS = \
bpf \
caps \
+ execve \
fanotify_mark \
filter-unavailable \
getrandom \
bpf.test \
caps.test \
dumpio.test \
+ execve.test \
fanotify_mark.test \
filter-unavailable.test \
getdents.test \
EXTRA_DIST = init.sh run.sh match.awk \
caps.awk \
dumpio.expected \
+ execve.expected \
+ execve-v.expected \
fanotify_mark.expected \
filter-unavailable.expected \
getdents.awk \
--- /dev/null
+execve\("execve\\nfilename", \["execve\\nfilename", "first", "second"\], \["foobar=1", "foo\\nbar=2"\]\) += -1 ENOENT .*
--- /dev/null
+#include <unistd.h>
+
+#define FILENAME "execve\nfilename"
+static const char * const argv[] =
+ { FILENAME, "first", "second", NULL, NULL, NULL };
+static const char * const envp[] =
+ { "foobar=1", "foo\nbar=2", NULL , "", NULL , "", NULL, NULL};
+
+int
+main(void)
+{
+ execve(FILENAME, (char * const *) argv, (char * const *) envp);
+ return 0;
+}
--- /dev/null
+execve\("execve\\nfilename", \["execve\\nfilename", "first", "second"\], \[/\* 2 vars \*/\]\) += -1 ENOENT .*
--- /dev/null
+#!/bin/sh
+
+# Check execve syscall decoding.
+
+. "${srcdir=.}/init.sh"
+
+run_prog
+run_strace $args
+match_grep
+run_strace -v $args
+match_grep "$LOG" "$srcdir/${ME_%.test}-v.expected"
+
+exit 0