1. 26 Jan, 2024 2 commits
  2. 25 Jan, 2024 32 commits
  3. 24 Jan, 2024 6 commits
    • Martin KaFai Lau's avatar
      selftests/bpf: Wait for the netstamp_needed_key static key to be turned on · ce6f6cff
      Martin KaFai Lau authored
      After the previous patch that speeded up the test (by avoiding neigh
      discovery in IPv6), the BPF CI occasionally hits this error:
      
      rcv tstamp unexpected pkt rcv tstamp: actual 0 == expected 0
      
      The test complains about the cmsg returned from the recvmsg() does not
      have the rcv timestamp. Setting skb->tstamp or not is
      controlled by a kernel static key "netstamp_needed_key". The static
      key is enabled whenever this is at least one sk with the SOCK_TIMESTAMP
      set.
      
      The test_redirect_dtime does use setsockopt() to turn on
      the SOCK_TIMESTAMP for the reading sk. In the kernel
      net_enable_timestamp() has a delay to enable the "netstamp_needed_key"
      when CONFIG_JUMP_LABEL is set. This potential delay is the likely reason
      for packet missing rcv timestamp occasionally.
      
      This patch is to create udp sockets with SOCK_TIMESTAMP set.
      It sends and receives some packets until the received packet
      has a rcv timestamp. It currently retries at most 5 times with 1s
      in between. This should be enough to wait for the "netstamp_needed_key".
      It then holds on to the socket and only closes it at the end of the test.
      This guarantees that the test has the "netstamp_needed_key" key turned
      on from the beginning.
      
      To simplify the udp sockets setup, they are sending/receiving packets
      in the same netns (ns_dst is used) and communicate over the "lo" dev.
      Hence, the patch enables the "lo" dev in the ns_dst.
      
      Fixes: c803475f ("bpf: selftests: test skb->tstamp in redirect_neigh")
      Signed-off-by: default avatarMartin KaFai Lau <martin.lau@kernel.org>
      Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
      Link: https://lore.kernel.org/bpf/20240120060518.3604920-2-martin.lau@linux.dev
      ce6f6cff
    • Martin KaFai Lau's avatar
      selftests/bpf: Fix the flaky tc_redirect_dtime test · 177f1d08
      Martin KaFai Lau authored
      BPF CI has been reporting the tc_redirect_dtime test failing
      from time to time:
      
      test_inet_dtime:PASS:setns src 0 nsec
      (network_helpers.c:253: errno: No route to host) Failed to connect to server
      close_netns:PASS:setns 0 nsec
      test_inet_dtime:FAIL:connect_to_fd unexpected connect_to_fd: actual -1 < expected 0
      test_tcp_clear_dtime:PASS:tcp ip6 clear dtime ingress_fwdns_p100 0 nsec
      
      The connect_to_fd failure (EHOSTUNREACH) is from the
      test_tcp_clear_dtime() test and it is the very first IPv6 traffic
      after setting up all the links, addresses, and routes.
      
      The symptom is this first connect() is always slow. In my setup, it
      could take ~3s.
      
      After some tracing and tcpdump, the slowness is mostly spent in
      the neighbor solicitation in the "ns_fwd" namespace while
      the "ns_src" and "ns_dst" are fine.
      
      I forced the kernel to drop the neighbor solicitation messages.
      I can then reproduce EHOSTUNREACH. What actually happen could be:
      - the neighbor advertisement came back a little slow.
      - the "ns_fwd" namespace concluded a neighbor discovery failure
        and triggered the ndisc_error_report() => ip6_link_failure() =>
        icmpv6_send(skb, ICMPV6_DEST_UNREACH, ICMPV6_ADDR_UNREACH, 0)
      - the client's connect() reports EHOSTUNREACH after receiving
        the ICMPV6_DEST_UNREACH message.
      
      The neigh table of both "ns_src" and "ns_dst" namespace has already
      been manually populated but not the "ns_fwd" namespace. This patch
      fixes it by manually populating the neigh table also in the "ns_fwd"
      namespace.
      
      Although the namespace configuration part had been existed before
      the tc_redirect_dtime test, still Fixes-tagging the patch when
      the tc_redirect_dtime test was added since it is the only test
      hitting it so far.
      
      Fixes: c803475f ("bpf: selftests: test skb->tstamp in redirect_neigh")
      Signed-off-by: default avatarMartin KaFai Lau <martin.lau@kernel.org>
      Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
      Link: https://lore.kernel.org/bpf/20240120060518.3604920-1-martin.lau@linux.dev
      177f1d08
    • Dima Tisnek's avatar
      libbpf: Correct bpf_core_read.h comment wrt bpf_core_relo struct · d47b9f68
      Dima Tisnek authored
      Past commit ([0]) removed the last vestiges of struct bpf_field_reloc,
      it's called struct bpf_core_relo now.
      
        [0] 28b93c64 ("libbpf: Clean up and improve CO-RE reloc logging")
      Signed-off-by: default avatarDima Tisnek <dimaqq@gmail.com>
      Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
      Acked-by: default avatarYonghong Song <yonghong.song@linux.dev>
      Link: https://lore.kernel.org/bpf/20240121060126.15650-1-dimaqq@gmail.com
      d47b9f68
    • Andrii Nakryiko's avatar
      Merge branch 'skip-callback-tests-if-jit-is-disabled-in-test_verifier' · 32749605
      Andrii Nakryiko authored
      Tiezhu Yang says:
      
      ====================
      Skip callback tests if jit is disabled in test_verifier
      
      Thanks very much for the feedbacks from Eduard, John, Jiri, Daniel,
      Hou Tao, Song Liu and Andrii.
      
      v7:
        -- Add an explicit flag F_NEEDS_JIT_ENABLED for checking,
           thanks Andrii.
      
      v6:
        -- Copy insn_is_pseudo_func() into testing_helpers,
           thanks Andrii.
      
      v5:
        -- Reuse is_ldimm64_insn() and insn_is_pseudo_func(),
           thanks Song Liu.
      
      v4:
        -- Move the not-allowed-checking into "if (expected_ret ...)"
           block, thanks Hou Tao.
        -- Do some small changes to avoid checkpatch warning
           about "line length exceeds 100 columns".
      
      v3:
        -- Rebase on the latest bpf-next tree.
        -- Address the review comments by Hou Tao,
           remove the second argument "0" of open(),
           check only once whether jit is disabled,
           check fd_prog, saved_errno and jit_disabled to skip.
      ====================
      
      Link: https://lore.kernel.org/r/20240123090351.2207-1-yangtiezhu@loongson.cnSigned-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
      32749605
    • Tiezhu Yang's avatar
      selftests/bpf: Skip callback tests if jit is disabled in test_verifier · 0b50478f
      Tiezhu Yang authored
      If CONFIG_BPF_JIT_ALWAYS_ON is not set and bpf_jit_enable is 0, there
      exist 6 failed tests.
      
        [root@linux bpf]# echo 0 > /proc/sys/net/core/bpf_jit_enable
        [root@linux bpf]# echo 0 > /proc/sys/kernel/unprivileged_bpf_disabled
        [root@linux bpf]# ./test_verifier | grep FAIL
        #106/p inline simple bpf_loop call FAIL
        #107/p don't inline bpf_loop call, flags non-zero FAIL
        #108/p don't inline bpf_loop call, callback non-constant FAIL
        #109/p bpf_loop_inline and a dead func FAIL
        #110/p bpf_loop_inline stack locations for loop vars FAIL
        #111/p inline bpf_loop call in a big program FAIL
        Summary: 768 PASSED, 15 SKIPPED, 6 FAILED
      
      The test log shows that callbacks are not allowed in non-JITed programs,
      interpreter doesn't support them yet, thus these tests should be skipped
      if jit is disabled.
      
      Add an explicit flag F_NEEDS_JIT_ENABLED to those tests to mark that they
      require JIT enabled in bpf_loop_inline.c, check the flag and jit_disabled
      at the beginning of do_test_single() to handle this case.
      
      With this patch:
      
        [root@linux bpf]# echo 0 > /proc/sys/net/core/bpf_jit_enable
        [root@linux bpf]# echo 0 > /proc/sys/kernel/unprivileged_bpf_disabled
        [root@linux bpf]# ./test_verifier | grep FAIL
        Summary: 768 PASSED, 21 SKIPPED, 0 FAILED
      Suggested-by: default avatarAndrii Nakryiko <andrii@kernel.org>
      Signed-off-by: default avatarTiezhu Yang <yangtiezhu@loongson.cn>
      Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
      Link: https://lore.kernel.org/bpf/20240123090351.2207-3-yangtiezhu@loongson.cn
      0b50478f
    • Tiezhu Yang's avatar
      selftests/bpf: Move is_jit_enabled() into testing_helpers · 15b4f88d
      Tiezhu Yang authored
      Currently, is_jit_enabled() is only used in test_progs, move it into
      testing_helpers so that it can be used in test_verifier. While at it,
      remove the second argument "0" of open() as Hou Tao suggested.
      Signed-off-by: default avatarTiezhu Yang <yangtiezhu@loongson.cn>
      Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
      Acked-by: default avatarHou Tao <houtao1@huawei.com>
      Acked-by: default avatarSong Liu <song@kernel.org>
      Link: https://lore.kernel.org/bpf/20240123090351.2207-2-yangtiezhu@loongson.cn
      15b4f88d