capability: test_deny_namespace breakage due to capability conversion to u64

Message ID 20230324123626.2177476-1-sashal@kernel.org
State New
Headers
Series capability: test_deny_namespace breakage due to capability conversion to u64 |

Commit Message

Sasha Levin March 24, 2023, 12:36 p.m. UTC
  Commit f122a08b197d ("capability: just use a 'u64' instead of a 'u32[2]'
array") attempts to use BIT_LL() but actually wanted to use BIT_ULL(),
fix it up to make the test compile and run again.

Fixes: f122a08b197d ("capability: just use a 'u64' instead of a 'u32[2]' array")
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 tools/testing/selftests/bpf/Makefile                    | 2 +-
 tools/testing/selftests/bpf/progs/test_deny_namespace.c | 3 ++-
 2 files changed, 3 insertions(+), 2 deletions(-)
  

Comments

Linus Torvalds March 24, 2023, 4:39 p.m. UTC | #1
On Fri, Mar 24, 2023 at 5:36 AM Sasha Levin <sashal@kernel.org> wrote:
>
> Commit f122a08b197d ("capability: just use a 'u64' instead of a 'u32[2]'
> array") attempts to use BIT_LL() but actually wanted to use BIT_ULL(),
> fix it up to make the test compile and run again.

This got fixed differently by e8c8361cfdbf ("selftests/bpf: Fix
progs/test_deny_namespace.c issues").

I wonder what drugs made me think BIT_LL() was ok. Maybe my wife puts
something in the coffee?

                Linus
  
Alexei Starovoitov March 24, 2023, 7:48 p.m. UTC | #2
On Fri, Mar 24, 2023 at 9:49 AM Linus Torvalds
<torvalds@linux-foundation.org> wrote:
>
> On Fri, Mar 24, 2023 at 5:36 AM Sasha Levin <sashal@kernel.org> wrote:
> >
> > Commit f122a08b197d ("capability: just use a 'u64' instead of a 'u32[2]'
> > array") attempts to use BIT_LL() but actually wanted to use BIT_ULL(),
> > fix it up to make the test compile and run again.

It would only fix the compilation error, but the test would still fail.

> This got fixed differently by e8c8361cfdbf ("selftests/bpf: Fix
> progs/test_deny_namespace.c issues").

exactly. It's not just the macro that had to be adjusted.

> I wonder what drugs made me think BIT_LL() was ok. Maybe my wife puts
> something in the coffee?

$ make C=2 kernel/bpf/core.o
kernel/bpf/core.c:1822:43: error: arithmetics on pointers to functions
kernel/bpf/core.c:1827:48: error: arithmetics on pointers to functions
kernel/bpf/core.c:2073:77: error: subtraction of functions? Share your drugs

:)
  

Patch

diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests/bpf/Makefile
index b677dcd0b77af..91a4e61b61f6d 100644
--- a/tools/testing/selftests/bpf/Makefile
+++ b/tools/testing/selftests/bpf/Makefile
@@ -353,7 +353,7 @@  endif
 CLANG_SYS_INCLUDES = $(call get_sys_includes,$(CLANG),$(CLANG_TARGET_ARCH))
 BPF_CFLAGS = -g -Werror -D__TARGET_ARCH_$(SRCARCH) $(MENDIAN) 		\
 	     -I$(INCLUDE_DIR) -I$(CURDIR) -I$(APIDIR)			\
-	     -I$(abspath $(OUTPUT)/../usr/include)
+	     -I$(abspath $(OUTPUT)/../usr/include) -I$(TOOLSINCDIR)
 
 CLANG_CFLAGS = $(CLANG_SYS_INCLUDES) \
 	       -Wno-compare-distinct-pointer-types
diff --git a/tools/testing/selftests/bpf/progs/test_deny_namespace.c b/tools/testing/selftests/bpf/progs/test_deny_namespace.c
index 591104e79812e..0a619c34d692d 100644
--- a/tools/testing/selftests/bpf/progs/test_deny_namespace.c
+++ b/tools/testing/selftests/bpf/progs/test_deny_namespace.c
@@ -4,6 +4,7 @@ 
 #include <bpf/bpf_tracing.h>
 #include <errno.h>
 #include <linux/capability.h>
+#include <vdso/bits.h>
 
 struct kernel_cap_struct {
 	__u64 val;
@@ -19,7 +20,7 @@  SEC("lsm.s/userns_create")
 int BPF_PROG(test_userns_create, const struct cred *cred, int ret)
 {
 	struct kernel_cap_struct caps = cred->cap_effective;
-	__u64 cap_mask = BIT_LL(CAP_SYS_ADMIN);
+	__u64 cap_mask = BIT_ULL(CAP_SYS_ADMIN);
 
 	if (ret)
 		return 0;