linux/tools/testing/selftests
Eduard Zingerman 3b3b84aacb selftests/bpf: adjust dummy_st_ops_success to detect additional error
As reported by Jose E. Marchesi in off-list discussion, GCC and LLVM
generate slightly different code for dummy_st_ops_success/test_1():

  SEC("struct_ops/test_1")
  int BPF_PROG(test_1, struct bpf_dummy_ops_state *state)
  {
  	int ret;

  	if (!state)
  		return 0xf2f3f4f5;

  	ret = state->val;
  	state->val = 0x5a;
  	return ret;
  }

  GCC-generated                  LLVM-generated
  ----------------------------   ---------------------------
  0: r1 = *(u64 *)(r1 + 0x0)     0: w0 = -0xd0c0b0b
  1: if r1 == 0x0 goto 5f        1: r1 = *(u64 *)(r1 + 0x0)
  2: r0 = *(s32 *)(r1 + 0x0)     2: if r1 == 0x0 goto 6f
  3: *(u32 *)(r1 + 0x0) = 0x5a   3: r0 = *(u32 *)(r1 + 0x0)
  4: exit                        4: w2 = 0x5a
  5: r0 = -0xd0c0b0b             5: *(u32 *)(r1 + 0x0) = r2
  6: exit                        6: exit

If the 'state' argument is not marked as nullable in
net/bpf/bpf_dummy_struct_ops.c, the verifier would assume that
'r1 == 0x0' is never true:
- for the GCC version, this means that instructions #5-6 would be
  marked as dead and removed;
- for the LLVM version, all instructions would be marked as live.

The test dummy_st_ops/dummy_init_ret_value actually sets the 'state'
parameter to NULL.

Therefore, when the 'state' argument is not marked as nullable,
the GCC-generated version of the code would trigger a NULL pointer
dereference at instruction #3.

This patch updates the test_1() test case to always follow a shape
similar to the GCC-generated version above, in order to verify whether
the 'state' nullability is marked correctly.

Reported-by: Jose E. Marchesi <jemarch@gnu.org>
Signed-off-by: Eduard Zingerman <eddyz87@gmail.com>
Link: https://lore.kernel.org/r/20240424012821.595216-3-eddyz87@gmail.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
2024-04-25 12:42:43 -07:00
..
alsa selftests: avoid using SKIP(exit()) in harness fixure setup 2024-03-05 19:25:36 -08:00
amd-pstate selftests/amd-pstate: Added option to provide perf binary path 2023-10-16 13:06:58 -06:00
arm64 Merge branches 'for-next/reorg-va-space', 'for-next/rust-for-arm64', 'for-next/misc', 'for-next/daif-cleanup', 'for-next/kselftest', 'for-next/documentation', 'for-next/sysreg' and 'for-next/dpisa', remote-tracking branch 'arm64/for-next/perf' into for-next/core 2024-03-07 19:04:55 +00:00
bpf selftests/bpf: adjust dummy_st_ops_success to detect additional error 2024-04-25 12:42:43 -07:00
breakpoints selftests/breakpoints: Fix format specifier in ksft_print_msg in step_after_suspend_test.c 2023-11-30 14:32:34 -07:00
cachestat selftests/cachestat: Fix print_cachestat format 2023-10-13 14:08:10 -06:00
capabilities selftests: capabilities: namespace create varies for root and normal user 2023-11-30 16:37:30 -07:00
cgroup selftests: add zswapin and no zswap tests 2024-02-22 15:27:16 -08:00
clone3 Many singleton patches against the MM code. The patch series which are 2023-11-02 19:38:47 -10:00
connector selftests: connector: Fix input argument error paths to skip 2023-07-31 20:11:42 -07:00
core selftests: core: include linux/close_range.h for CLOSE_RANGE_* macros 2024-02-07 21:20:34 -08:00
cpu-hotplug
cpufreq selftests/cpufreq: Don't enable generic lock debugging options 2023-06-12 16:39:11 -06:00
damon selftests: damon: add access_memory to .gitignore 2024-03-04 17:01:16 -08:00
devices kselftest: devices: Add sample board file for XPS 13 9300 2024-01-27 17:38:53 -08:00
dma
dmabuf-heaps selftests/dmabuf-heaps: add gitignore file 2023-10-05 14:22:59 -06:00
drivers selftests: forwarding: Change inappropriate log_test_skip() calls 2024-03-28 18:03:42 -07:00
dt linux_kselftest-next-6.9-rc1 2024-03-11 09:25:33 -07:00
efivarfs selftests/efivarfs: create-read: fix a resource leak 2023-10-18 14:33:44 -06:00
exec selftests/exec: Convert remaining /bin/sh to /bin/bash 2024-03-18 11:19:37 -07:00
fchmodat2 selftests: link libasan statically for tests with -fsanitize=address 2023-09-19 13:21:32 -07:00
filelock selftests: add OFD lock tests 2023-08-24 10:41:47 -04:00
filesystems - Kuan-Wei Chiu has developed the well-named series "lib min_heap: Min 2024-03-14 18:03:09 -07:00
firmware selftests: firmware: remove duplicate unneeded defines 2023-10-06 17:33:52 -06:00
fpu
ftrace Probes updates for v6.9: 2024-03-14 16:16:33 -07:00
futex selftests: fuxex: Report a unique test name per run of futex_requeue_pi 2024-02-19 15:00:51 -07:00
gpio selftest: gpio: remove obsolete gpio-mockup test 2024-03-05 20:01:08 +01:00
hid selftests/hid: wacom: fix confidence tests 2024-01-18 09:15:38 +01:00
ia64
intel_pstate
iommu selftests/iommu: fix the config fragment 2024-02-22 09:02:05 -04:00
ipc
ir
kcmp
kexec
kmod
kselftest selftests: ktap_helpers: Add a helper to finish the test 2024-02-20 15:53:20 -07:00
kvm S390: 2024-03-15 13:03:13 -07:00
landlock Landlock updates for v6.9-rc1 2024-03-14 16:00:27 -07:00
lib
livepatch linux_kselftest-next-6.9-rc1 2024-03-11 09:25:33 -07:00
lkdtm selftests/lkdtm: Disable CONFIG_UBSAN_TRAP in test config 2023-09-28 16:39:08 -07:00
locking
lsm lsm: use 32-bit compatible data types in LSM syscalls 2024-03-14 11:31:26 -04:00
media_tests selftests: media_tests: Add new subtest to video_device_test 2023-06-12 16:39:10 -06:00
membarrier
memfd selftests/memfd: delete unused declarations 2024-02-22 10:24:38 -08:00
memory-hotplug
mincore selftests/mincore: fix skip condition for check_huge_pages test 2023-07-13 12:51:13 -06:00
mm selftests/mm: fix ARM related issue with fork after pthread_create 2024-03-26 11:14:12 -07:00
mount
mount_setattr
move_mount_set_group selftests/move_mount_set_group:Make tests build with old libc 2024-01-22 15:33:37 +01:00
mqueue selftests/mqueue: Set timeout to 180 seconds 2024-02-20 17:28:19 -07:00
nci
net selftests: forwarding: Add a test for testing lib.sh functionality 2024-03-28 18:03:43 -07:00
netfilter selftests: netfilter: add bridge conntrack + multicast test case 2024-02-29 00:22:48 +01:00
nolibc selftests/nolibc: disable coredump via setrlimit 2023-12-11 22:38:37 +01:00
nsfs
ntb
openat2 linux_kselftest-next-6.7-rc1 2023-11-01 17:08:10 -10:00
perf_events
pid_namespace
pidfd selftests: add ESRCH tests for pidfd_getfd() 2024-02-07 15:48:31 +01:00
power_supply selftests: Add test to verify power supply properties 2024-02-20 15:53:33 -07:00
powerpc powerpc updates for 6.9 2024-03-15 17:53:48 -07:00
prctl selftests: prctl: Add prctl test for PR_GET_NAME 2023-11-30 16:30:05 -07:00
proc proc: test ProtectionKey in proc-empty-vm test 2023-11-01 12:46:59 -07:00
pstore
ptp ptp: add testptp mask test 2023-10-15 20:07:52 +01:00
ptrace
rcutorture clocksource: Scale the watchdog read retries automatically 2024-02-21 12:00:42 +01:00
resctrl selftests/resctrl: Add non-contiguous CBMs CAT test 2024-02-23 15:19:25 -07:00
riscv Merge patch series "riscv: mm: Extend mappable memory up to hint address" 2024-03-15 10:17:34 -07:00
rlimits
rseq selftests/rseq: Do not skip !allowed_cpus for mm_cid 2024-01-22 11:40:36 -07:00
rtc
rust kselftest: Add basic test for probing the rust sample modules 2024-03-04 13:13:04 -07:00
safesetid
sched selftests: sched: Fix spelling mistake "hiearchy" -> "hierarchy" 2024-02-20 17:28:19 -07:00
seccomp Networking changes for 6.9. 2024-03-12 17:44:08 -07:00
sgx selftests/sgx: Skip non X86_64 platform 2023-12-08 10:08:17 -08:00
sigaltstack selftests/sigaltstack: Fix wrong format specifier 2023-10-13 14:08:26 -06:00
size
sparc64
splice
static_keys selftests: static_keys: fix test name in messages 2023-10-05 14:28:59 -06:00
sync
syscall_user_dispatch
sysctl sysclt: Clarify the results of selftest run 2023-12-28 04:57:57 -08:00
tc-testing selftests/tc-testing: require an up to date iproute2 for blockcast tests 2024-03-04 19:30:57 -08:00
tdx selftests/tdx: add gitignore file 2023-10-05 14:22:53 -06:00
thermal/intel selftests: thermal: intel: workload_hint: add missing gitignore 2024-02-20 16:30:55 -07:00
timens
timers selftests: timers: Convert nsleep-lat test to generate KTAP output 2023-10-05 15:00:14 -06:00
tmpfs
tpm2
tty selftests: tty: add selftest for tty timestamp updates 2023-06-15 13:45:42 +02:00
uevent selftests: uevent: add missing gitignore 2024-02-20 16:30:40 -07:00
user
user_events selftests/user_events: Test multi-format events 2024-03-18 10:13:12 -04:00
vDSO kselftest/vDSO: Use ksft_print_msg() rather than printf in vdso_test_abi 2023-11-30 14:50:09 -07:00
watchdog
wireguard wireguard: selftests: set RISCV_ISA_FALLBACK on riscv{32,64} 2024-03-19 11:22:50 +01:00
x86 selftests:x86: Fix Format String Warnings in lam.c 2023-11-30 14:32:41 -07:00
zram
.gitignore
gen_kselftest_tar.sh
kselftest_deps.sh selftests: fix dependency checker script 2023-09-08 10:06:49 -06:00
kselftest_harness.h selftests/harness: Fix TEST_F()'s vfork handling 2024-03-06 20:31:50 -08:00
kselftest_install.sh
kselftest_module.h
kselftest.h selftests: kselftest_harness: separate diagnostic message with # in ksft_test_result_code() 2024-03-01 10:30:29 +00:00
lib.mk Networking changes for 6.9. 2024-03-12 17:44:08 -07:00
Makefile USB/Thunderbolt changes for 6.9-rc1 2024-03-21 12:35:20 -07:00
run_kselftest.sh kselftest/runner.sh: add netns support 2023-12-23 00:26:32 +00:00