lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAEf4BzagkTArcqnvqgu7kNq31QFsATM36OGPLs4-GFOo0TDxsg@mail.gmail.com>
Date: Fri, 28 Mar 2025 10:30:08 -0700
From: Andrii Nakryiko <andrii.nakryiko@...il.com>
To: Song Liu <song@...nel.org>
Cc: bpf@...r.kernel.org, netdev@...r.kernel.org, ast@...nel.org, 
	daniel@...earbox.net, andrii@...nel.org, kernel-team@...a.com, 
	Jakub Kicinski <kuba@...nel.org>
Subject: Re: [PATCH bpf-next] selftests/bpf: Fix tests after change in struct file

On Thu, Mar 27, 2025 at 11:55 AM Song Liu <song@...nel.org> wrote:
>
> Change in struct file [1] moves f_ref to the 3rd cache line. This makes
> deferencing file pointer as a 8-byte variable invalid, because
> btf_struct_walk() will walk into f_lock, which is 4-byte long.
>
> Fix the selftests to deference the file pointer as a 4-byte variable.
>
> [1] commit e249056c91a2 ("fs: place f_ref to 3rd cache line in struct
>                           file to resolve false sharing")
> Reported-by: Jakub Kicinski <kuba@...nel.org>
> Signed-off-by: Song Liu <song@...nel.org>
> ---
>  tools/testing/selftests/bpf/progs/test_module_attach.c    | 2 +-
>  tools/testing/selftests/bpf/progs/test_subprogs_extable.c | 6 +++---
>  2 files changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/tools/testing/selftests/bpf/progs/test_module_attach.c b/tools/testing/selftests/bpf/progs/test_module_attach.c
> index fb07f5773888..7f3c233943b3 100644
> --- a/tools/testing/selftests/bpf/progs/test_module_attach.c
> +++ b/tools/testing/selftests/bpf/progs/test_module_attach.c
> @@ -117,7 +117,7 @@ int BPF_PROG(handle_fexit_ret, int arg, struct file *ret)
>
>         bpf_probe_read_kernel(&buf, 8, ret);
>         bpf_probe_read_kernel(&buf, 8, (char *)ret + 256);
> -       *(volatile long long *)ret;
> +       *(volatile int *)ret;

we already have `*(volatile int *)&ret->f_mode;` below, do we really
need this int casting case?.. Maybe instead of guessing the size of
file's first field, let's just remove `*(volatile long long *)ret;`
altogether?

>         *(volatile int *)&ret->f_mode;
>         return 0;
>  }
> diff --git a/tools/testing/selftests/bpf/progs/test_subprogs_extable.c b/tools/testing/selftests/bpf/progs/test_subprogs_extable.c
> index e2a21fbd4e44..dcac69f5928a 100644
> --- a/tools/testing/selftests/bpf/progs/test_subprogs_extable.c
> +++ b/tools/testing/selftests/bpf/progs/test_subprogs_extable.c
> @@ -21,7 +21,7 @@ static __u64 test_cb(struct bpf_map *map, __u32 *key, __u64 *val, void *data)
>  SEC("fexit/bpf_testmod_return_ptr")
>  int BPF_PROG(handle_fexit_ret_subprogs, int arg, struct file *ret)
>  {
> -       *(volatile long *)ret;
> +       *(volatile int *)ret;
>         *(volatile int *)&ret->f_mode;
>         bpf_for_each_map_elem(&test_array, test_cb, NULL, 0);
>         triggered++;
> @@ -31,7 +31,7 @@ int BPF_PROG(handle_fexit_ret_subprogs, int arg, struct file *ret)
>  SEC("fexit/bpf_testmod_return_ptr")
>  int BPF_PROG(handle_fexit_ret_subprogs2, int arg, struct file *ret)
>  {
> -       *(volatile long *)ret;
> +       *(volatile int *)ret;
>         *(volatile int *)&ret->f_mode;
>         bpf_for_each_map_elem(&test_array, test_cb, NULL, 0);
>         triggered++;
> @@ -41,7 +41,7 @@ int BPF_PROG(handle_fexit_ret_subprogs2, int arg, struct file *ret)
>  SEC("fexit/bpf_testmod_return_ptr")
>  int BPF_PROG(handle_fexit_ret_subprogs3, int arg, struct file *ret)
>  {
> -       *(volatile long *)ret;
> +       *(volatile int *)ret;
>         *(volatile int *)&ret->f_mode;
>         bpf_for_each_map_elem(&test_array, test_cb, NULL, 0);
>         triggered++;
> --
> 2.47.1
>

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ