Skip to content

Commit

Permalink
Merge tag 'linux-kselftest-fixes-5.10-rc3' of git://git.kernel.org/pu…
Browse files Browse the repository at this point in the history
…b/scm/linux/kernel/git/shuah/linux-kselftest

Pull Kselftest fixes from Shuah Khan:
 "Fixes to the ftrace test and several fixes from Tommi Rantala for
  various other tests"

* tag 'linux-kselftest-fixes-5.10-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux-kselftest:
  selftests: binderfs: use SKIP instead of XFAIL
  selftests: clone3: use SKIP instead of XFAIL
  selftests: core: use SKIP instead of XFAIL in close_range_test.c
  selftests: proc: fix warning: _GNU_SOURCE redefined
  selftests: pidfd: drop needless linux/kcmp.h inclusion in pidfd_setns_test.c
  selftests: pidfd: add CONFIG_CHECKPOINT_RESTORE=y to config
  selftests: pidfd: skip test on kcmp() ENOSYS
  selftests: pidfd: use ksft_test_result_skip() when skipping test
  selftests/harness: prettify SKIP message whitespace again
  selftests: pidfd: fix compilation errors due to wait.h
  selftests: filter kselftest headers from command in lib.mk
  selftests/ftrace: check for do_sys_openat2 in user-memory test
  selftests/ftrace: Use $FUNCTION_FORK to reference kernel fork function
  • Loading branch information
Linus Torvalds committed Nov 6, 2020
2 parents d4fc968 + 7d764b6 commit 03f0f5a
Show file tree
Hide file tree
Showing 34 changed files with 65 additions and 56 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ TEST(clone3_cap_checkpoint_restore)
test_clone3_supported();

EXPECT_EQ(getuid(), 0)
XFAIL(return, "Skipping all tests as non-root\n");
SKIP(return, "Skipping all tests as non-root");

memset(&set_tid, 0, sizeof(set_tid));

Expand Down
8 changes: 4 additions & 4 deletions tools/testing/selftests/core/close_range_test.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,15 +44,15 @@ TEST(close_range)
fd = open("/dev/null", O_RDONLY | O_CLOEXEC);
ASSERT_GE(fd, 0) {
if (errno == ENOENT)
XFAIL(return, "Skipping test since /dev/null does not exist");
SKIP(return, "Skipping test since /dev/null does not exist");
}

open_fds[i] = fd;
}

EXPECT_EQ(-1, sys_close_range(open_fds[0], open_fds[100], -1)) {
if (errno == ENOSYS)
XFAIL(return, "close_range() syscall not supported");
SKIP(return, "close_range() syscall not supported");
}

EXPECT_EQ(0, sys_close_range(open_fds[0], open_fds[50], 0));
Expand Down Expand Up @@ -108,7 +108,7 @@ TEST(close_range_unshare)
fd = open("/dev/null", O_RDONLY | O_CLOEXEC);
ASSERT_GE(fd, 0) {
if (errno == ENOENT)
XFAIL(return, "Skipping test since /dev/null does not exist");
SKIP(return, "Skipping test since /dev/null does not exist");
}

open_fds[i] = fd;
Expand Down Expand Up @@ -197,7 +197,7 @@ TEST(close_range_unshare_capped)
fd = open("/dev/null", O_RDONLY | O_CLOEXEC);
ASSERT_GE(fd, 0) {
if (errno == ENOENT)
XFAIL(return, "Skipping test since /dev/null does not exist");
SKIP(return, "Skipping test since /dev/null does not exist");
}

open_fds[i] = fd;
Expand Down
8 changes: 4 additions & 4 deletions tools/testing/selftests/filesystems/binderfs/binderfs_test.c
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ static int __do_binderfs_test(struct __test_metadata *_metadata)
ret = mount(NULL, binderfs_mntpt, "binder", 0, 0);
EXPECT_EQ(ret, 0) {
if (errno == ENODEV)
XFAIL(goto out, "binderfs missing");
SKIP(goto out, "binderfs missing");
TH_LOG("%s - Failed to mount binderfs", strerror(errno));
goto rmdir;
}
Expand Down Expand Up @@ -475,10 +475,10 @@ TEST(binderfs_stress)
TEST(binderfs_test_privileged)
{
if (geteuid() != 0)
XFAIL(return, "Tests are not run as root. Skipping privileged tests");
SKIP(return, "Tests are not run as root. Skipping privileged tests");

if (__do_binderfs_test(_metadata))
XFAIL(return, "The Android binderfs filesystem is not available");
SKIP(return, "The Android binderfs filesystem is not available");
}

TEST(binderfs_test_unprivileged)
Expand Down Expand Up @@ -511,7 +511,7 @@ TEST(binderfs_test_unprivileged)
ret = wait_for_pid(pid);
if (ret) {
if (ret == 2)
XFAIL(return, "The Android binderfs filesystem is not available");
SKIP(return, "The Android binderfs filesystem is not available");
ASSERT_EQ(ret, 0) {
TH_LOG("wait_for_pid() failed");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
echo 0 > events/enable
echo > dynamic_events

PLACE=kernel_clone
PLACE=$FUNCTION_FORK

echo "p:myevent1 $PLACE" >> dynamic_events
echo "r:myevent2 $PLACE" >> dynamic_events
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
echo 0 > events/enable
echo > dynamic_events

PLACE=kernel_clone
PLACE=$FUNCTION_FORK

setup_events() {
echo "p:myevent1 $PLACE" >> dynamic_events
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
echo 0 > events/enable
echo > dynamic_events

PLACE=kernel_clone
PLACE=$FUNCTION_FORK

setup_events() {
echo "p:myevent1 $PLACE" >> dynamic_events
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ do_test() {
disable_tracing

echo do_execve* > set_ftrace_filter
echo *do_fork >> set_ftrace_filter
echo $FUNCTION_FORK >> set_ftrace_filter

echo $PID > set_ftrace_notrace_pid
echo function > current_tracer
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ do_test() {
disable_tracing

echo do_execve* > set_ftrace_filter
echo *do_fork >> set_ftrace_filter
echo $FUNCTION_FORK >> set_ftrace_filter

echo $PID > set_ftrace_pid
echo function > current_tracer
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
# requires: set_ftrace_filter
# flags: instance

echo kernel_clone:stacktrace >> set_ftrace_filter
echo $FUNCTION_FORK:stacktrace >> set_ftrace_filter

grep -q "kernel_clone:stacktrace:unlimited" set_ftrace_filter
grep -q "$FUNCTION_FORK:stacktrace:unlimited" set_ftrace_filter

(echo "forked"; sleep 1)

Expand Down
7 changes: 7 additions & 0 deletions tools/testing/selftests/ftrace/test.d/functions
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,13 @@ yield() {
ping $LOCALHOST -c 1 || sleep .001 || usleep 1 || sleep 1
}

# The fork function in the kernel was renamed from "_do_fork" to
# "kernel_fork". As older tests should still work with older kernels
# as well as newer kernels, check which version of fork is used on this
# kernel so that the tests can use the fork function for the running kernel.
FUNCTION_FORK=`(if grep '\bkernel_clone\b' /proc/kallsyms > /dev/null; then
echo kernel_clone; else echo '_do_fork'; fi)`

# Since probe event command may include backslash, explicitly use printf "%s"
# to NOT interpret it.
ftrace_errlog_check() { # err-prefix command-with-error-pos-by-^ command-file
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# description: Kprobe dynamic event - adding and removing
# requires: kprobe_events

echo p:myevent kernel_clone > kprobe_events
echo p:myevent $FUNCTION_FORK > kprobe_events
grep myevent kprobe_events
test -d events/kprobes/myevent
echo > kprobe_events
2 changes: 1 addition & 1 deletion tools/testing/selftests/ftrace/test.d/kprobe/busy_check.tc
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# description: Kprobe dynamic event - busy event check
# requires: kprobe_events

echo p:myevent kernel_clone > kprobe_events
echo p:myevent $FUNCTION_FORK > kprobe_events
test -d events/kprobes/myevent
echo 1 > events/kprobes/myevent/enable
echo > kprobe_events && exit_fail # this must fail
Expand Down
4 changes: 2 additions & 2 deletions tools/testing/selftests/ftrace/test.d/kprobe/kprobe_args.tc
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@
# description: Kprobe dynamic event with arguments
# requires: kprobe_events

echo 'p:testprobe kernel_clone $stack $stack0 +0($stack)' > kprobe_events
echo "p:testprobe $FUNCTION_FORK \$stack \$stack0 +0(\$stack)" > kprobe_events
grep testprobe kprobe_events | grep -q 'arg1=\$stack arg2=\$stack0 arg3=+0(\$stack)'
test -d events/kprobes/testprobe

echo 1 > events/kprobes/testprobe/enable
( echo "forked")
grep testprobe trace | grep 'kernel_clone' | \
grep testprobe trace | grep "$FUNCTION_FORK" | \
grep -q 'arg1=0x[[:xdigit:]]* arg2=0x[[:xdigit:]]* arg3=0x[[:xdigit:]]*$'

echo 0 > events/kprobes/testprobe/enable
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

grep -A1 "fetcharg:" README | grep -q "\$comm" || exit_unsupported # this is too old

echo 'p:testprobe kernel_clone comm=$comm ' > kprobe_events
echo "p:testprobe $FUNCTION_FORK comm=\$comm " > kprobe_events
grep testprobe kprobe_events | grep -q 'comm=$comm'
test -d events/kprobes/testprobe

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,13 @@ esac
: "Test get argument (1)"
echo "p:testprobe tracefs_create_dir arg1=+0(${ARG1}):string" > kprobe_events
echo 1 > events/kprobes/testprobe/enable
echo "p:test kernel_clone" >> kprobe_events
echo "p:test $FUNCTION_FORK" >> kprobe_events
grep -qe "testprobe.* arg1=\"test\"" trace

echo 0 > events/kprobes/testprobe/enable
: "Test get argument (2)"
echo "p:testprobe tracefs_create_dir arg1=+0(${ARG1}):string arg2=+0(${ARG1}):string" > kprobe_events
echo 1 > events/kprobes/testprobe/enable
echo "p:test kernel_clone" >> kprobe_events
echo "p:test $FUNCTION_FORK" >> kprobe_events
grep -qe "testprobe.* arg1=\"test\" arg2=\"test\"" trace

Original file line number Diff line number Diff line change
Expand Up @@ -14,20 +14,20 @@ elif ! grep "$SYMBOL\$" /proc/kallsyms; then
fi

: "Test get basic types symbol argument"
echo "p:testprobe_u kernel_clone arg1=@linux_proc_banner:u64 arg2=@linux_proc_banner:u32 arg3=@linux_proc_banner:u16 arg4=@linux_proc_banner:u8" > kprobe_events
echo "p:testprobe_s kernel_clone arg1=@linux_proc_banner:s64 arg2=@linux_proc_banner:s32 arg3=@linux_proc_banner:s16 arg4=@linux_proc_banner:s8" >> kprobe_events
echo "p:testprobe_u $FUNCTION_FORK arg1=@linux_proc_banner:u64 arg2=@linux_proc_banner:u32 arg3=@linux_proc_banner:u16 arg4=@linux_proc_banner:u8" > kprobe_events
echo "p:testprobe_s $FUNCTION_FORK arg1=@linux_proc_banner:s64 arg2=@linux_proc_banner:s32 arg3=@linux_proc_banner:s16 arg4=@linux_proc_banner:s8" >> kprobe_events
if grep -q "x8/16/32/64" README; then
echo "p:testprobe_x kernel_clone arg1=@linux_proc_banner:x64 arg2=@linux_proc_banner:x32 arg3=@linux_proc_banner:x16 arg4=@linux_proc_banner:x8" >> kprobe_events
echo "p:testprobe_x $FUNCTION_FORK arg1=@linux_proc_banner:x64 arg2=@linux_proc_banner:x32 arg3=@linux_proc_banner:x16 arg4=@linux_proc_banner:x8" >> kprobe_events
fi
echo "p:testprobe_bf kernel_clone arg1=@linux_proc_banner:b8@4/32" >> kprobe_events
echo "p:testprobe_bf $FUNCTION_FORK arg1=@linux_proc_banner:b8@4/32" >> kprobe_events
echo 1 > events/kprobes/enable
(echo "forked")
echo 0 > events/kprobes/enable
grep "testprobe_[usx]:.* arg1=.* arg2=.* arg3=.* arg4=.*" trace
grep "testprobe_bf:.* arg1=.*" trace

: "Test get string symbol argument"
echo "p:testprobe_str kernel_clone arg1=@linux_proc_banner:string" > kprobe_events
echo "p:testprobe_str $FUNCTION_FORK arg1=@linux_proc_banner:string" > kprobe_events
echo 1 > events/kprobes/enable
(echo "forked")
echo 0 > events/kprobes/enable
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
# requires: kprobe_events "x8/16/32/64":README

gen_event() { # Bitsize
echo "p:testprobe kernel_clone \$stack0:s$1 \$stack0:u$1 \$stack0:x$1 \$stack0:b4@4/$1"
echo "p:testprobe $FUNCTION_FORK \$stack0:s$1 \$stack0:u$1 \$stack0:x$1 \$stack0:b4@4/$1"
}

check_types() { # s-type u-type x-type bf-type width
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,16 @@ grep -A10 "fetcharg:" README | grep -q '\[u\]<offset>' || exit_unsupported
:;: "user-memory access syntax and ustring working on user memory";:
echo 'p:myevent do_sys_open path=+0($arg2):ustring path2=+u0($arg2):string' \
> kprobe_events
echo 'p:myevent2 do_sys_openat2 path=+0($arg2):ustring path2=+u0($arg2):string' \
>> kprobe_events

grep myevent kprobe_events | \
grep -q 'path=+0($arg2):ustring path2=+u0($arg2):string'
echo 1 > events/kprobes/myevent/enable
echo 1 > events/kprobes/myevent2/enable
echo > /dev/null
echo 0 > events/kprobes/myevent/enable
echo 0 > events/kprobes/myevent2/enable

grep myevent trace | grep -q 'path="/dev/null" path2="/dev/null"'

Expand Down
14 changes: 7 additions & 7 deletions tools/testing/selftests/ftrace/test.d/kprobe/kprobe_ftrace.tc
Original file line number Diff line number Diff line change
Expand Up @@ -5,41 +5,41 @@

# prepare
echo nop > current_tracer
echo kernel_clone > set_ftrace_filter
echo 'p:testprobe kernel_clone' > kprobe_events
echo $FUNCTION_FORK > set_ftrace_filter
echo "p:testprobe $FUNCTION_FORK" > kprobe_events

# kprobe on / ftrace off
echo 1 > events/kprobes/testprobe/enable
echo > trace
( echo "forked")
grep testprobe trace
! grep 'kernel_clone <-' trace
! grep "$FUNCTION_FORK <-" trace

# kprobe on / ftrace on
echo function > current_tracer
echo > trace
( echo "forked")
grep testprobe trace
grep 'kernel_clone <-' trace
grep "$FUNCTION_FORK <-" trace

# kprobe off / ftrace on
echo 0 > events/kprobes/testprobe/enable
echo > trace
( echo "forked")
! grep testprobe trace
grep 'kernel_clone <-' trace
grep "$FUNCTION_FORK <-" trace

# kprobe on / ftrace on
echo 1 > events/kprobes/testprobe/enable
echo function > current_tracer
echo > trace
( echo "forked")
grep testprobe trace
grep 'kernel_clone <-' trace
grep "$FUNCTION_FORK <-" trace

# kprobe on / ftrace off
echo nop > current_tracer
echo > trace
( echo "forked")
grep testprobe trace
! grep 'kernel_clone <-' trace
! grep "$FUNCTION_FORK <-" trace
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
# requires: kprobe_events "Create/append/":README

# Choose 2 symbols for target
SYM1=kernel_clone
SYM1=$FUNCTION_FORK
SYM2=do_exit
EVENT_NAME=kprobes/testevent

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,15 +86,15 @@ esac

# multiprobe errors
if grep -q "Create/append/" README && grep -q "imm-value" README; then
echo 'p:kprobes/testevent kernel_clone' > kprobe_events
echo "p:kprobes/testevent $FUNCTION_FORK" > kprobe_events
check_error '^r:kprobes/testevent do_exit' # DIFF_PROBE_TYPE

# Explicitly use printf "%s" to not interpret \1
printf "%s" 'p:kprobes/testevent kernel_clone abcd=\1' > kprobe_events
check_error 'p:kprobes/testevent kernel_clone ^bcd=\1' # DIFF_ARG_TYPE
check_error 'p:kprobes/testevent kernel_clone ^abcd=\1:u8' # DIFF_ARG_TYPE
check_error 'p:kprobes/testevent kernel_clone ^abcd=\"foo"' # DIFF_ARG_TYPE
check_error '^p:kprobes/testevent kernel_clone abcd=\1' # SAME_PROBE
printf "%s" "p:kprobes/testevent $FUNCTION_FORK abcd=\\1" > kprobe_events
check_error "p:kprobes/testevent $FUNCTION_FORK ^bcd=\\1" # DIFF_ARG_TYPE
check_error "p:kprobes/testevent $FUNCTION_FORK ^abcd=\\1:u8" # DIFF_ARG_TYPE
check_error "p:kprobes/testevent $FUNCTION_FORK ^abcd=\\\"foo\"" # DIFF_ARG_TYPE
check_error "^p:kprobes/testevent $FUNCTION_FORK abcd=\\1" # SAME_PROBE
fi

# %return suffix errors
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@
# requires: kprobe_events

# Add new kretprobe event
echo 'r:testprobe2 kernel_clone $retval' > kprobe_events
echo "r:testprobe2 $FUNCTION_FORK \$retval" > kprobe_events
grep testprobe2 kprobe_events | grep -q 'arg1=\$retval'
test -d events/kprobes/testprobe2

echo 1 > events/kprobes/testprobe2/enable
( echo "forked")

cat trace | grep testprobe2 | grep -q '<- kernel_clone'
cat trace | grep testprobe2 | grep -q "<- $FUNCTION_FORK"

echo 0 > events/kprobes/testprobe2/enable
echo '-:testprobe2' >> kprobe_events
Expand Down
2 changes: 1 addition & 1 deletion tools/testing/selftests/ftrace/test.d/kprobe/profile.tc
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
# requires: kprobe_events

! grep -q 'myevent' kprobe_profile
echo p:myevent kernel_clone > kprobe_events
echo "p:myevent $FUNCTION_FORK" > kprobe_events
grep -q 'myevent[[:space:]]*0[[:space:]]*0$' kprobe_profile
echo 1 > events/kprobes/myevent/enable
( echo "forked" )
Expand Down
2 changes: 1 addition & 1 deletion tools/testing/selftests/kselftest_harness.h
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@
snprintf(_metadata->results->reason, \
sizeof(_metadata->results->reason), fmt, ##__VA_ARGS__); \
if (TH_LOG_ENABLED) { \
fprintf(TH_LOG_STREAM, "# SKIP %s\n", \
fprintf(TH_LOG_STREAM, "# SKIP %s\n", \
_metadata->results->reason); \
} \
_metadata->passed = 1; \
Expand Down
2 changes: 1 addition & 1 deletion tools/testing/selftests/lib.mk
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ endif
ifeq ($(OVERRIDE_TARGETS),)
LOCAL_HDRS := $(selfdir)/kselftest_harness.h $(selfdir)/kselftest.h
$(OUTPUT)/%:%.c $(LOCAL_HDRS)
$(LINK.c) $^ $(LDLIBS) -o $@
$(LINK.c) $(filter-out $(LOCAL_HDRS),$^) $(LDLIBS) -o $@

$(OUTPUT)/%.o:%.S
$(COMPILE.S) $^ -o $@
Expand Down
1 change: 1 addition & 0 deletions tools/testing/selftests/pidfd/config
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@ CONFIG_USER_NS=y
CONFIG_PID_NS=y
CONFIG_NET_NS=y
CONFIG_CGROUPS=y
CONFIG_CHECKPOINT_RESTORE=y
5 changes: 4 additions & 1 deletion tools/testing/selftests/pidfd/pidfd_getfd_test.c
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,10 @@ TEST_F(child, fetch_fd)
fd = sys_pidfd_getfd(self->pidfd, self->remote_fd, 0);
ASSERT_GE(fd, 0);

EXPECT_EQ(0, sys_kcmp(getpid(), self->pid, KCMP_FILE, fd, self->remote_fd));
ret = sys_kcmp(getpid(), self->pid, KCMP_FILE, fd, self->remote_fd);
if (ret < 0 && errno == ENOSYS)
SKIP(return, "kcmp() syscall not supported");
EXPECT_EQ(ret, 0);

ret = fcntl(fd, F_GETFD);
ASSERT_GE(ret, 0);
Expand Down
Loading

0 comments on commit 03f0f5a

Please sign in to comment.