selftests/bpf: Fix a selftest compilation error with CONFIG_SMP=n
authorYonghong Song <yhs@fb.com>
Tue, 13 Dec 2022 01:22:24 +0000 (17:22 -0800)
committerDaniel Borkmann <daniel@iogearbox.net>
Wed, 14 Dec 2022 17:35:41 +0000 (18:35 +0100)
Kernel test robot reported bpf selftest build failure when CONFIG_SMP
is not set. The error message looks below:

  >> progs/rcu_read_lock.c:256:34: error: no member named 'last_wakee' in 'struct task_struct'
             last_wakee = task->real_parent->last_wakee;
                          ~~~~~~~~~~~~~~~~~  ^
     1 error generated.

When CONFIG_SMP is not set, the field 'last_wakee' is not available in struct
'task_struct'. Hence the above compilation failure. To fix the issue, let us
choose another field 'group_leader' which is available regardless of
CONFIG_SMP set or not.

Fixes: fe147956fca4 ("bpf/selftests: Add selftests for new task kfuncs")
Fixes: 48671232fcb8 ("selftests/bpf: Add tests for bpf_rcu_read_lock()")
Reported-by: kernel test robot <lkp@intel.com>
Signed-off-by: David Vernet <void@manifault.com>
Signed-off-by: Yonghong Song <yhs@fb.com>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: David Vernet <void@manifault.com>
Link: https://lore.kernel.org/bpf/20221213012224.379581-1-yhs@fb.com
tools/testing/selftests/bpf/progs/rcu_read_lock.c
tools/testing/selftests/bpf/progs/task_kfunc_failure.c

index 125f908..5cecbdb 100644 (file)
@@ -288,13 +288,13 @@ out:
 SEC("?fentry.s/" SYS_PREFIX "sys_getpgid")
 int task_untrusted_non_rcuptr(void *ctx)
 {
-       struct task_struct *task, *last_wakee;
+       struct task_struct *task, *group_leader;
 
        task = bpf_get_current_task_btf();
        bpf_rcu_read_lock();
-       /* the pointer last_wakee marked as untrusted */
-       last_wakee = task->real_parent->last_wakee;
-       (void)bpf_task_storage_get(&map_a, last_wakee, 0, 0);
+       /* the pointer group_leader marked as untrusted */
+       group_leader = task->real_parent->group_leader;
+       (void)bpf_task_storage_get(&map_a, group_leader, 0, 0);
        bpf_rcu_read_unlock();
        return 0;
 }
index 87fa1db..1b47b94 100644 (file)
@@ -73,7 +73,7 @@ int BPF_PROG(task_kfunc_acquire_trusted_walked, struct task_struct *task, u64 cl
        struct task_struct *acquired;
 
        /* Can't invoke bpf_task_acquire() on a trusted pointer obtained from walking a struct. */
-       acquired = bpf_task_acquire(task->last_wakee);
+       acquired = bpf_task_acquire(task->group_leader);
        bpf_task_release(acquired);
 
        return 0;