Re: [PATCH bpf v2] selftests/bpf: fix endianness issues in test_sysctl

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 8/19/19 12:59 PM, Ilya Leoshkevich wrote:
A lot of test_sysctl sub-tests fail due to handling strings as a bunch
of immediate values in a little-endian-specific manner.

Fix by wrapping all immediates in bpf_ntohl and the new bpf_be64_to_cpu.

Also, sometimes tests fail because sysctl() unexpectedly succeeds with
an inappropriate "Unexpected failure" message and a random errno. Zero
out errno before calling sysctl() and replace the message with
"Unexpected success".

Fixes: 1f5fa9ab6e2e ("selftests/bpf: Test BPF_CGROUP_SYSCTL")
Fixes: 9a1027e52535 ("selftests/bpf: Test file_pos field in bpf_sysctl ctx")
Fixes: 6041c67f28d8 ("selftests/bpf: Test bpf_sysctl_get_name helper")
Fixes: 11ff34f74e32 ("selftests/bpf: Test sysctl_get_current_value helper")
Fixes: 786047dd08de ("selftests/bpf: Test bpf_sysctl_{get,set}_new_value helpers")
Fixes: 8549ddc832d6 ("selftests/bpf: Test bpf_strtol and bpf_strtoul helpers")
Signed-off-by: Ilya Leoshkevich <iii@xxxxxxxxxxxxx>
---
v1->v2: Use bpf_ntohl and bpf_be64_to_cpu, drop __bpf_le64_to_cpu.

  tools/testing/selftests/bpf/bpf_endian.h  |   7 ++
  tools/testing/selftests/bpf/test_sysctl.c | 130 ++++++++++++++--------
  2 files changed, 92 insertions(+), 45 deletions(-)

diff --git a/tools/testing/selftests/bpf/bpf_endian.h b/tools/testing/selftests/bpf/bpf_endian.h
index 05f036df8a4c..f3be9322e89c 100644
--- a/tools/testing/selftests/bpf/bpf_endian.h
+++ b/tools/testing/selftests/bpf/bpf_endian.h
@@ -29,6 +29,8 @@
  # define __bpf_htonl(x)			__builtin_bswap32(x)
  # define __bpf_constant_ntohl(x)	___constant_swab32(x)
  # define __bpf_constant_htonl(x)	___constant_swab32(x)
+# define __bpf_be64_to_cpu(x)		__builtin_bswap64(x)
+# define __bpf_constant_be64_to_cpu(x)	___constant_swab64(x)
  #elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
  # define __bpf_ntohs(x)			(x)
  # define __bpf_htons(x)			(x)
@@ -38,6 +40,8 @@
  # define __bpf_htonl(x)			(x)
  # define __bpf_constant_ntohl(x)	(x)
  # define __bpf_constant_htonl(x)	(x)
+# define __bpf_be64_to_cpu(x)		(x)
+# define __bpf_constant_be64_to_cpu(x)  (x)
  #else
  # error "Fix your compiler's __BYTE_ORDER__?!"
  #endif
@@ -54,5 +58,8 @@
  #define bpf_ntohl(x)				\
  	(__builtin_constant_p(x) ?		\
  	 __bpf_constant_ntohl(x) : __bpf_ntohl(x))
+#define bpf_be64_to_cpu(x)			\
+	(__builtin_constant_p(x) ?		\
+	 __bpf_constant_be64_to_cpu(x) : __bpf_be64_to_cpu(x))
#endif /* __BPF_ENDIAN__ */

By the way, looks like progs/test_lwt_seg6local.c defines its own ntohll()/htonll(),
could we make this two patches: i) consolidating the former by adding proper variants
to bpf_endian.h (I mean generically) and ii) fixing test_sysctl.c by using them? Thinking
addition of i) as plan for bpf-next would be to move bpf_endian.h as proper API into
libbpf in near future such that BPF progs don't need to redefine them.

Thanks,
Daniel



[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux