Skip to content
  1. Oct 14, 2022
    • Shung-Hsi Yu's avatar
      libbpf: Use elf_getshdrnum() instead of e_shnum · 51deedc9
      Shung-Hsi Yu authored
      This commit replace e_shnum with the elf_getshdrnum() helper to fix two
      oss-fuzz-reported heap-buffer overflow in __bpf_object__open. Both
      reports are incorrectly marked as fixed and while still being
      reproducible in the latest libbpf.
      
        # clusterfuzz-testcase-minimized-bpf-object-fuzzer-5747922482888704
        libbpf: loading object 'fuzz-object' from buffer
        libbpf: sec_cnt is 0
        libbpf: elf: section(1) .data, size 0, link 538976288, flags 2020202020202020, type=2
        libbpf: elf: section(2) .data, size 32, link 538976288, flags 202020202020ff20, type=1
        =================================================================
        ==13==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x6020000000c0 at pc 0x0000005a7b46 bp 0x7ffd12214af0 sp 0x7ffd12214ae8
        WRITE of size 4 at 0x6020000000c0 thread T0
        SCARINESS: 46 (4-byte-write-heap-buffer-overflow-far-from-bounds)
            #0 0x5a7b45 in bpf_object__elf_collect /src/libbpf/src/libbpf.c:3414:24
            #1 0x5733c0 in bpf_object_open /src/libbpf/src/libbpf.c:7223:16
            #2 0x5739fd in bpf_object__open_mem /src/libbpf/src/libbpf.c:7263:20
            ...
      
      The issue lie in libbpf's direct use of e_shnum field in ELF header as
      the section header count. Where as libelf implemented an extra logic
      that, when e_shnum == 0 && e_shoff != 0, will use sh_size member of the
      initial section header as the real section header count (part of ELF
      spec to accommodate situation where section header counter is larger
      than SHN_LORESERVE).
      
      The above inconsistency lead to libbpf writing into a zero-entry calloc
      area. So intead of using e_shnum directly, use the elf_getshdrnum()
      helper provided by libelf to retrieve the section header counter into
      sec_cnt.
      
      Fixes: 0d6988e1 ("libbpf: Fix section counting logic")
      Fixes: 25bbbd7a
      
       ("libbpf: Remove assumptions about uniqueness of .rodata/.data/.bss maps")
      Signed-off-by: default avatarShung-Hsi Yu <shung-hsi.yu@suse.com>
      Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
      Link: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=40868
      Link: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=40957
      Link: https://lore.kernel.org/bpf/20221012022353.7350-2-shung-hsi.yu@suse.com
      51deedc9
    • Andrii Nakryiko's avatar
      Merge branch 'Fix bugs found by ASAN when running selftests' · 6e73e683
      Andrii Nakryiko authored
      
      
      Xu Kuohai says:
      
      ====================
      
      From: Xu Kuohai <xukuohai@huawei.com>
      
      This series fixes bugs found by ASAN when running bpf selftests on arm64.
      
      v4:
      - Address Andrii's suggestions
      
      v3: https://lore.kernel.org/bpf/5311e154-c2d4-91a5-ccb8-f5adede579ed@huawei.com
      - Fix error failure of case test_xdp_adjust_tail_grow exposed by this series
      
      v2: https://lore.kernel.org/bpf/20221010070454.577433-1-xukuohai@huaweicloud.com
      - Rebase and fix conflict
      
      v1: https://lore.kernel.org/bpf/20221009131830.395569-1-xukuohai@huaweicloud.com
      ====================
      
      Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
      6e73e683
    • Xu Kuohai's avatar
      selftest/bpf: Fix error usage of ASSERT_OK in xdp_adjust_tail.c · cbc1c998
      Xu Kuohai authored
      xdp_adjust_tail.c calls ASSERT_OK() to check the return value of
      bpf_prog_test_load(), but the condition is not correct. Fix it.
      
      Fixes: 791cad02
      
       ("bpf: selftests: Get rid of CHECK macro in xdp_adjust_tail.c")
      Signed-off-by: default avatarXu Kuohai <xukuohai@huawei.com>
      Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
      Acked-by: default avatarMartin KaFai Lau <martin.lau@kernel.org>
      Link: https://lore.kernel.org/bpf/20221011120108.782373-7-xukuohai@huaweicloud.com
      cbc1c998
    • Xu Kuohai's avatar
      selftests/bpf: Fix error failure of case test_xdp_adjust_tail_grow · 4abdb1d5
      Xu Kuohai authored
      test_xdp_adjust_tail_grow failed with ipv6:
        test_xdp_adjust_tail_grow:FAIL:ipv6 unexpected error: -28 (errno 28)
      
      The reason is that this test case tests ipv4 before ipv6, and when ipv4
      test finished, topts.data_size_out was set to 54, which is smaller than the
      ipv6 output data size 114, so ipv6 test fails with NOSPC error.
      
      Fix it by reset topts.data_size_out to sizeof(buf) before testing ipv6.
      
      Fixes: 04fcb5f9
      
       ("selftests/bpf: Migrate from bpf_prog_test_run")
      Signed-off-by: default avatarXu Kuohai <xukuohai@huawei.com>
      Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
      Acked-by: default avatarMartin KaFai Lau <martin.lau@kernel.org>
      Link: https://lore.kernel.org/bpf/20221011120108.782373-6-xukuohai@huaweicloud.com
      4abdb1d5
    • Xu Kuohai's avatar
      selftest/bpf: Fix memory leak in kprobe_multi_test · 6d2e21dc
      Xu Kuohai authored
      The get_syms() function in kprobe_multi_test.c does not free the string
      memory allocated by sscanf correctly. Fix it.
      
      Fixes: 5b6c7e5c
      
       ("selftests/bpf: Add attach bench test")
      Signed-off-by: default avatarXu Kuohai <xukuohai@huawei.com>
      Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
      Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
      Acked-by: default avatarMartin KaFai Lau <martin.lau@kernel.org>
      Link: https://lore.kernel.org/bpf/20221011120108.782373-5-xukuohai@huaweicloud.com
      6d2e21dc
    • Xu Kuohai's avatar
      selftests/bpf: Fix memory leak caused by not destroying skeleton · 6e8280b9
      Xu Kuohai authored
      Some test cases does not destroy skeleton object correctly, causing ASAN
      to report memory leak warning. Fix it.
      
      Fixes: 0ef6740e ("selftests/bpf: Add tests for kptr_ref refcounting")
      Fixes: 1642a394
      
       ("selftests/bpf: Add struct argument tests with fentry/fexit programs.")
      Signed-off-by: default avatarXu Kuohai <xukuohai@huawei.com>
      Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
      Acked-by: default avatarMartin KaFai Lau <martin.lau@kernel.org>
      Link: https://lore.kernel.org/bpf/20221011120108.782373-4-xukuohai@huaweicloud.com
      6e8280b9
    • Xu Kuohai's avatar
      libbpf: Fix memory leak in parse_usdt_arg() · 0dc9254e
      Xu Kuohai authored
      In the arm64 version of parse_usdt_arg(), when sscanf returns 2, reg_name
      is allocated but not freed. Fix it.
      
      Fixes: 0f861992
      
       ("libbpf: Usdt aarch64 arg parsing support")
      Signed-off-by: default avatarXu Kuohai <xukuohai@huawei.com>
      Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
      Acked-by: default avatarMartin KaFai Lau <martin.lau@kernel.org>
      Link: https://lore.kernel.org/bpf/20221011120108.782373-3-xukuohai@huaweicloud.com
      0dc9254e
    • Xu Kuohai's avatar
      libbpf: Fix use-after-free in btf_dump_name_dups · 93c660ca
      Xu Kuohai authored
      ASAN reports an use-after-free in btf_dump_name_dups:
      
      ERROR: AddressSanitizer: heap-use-after-free on address 0xffff927006db at pc 0xaaaab5dfb618 bp 0xffffdd89b890 sp 0xffffdd89b928
      READ of size 2 at 0xffff927006db thread T0
          #0 0xaaaab5dfb614 in __interceptor_strcmp.part.0 (test_progs+0x21b614)
          #1 0xaaaab635f144 in str_equal_fn tools/lib/bpf/btf_dump.c:127
          #2 0xaaaab635e3e0 in hashmap_find_entry tools/lib/bpf/hashmap.c:143
          #3 0xaaaab635e72c in hashmap__find tools/lib/bpf/hashmap.c:212
          #4 0xaaaab6362258 in btf_dump_name_dups tools/lib/bpf/btf_dump.c:1525
          #5 0xaaaab636240c in btf_dump_resolve_name tools/lib/bpf/btf_dump.c:1552
          #6 0xaaaab6362598 in btf_dump_type_name tools/lib/bpf/btf_dump.c:1567
          #7 0xaaaab6360b48 in btf_dump_emit_struct_def tools/lib/bpf/btf_dump.c:912
          #8 0xaaaab6360630 in btf_dump_emit_type tools/lib/bpf/btf_dump.c:798
          #9 0xaaaab635f720 in btf_dump__dump_type tools/lib/bpf/btf_dump.c:282
          #10 0xaaaab608523c in test_btf_dump_incremental tools/testing/selftests/bpf/prog_tests/btf_dump.c:236
          #11 0xaaaab6097530 in test_btf_dump tools/testing/selftests/bpf/prog_tests/btf_dump.c:875
          #12 0xaaaab6314ed0 in run_one_test tools/testing/selftests/bpf/test_progs.c:1062
          #13 0xaaaab631a0a8 in main tools/testing/selftests/bpf/test_progs.c:1697
          #14 0xffff9676d214 in __libc_start_main ../csu/libc-start.c:308
          #15 0xaaaab5d65990  (test_progs+0x185990)
      
      0xffff927006db is located 11 bytes inside of 16-byte region [0xffff927006d0,0xffff927006e0)
      freed by thread T0 here:
          #0 0xaaaab5e2c7c4 in realloc (test_progs+0x24c7c4)
          #1 0xaaaab634f4a0 in libbpf_reallocarray tools/lib/bpf/libbpf_internal.h:191
          #2 0xaaaab634f840 in libbpf_add_mem tools/lib/bpf/btf.c:163
          #3 0xaaaab636643c in strset_add_str_mem tools/lib/bpf/strset.c:106
          #4 0xaaaab6366560 in strset__add_str tools/lib/bpf/strset.c:157
          #5 0xaaaab6352d70 in btf__add_str tools/lib/bpf/btf.c:1519
          #6 0xaaaab6353e10 in btf__add_field tools/lib/bpf/btf.c:2032
          #7 0xaaaab6084fcc in test_btf_dump_incremental tools/testing/selftests/bpf/prog_tests/btf_dump.c:232
          #8 0xaaaab6097530 in test_btf_dump tools/testing/selftests/bpf/prog_tests/btf_dump.c:875
          #9 0xaaaab6314ed0 in run_one_test tools/testing/selftests/bpf/test_progs.c:1062
          #10 0xaaaab631a0a8 in main tools/testing/selftests/bpf/test_progs.c:1697
          #11 0xffff9676d214 in __libc_start_main ../csu/libc-start.c:308
          #12 0xaaaab5d65990  (test_progs+0x185990)
      
      previously allocated by thread T0 here:
          #0 0xaaaab5e2c7c4 in realloc (test_progs+0x24c7c4)
          #1 0xaaaab634f4a0 in libbpf_reallocarray tools/lib/bpf/libbpf_internal.h:191
          #2 0xaaaab634f840 in libbpf_add_mem tools/lib/bpf/btf.c:163
          #3 0xaaaab636643c in strset_add_str_mem tools/lib/bpf/strset.c:106
          #4 0xaaaab6366560 in strset__add_str tools/lib/bpf/strset.c:157
          #5 0xaaaab6352d70 in btf__add_str tools/lib/bpf/btf.c:1519
          #6 0xaaaab6353ff0 in btf_add_enum_common tools/lib/bpf/btf.c:2070
          #7 0xaaaab6354080 in btf__add_enum tools/lib/bpf/btf.c:2102
          #8 0xaaaab6082f50 in test_btf_dump_incremental tools/testing/selftests/bpf/prog_tests/btf_dump.c:162
          #9 0xaaaab6097530 in test_btf_dump tools/testing/selftests/bpf/prog_tests/btf_dump.c:875
          #10 0xaaaab6314ed0 in run_one_test tools/testing/selftests/bpf/test_progs.c:1062
          #11 0xaaaab631a0a8 in main tools/testing/selftests/bpf/test_progs.c:1697
          #12 0xffff9676d214 in __libc_start_main ../csu/libc-start.c:308
          #13 0xaaaab5d65990  (test_progs+0x185990)
      
      The reason is that the key stored in hash table name_map is a string
      address, and the string memory is allocated by realloc() function, when
      the memory is resized by realloc() later, the old memory may be freed,
      so the address stored in name_map references to a freed memory, causing
      use-after-free.
      
      Fix it by storing duplicated string address in name_map.
      
      Fixes: 919d2b1d
      
       ("libbpf: Allow modification of BTF and add btf__add_str API")
      Signed-off-by: default avatarXu Kuohai <xukuohai@huawei.com>
      Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
      Acked-by: default avatarMartin KaFai Lau <martin.lau@kernel.org>
      Link: https://lore.kernel.org/bpf/20221011120108.782373-2-xukuohai@huaweicloud.com
      93c660ca
  2. Oct 13, 2022
  3. Oct 12, 2022
  4. Oct 11, 2022
    • Andrii Nakryiko's avatar
      Merge branch 'Add _opts variant for bpf_*_get_fd_by_id()' · f6ac03eb
      Andrii Nakryiko authored
      
      
      Roberto Sassu says:
      
      ====================
      From: Roberto Sassu <roberto.sassu@huawei.com>
      
      Add the _opts variant for bpf_*_get_fd_by_id() functions, to be able to
      pass to the kernel more options, when requesting a fd of an eBPF object.
      
      Pass the options through a newly introduced structure,
      bpf_get_fd_by_id_opts, which currently contains open_flags (the other two
      members are for compatibility and for padding).
      
      open_flags allows the caller to request specific permissions to access a
      map (e.g. read-only). This is useful for example in the situation where a
      map is write-protected.
      
      Besides patches 2-6, which introduce the new variants and the data
      structure, patch 1 fixes the LIBBPF_1.0.0 declaration in libbpf.map.
      
      Changelog
      
      v1:
       - Don't CC stable kernel mailing list for patch 1 (suggested by Andrii)
       - Rename bpf_get_fd_opts struct to bpf_get_fd_by_id_opts (suggested by
         Andrii)
       - Move declaration of _opts variants after non-opts variants (suggested by
         Andrii)
       - Correctly initialize bpf_map_info, fix style issues, use map from
         skeleton, check valid fd in the test (suggested by Andrii)
       - Rename libbpf_get_fd_opts test to libbpf_get_fd_by_id_opts
      ====================
      
      Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
      f6ac03eb
    • Roberto Sassu's avatar
      selftests/bpf: Add tests for _opts variants of bpf_*_get_fd_by_id() · a9c7c18b
      Roberto Sassu authored
      
      
      Introduce the data_input map, write-protected with a small eBPF program
      implementing the lsm/bpf_map hook.
      
      Then, ensure that bpf_map_get_fd_by_id() and bpf_map_get_fd_by_id_opts()
      with NULL opts don't succeed due to requesting read-write access to the
      write-protected map. Also, ensure that bpf_map_get_fd_by_id_opts() with
      open_flags in opts set to BPF_F_RDONLY instead succeeds.
      
      After obtaining a read-only fd, ensure that only map lookup succeeds and
      not update. Ensure that update works only with the read-write fd obtained
      at program loading time, when the write protection was not yet enabled.
      
      Finally, ensure that the other _opts variants of bpf_*_get_fd_by_id() don't
      work if the BPF_F_RDONLY flag is set in opts (due to the kernel not
      handling the open_flags member of bpf_attr).
      
      Signed-off-by: default avatarRoberto Sassu <roberto.sassu@huawei.com>
      Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
      Link: https://lore.kernel.org/bpf/20221006110736.84253-7-roberto.sassu@huaweicloud.com
      a9c7c18b
    • Roberto Sassu's avatar
      libbpf: Introduce bpf_link_get_fd_by_id_opts() · 97c8f9dd
      Roberto Sassu authored
      
      
      Introduce bpf_link_get_fd_by_id_opts(), for symmetry with
      bpf_map_get_fd_by_id_opts(), to let the caller pass the newly introduced
      data structure bpf_get_fd_by_id_opts. Keep the existing
      bpf_link_get_fd_by_id(), and call bpf_link_get_fd_by_id_opts() with NULL as
      opts argument, to prevent setting open_flags.
      
      Currently, the kernel does not support non-zero open_flags for
      bpf_link_get_fd_by_id_opts(), and a call with them will result in an error
      returned by the bpf() system call. The caller should always pass zero
      open_flags.
      
      Signed-off-by: default avatarRoberto Sassu <roberto.sassu@huawei.com>
      Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
      Link: https://lore.kernel.org/bpf/20221006110736.84253-6-roberto.sassu@huaweicloud.com
      97c8f9dd
    • Roberto Sassu's avatar
      libbpf: Introduce bpf_btf_get_fd_by_id_opts() · 2ce7cbf2
      Roberto Sassu authored
      
      
      Introduce bpf_btf_get_fd_by_id_opts(), for symmetry with
      bpf_map_get_fd_by_id_opts(), to let the caller pass the newly introduced
      data structure bpf_get_fd_by_id_opts. Keep the existing
      bpf_btf_get_fd_by_id(), and call bpf_btf_get_fd_by_id_opts() with NULL as
      opts argument, to prevent setting open_flags.
      
      Currently, the kernel does not support non-zero open_flags for
      bpf_btf_get_fd_by_id_opts(), and a call with them will result in an error
      returned by the bpf() system call. The caller should always pass zero
      open_flags.
      
      Signed-off-by: default avatarRoberto Sassu <roberto.sassu@huawei.com>
      Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
      Link: https://lore.kernel.org/bpf/20221006110736.84253-5-roberto.sassu@huaweicloud.com
      2ce7cbf2
    • Roberto Sassu's avatar
      libbpf: Introduce bpf_prog_get_fd_by_id_opts() · 8f13f168
      Roberto Sassu authored
      
      
      Introduce bpf_prog_get_fd_by_id_opts(), for symmetry with
      bpf_map_get_fd_by_id_opts(), to let the caller pass the newly introduced
      data structure bpf_get_fd_by_id_opts. Keep the existing
      bpf_prog_get_fd_by_id(), and call bpf_prog_get_fd_by_id_opts() with NULL as
      opts argument, to prevent setting open_flags.
      
      Currently, the kernel does not support non-zero open_flags for
      bpf_prog_get_fd_by_id_opts(), and a call with them will result in an error
      returned by the bpf() system call. The caller should always pass zero
      open_flags.
      
      Signed-off-by: default avatarRoberto Sassu <roberto.sassu@huawei.com>
      Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
      Link: https://lore.kernel.org/bpf/20221006110736.84253-4-roberto.sassu@huaweicloud.com
      8f13f168
    • Roberto Sassu's avatar
      libbpf: Introduce bpf_get_fd_by_id_opts and bpf_map_get_fd_by_id_opts() · 243e3005
      Roberto Sassu authored
      
      
      Define a new data structure called bpf_get_fd_by_id_opts, with the member
      open_flags, to be used by callers of the _opts variants of
      bpf_*_get_fd_by_id() to specify the permissions needed for the file
      descriptor to be obtained.
      
      Also, introduce bpf_map_get_fd_by_id_opts(), to let the caller pass a
      bpf_get_fd_by_id_opts structure.
      
      Finally, keep the existing bpf_map_get_fd_by_id(), and call
      bpf_map_get_fd_by_id_opts() with NULL as opts argument, to request
      read-write permissions (current behavior).
      
      Signed-off-by: default avatarRoberto Sassu <roberto.sassu@huawei.com>
      Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
      Link: https://lore.kernel.org/bpf/20221006110736.84253-3-roberto.sassu@huaweicloud.com
      243e3005
    • Roberto Sassu's avatar
      libbpf: Fix LIBBPF_1.0.0 declaration in libbpf.map · 7a366da2
      Roberto Sassu authored
      
      
      Add the missing LIBBPF_0.8.0 at the end of the LIBBPF_1.0.0 declaration,
      similarly to other version declarations.
      
      Signed-off-by: default avatarRoberto Sassu <roberto.sassu@huawei.com>
      Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
      Link: https://lore.kernel.org/bpf/20221006110736.84253-2-roberto.sassu@huaweicloud.com
      7a366da2
  5. Oct 07, 2022
  6. Oct 06, 2022
    • Yonghong Song's avatar
      selftests/bpf: Add selftest deny_namespace to s390x deny list · 8206e4e9
      Yonghong Song authored
      
      
      BPF CI reported that selftest deny_namespace failed with s390x.
      
        test_unpriv_userns_create_no_bpf:PASS:no-bpf unpriv new user ns 0 nsec
        test_deny_namespace:PASS:skel load 0 nsec
        libbpf: prog 'test_userns_create': failed to attach: ERROR: strerror_r(-524)=22
        libbpf: prog 'test_userns_create': failed to auto-attach: -524
        test_deny_namespace:FAIL:attach unexpected error: -524 (errno 524)
        #57/1    deny_namespace/unpriv_userns_create_no_bpf:FAIL
        #57      deny_namespace:FAIL
      
      BPF program test_userns_create is a BPF LSM type program which is
      based on trampoline and s390x does not support s390x. Let add the
      test to x390x deny list to avoid this failure in BPF CI.
      
      Signed-off-by: default avatarYonghong Song <yhs@fb.com>
      Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
      Link: https://lore.kernel.org/r/20221006053429.3549165-1-yhs@fb.com
      Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
      8206e4e9
    • Andrii Nakryiko's avatar
      scripts/bpf_doc.py: update logic to not assume sequential enum values · ce3e44a0
      Andrii Nakryiko authored
      
      
      Relax bpf_doc.py's expectation of all BPF_FUNC_xxx enumerators having
      sequential values increasing by one. Instead, only make sure that
      relative order of BPF helper descriptions in comments matches
      enumerators definitions order.
      
      Also additionally make sure that helper IDs are not duplicated.
      
      And also make sure that for cases when we have multiple descriptions for
      the same BPF helper (e.g., for bpf_get_socket_cookie()), all such
      descriptions are grouped together.
      
      Such checks should capture all the same (and more) issues in upstream
      UAPI headers, but also handle backported kernels correctly.
      
      Reported-by: default avatarAlexei Starovoitov <ast@kernel.org>
      Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
      Reviewed-by: default avatarQuentin Monnet <quentin@isovalent.com>
      Link: https://lore.kernel.org/r/20221006042452.2089843-2-andrii@kernel.org
      Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
      ce3e44a0
    • Andrii Nakryiko's avatar
      bpf: explicitly define BPF_FUNC_xxx integer values · 8a76145a
      Andrii Nakryiko authored
      
      
      Historically enum bpf_func_id's BPF_FUNC_xxx enumerators relied on
      implicit sequential values being assigned by compiler. This is
      convenient, as new BPF helpers are always added at the very end, but it
      also has its downsides, some of them being:
      
        - with over 200 helpers now it's very hard to know what's each helper's ID,
          which is often important to know when working with BPF assembly (e.g.,
          by dumping raw bpf assembly instructions with llvm-objdump -d
          command). it's possible to work around this by looking into vmlinux.h,
          dumping /sys/btf/kernel/vmlinux, looking at libbpf-provided
          bpf_helper_defs.h, etc. But it always feels like an unnecessary step
          and one should be able to quickly figure this out from UAPI header.
      
        - when backporting and cherry-picking only some BPF helpers onto older
          kernels it's important to be able to skip some enum values for helpers
          that weren't backported, but preserve absolute integer IDs to keep BPF
          helper IDs stable so that BPF programs stay portable across upstream
          and backported kernels.
      
      While neither problem is insurmountable, they come up frequently enough
      and are annoying enough to warrant improving the situation. And for the
      backporting the problem can easily go unnoticed for a while, especially
      if backport is done with people not very familiar with BPF subsystem overall.
      
      Anyways, it's easy to fix this by making sure that __BPF_FUNC_MAPPER
      macro provides explicit helper IDs. Unfortunately that would potentially
      break existing users that use UAPI-exposed __BPF_FUNC_MAPPER and are
      expected to pass macro that accepts only symbolic helper identifier
      (e.g., map_lookup_elem for bpf_map_lookup_elem() helper).
      
      As such, we need to introduce a new macro (___BPF_FUNC_MAPPER) which
      would specify both identifier and integer ID, but in such a way as to
      allow existing __BPF_FUNC_MAPPER be expressed in terms of new
      ___BPF_FUNC_MAPPER macro. And that's what this patch is doing. To avoid
      duplication and allow __BPF_FUNC_MAPPER stay *exactly* the same,
      ___BPF_FUNC_MAPPER accepts arbitrary "context" arguments, which can be
      used to pass any extra macros, arguments, and whatnot. In our case we
      use this to pass original user-provided macro that expects single
      argument and __BPF_FUNC_MAPPER is using it's own three-argument
      __BPF_FUNC_MAPPER_APPLY intermediate macro to impedance-match new and
      old "callback" macros.
      
      Once we resolve this, we use new ___BPF_FUNC_MAPPER to define enum
      bpf_func_id with explicit values. The other users of __BPF_FUNC_MAPPER
      in kernel (namely in kernel/bpf/disasm.c) are kept exactly the same both
      as demonstration that backwards compat works, but also to avoid
      unnecessary code churn.
      
      Note that new ___BPF_FUNC_MAPPER() doesn't forcefully insert comma
      between values, as that might not be appropriate in all possible cases
      where ___BPF_FUNC_MAPPER might be used by users. This doesn't reduce
      usability, as it's trivial to insert that comma inside "callback" macro.
      
      To validate all the manually specified IDs are exactly right, we used
      BTF to compare before and after values:
      
        $ bpftool btf dump file ~/linux-build/default/vmlinux | rg bpf_func_id -A 211 > after.txt
        $ git stash # stach UAPI changes
        $ make -j90
        ... re-building kernel without UAPI changes ...
        $ bpftool btf dump file ~/linux-build/default/vmlinux | rg bpf_func_id -A 211 > before.txt
        $ diff -u before.txt after.txt
        --- before.txt  2022-10-05 10:48:18.119195916 -0700
        +++ after.txt   2022-10-05 10:46:49.446615025 -0700
        @@ -1,4 +1,4 @@
        -[14576] ENUM 'bpf_func_id' encoding=UNSIGNED size=4 vlen=211
        +[9560] ENUM 'bpf_func_id' encoding=UNSIGNED size=4 vlen=211
                'BPF_FUNC_unspec' val=0
                'BPF_FUNC_map_lookup_elem' val=1
                'BPF_FUNC_map_update_elem' val=2
      
      As can be seen from diff above, the only thing that changed was resulting BTF
      type ID of ENUM bpf_func_id, not any of the enumerators, their names or integer
      values.
      
      The only other place that needed fixing was scripts/bpf_doc.py used to generate
      man pages and bpf_helper_defs.h header for libbpf and selftests. That script is
      tightly-coupled to exact shape of ___BPF_FUNC_MAPPER macro definition, so had
      to be trivially adapted.
      
      Cc: Quentin Monnet <quentin@isovalent.com>
      Reported-by: default avatarAndrea Terzolo <andrea.terzolo@polito.it>
      Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
      Reviewed-by: default avatarQuentin Monnet <quentin@isovalent.com>
      Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
      Acked-by: default avatarToke Høiland-Jørgensen <toke@redhat.com>
      Link: https://lore.kernel.org/r/20221006042452.2089843-1-andrii@kernel.org
      Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
      8a76145a
    • Andrii Nakryiko's avatar
      selftests/bpf: add BPF object fixup step to veristat · 60df8c4d
      Andrii Nakryiko authored
      
      
      Add a step to attempt to "fix up" BPF object file to make it possible to
      successfully load it. E.g., set non-zero size for BPF maps that expect
      max_entries set, but BPF object file itself doesn't have declarative
      max_entries values specified.
      
      Another issue was with automatic map pinning. Pinning has no effect on
      BPF verification process itself but can interfere when validating
      multiple related programs and object files, so veristat disabled all the
      pinning explicitly.
      
      In the future more such fix up heuristics could be added to accommodate
      common patterns encountered in practice.
      
      Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
      Link: https://lore.kernel.org/r/20221005161450.1064469-3-andrii@kernel.org
      Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
      60df8c4d
    • Andrii Nakryiko's avatar
      selftests/bpf: avoid reporting +100% difference in veristat for actual 0% · 6df2eb45
      Andrii Nakryiko authored
      
      
      In special case when both base and comparison values are 0, veristat
      currently reports "+0 (+100%)" difference, which is quite confusing. Fix
      it up to be "+0 (+0%)".
      
      Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
      Link: https://lore.kernel.org/r/20221005161450.1064469-2-andrii@kernel.org
      Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
      6df2eb45
    • Andrii Nakryiko's avatar
      selftests/bpf: allow requesting log level 2 in test_verifier · 2a72f595
      Andrii Nakryiko authored
      
      
      Log level 1 on successfully verified programs are basically equivalent
      to log level 4 (stats-only), so it's useful to be able to request more
      verbose logs at log level 2. Teach test_verifier to recognize -vv as
      "very verbose" mode switch and use log level 2 in such mode.
      
      Also force verifier stats regradless of -v or -vv, they are very minimal
      and useful to be always emitted in verbose mode.
      
      Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
      Link: https://lore.kernel.org/r/20221005161450.1064469-1-andrii@kernel.org
      Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
      2a72f595
    • Eduard Zingerman's avatar
      selftests/bpf: Test btf dump for struct with padding only fields · d503f117
      Eduard Zingerman authored
      
      
      Structures with zero regular fields but some padding constitute a
      special case in btf_dump.c:btf_dump_emit_struct_def with regards to
      newline before closing '}'.
      
      Signed-off-by: default avatarEduard Zingerman <eddyz87@gmail.com>
      Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
      Link: https://lore.kernel.org/bpf/20221001104425.415768-2-eddyz87@gmail.com
      d503f117
    • Eduard Zingerman's avatar
      bpftool: Print newline before '}' for struct with padding only fields · 44a726c3
      Eduard Zingerman authored
      
      
      btf_dump_emit_struct_def attempts to print empty structures at a
      single line, e.g. `struct empty {}`. However, it has to account for a
      case when there are no regular but some padding fields in the struct.
      In such case `vlen` would be zero, but size would be non-zero.
      
      E.g. here is struct bpf_timer from vmlinux.h before this patch:
      
       struct bpf_timer {
       	long: 64;
      	long: 64;};
      
      And after this patch:
      
       struct bpf_dynptr {
       	long: 64;
      	long: 64;
       };
      
      Signed-off-by: default avatarEduard Zingerman <eddyz87@gmail.com>
      Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
      Link: https://lore.kernel.org/bpf/20221001104425.415768-1-eddyz87@gmail.com
      44a726c3
  7. Oct 05, 2022
    • Linus Torvalds's avatar
      Merge tag 'net-next-6.1' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next · 0326074f
      Linus Torvalds authored
      Pull networking updates from Jakub Kicinski:
       "Core:
      
         - Introduce and use a single page frag cache for allocating small skb
           heads, clawing back the 10-20% performance regression in UDP flood
           test from previous fixes.
      
         - Run packets which already went thru HW coalescing thru SW GRO. This
           significantly improves TCP segment coalescing and simplifies
           deployments as different workloads benefit from HW or SW GRO.
      
         - Shrink the size of the base zero-copy send structure.
      
         - Move TCP init under a new slow / sleepable version of DO_ONCE().
      
        BPF:
      
         - Add BPF-specific, any-context-safe memory allocator.
      
         - Add helpers/kfuncs for PKCS#7 signature verification from BPF
           programs.
      
         - Define a new map type and related helpers for user space -> kernel
           communication over a ring buffer (BPF_MAP_TYPE_USER_RINGBUF).
      
         - Allow targeting BPF iterators to loop through resources of one
           task/thread.
      
         - Add ability to call selected destructive functions. Expose
           crash_kexec() to allow BPF to trigger a kernel dump. Use
           CAP_SYS_BOOT check on the loading process to judge permissions.
      
         - Enable BPF to collect custom hierarchical cgroup stats efficiently
           by integrating with the rstat framework.
      
         - Support struct arguments for trampoline based programs. Only
           structs with size <= 16B and x86 are supported.
      
         - Invoke cgroup/connect{4,6} programs for unprivileged ICMP ping
           sockets (instead of just TCP and UDP sockets).
      
         - Add a helper for accessing CLOCK_TAI for time sensitive network
           related programs.
      
         - Support accessing network tunnel metadata's flags.
      
         - Make TCP SYN ACK RTO tunable by BPF programs with TCP Fast Open.
      
         - Add support for writing to Netfilter's nf_conn:mark.
      
        Protocols:
      
         - WiFi: more Extremely High Throughput (EHT) and Multi-Link Operation
           (MLO) work (802.11be, WiFi 7).
      
         - vsock: improve support for SO_RCVLOWAT.
      
         - SMC: support SO_REUSEPORT.
      
         - Netlink: define and document how to use netlink in a "modern" way.
           Support reporting missing attributes via extended ACK.
      
         - IPSec: support collect metadata mode for xfrm interfaces.
      
         - TCPv6: send consistent autoflowlabel in SYN_RECV state and RST
           packets.
      
         - TCP: introduce optional per-netns connection hash table to allow
           better isolation between namespaces (opt-in, at the cost of memory
           and cache pressure).
      
         - MPTCP: support TCP_FASTOPEN_CONNECT.
      
         - Add NEXT-C-SID support in Segment Routing (SRv6) End behavior.
      
         - Adjust IP_UNICAST_IF sockopt behavior for connected UDP sockets.
      
         - Open vSwitch:
            - Allow specifying ifindex of new interfaces.
            - Allow conntrack and metering in non-initial user namespace.
      
         - TLS: support the Korean ARIA-GCM crypto algorithm.
      
         - Remove DECnet support.
      
        Driver API:
      
         - Allow selecting the conduit interface used by each port in DSA
           switches, at runtime.
      
         - Ethernet Power Sourcing Equipment and Power Device support.
      
         - Add tc-taprio support for queueMaxSDU parameter, i.e. setting per
           traffic class max frame size for time-based packet schedules.
      
         - Support PHY rate matching - adapting between differing host-side
           and link-side speeds.
      
         - Introduce QUSGMII PHY mode and 1000BASE-KX interface mode.
      
         - Validate OF (device tree) nodes for DSA shared ports; make
           phylink-related properties mandatory on DSA and CPU ports.
           Enforcing more uniformity should allow transitioning to phylink.
      
         - Require that flash component name used during update matches one of
           the components for which version is reported by info_get().
      
         - Remove "weight" argument from driver-facing NAPI API as much as
           possible. It's one of those magic knobs which seemed like a good
           idea at the time but is too indirect to use in practice.
      
         - Support offload of TLS connections with 256 bit keys.
      
        New hardware / drivers:
      
         - Ethernet:
            - Microchip KSZ9896 6-port Gigabit Ethernet Switch
            - Renesas Ethernet AVB (EtherAVB-IF) Gen4 SoCs
            - Analog Devices ADIN1110 and ADIN2111 industrial single pair
              Ethernet (10BASE-T1L) MAC+PHY.
            - Rockchip RV1126 Gigabit Ethernet (a version of stmmac IP).
      
         - Ethernet SFPs / modules:
            - RollBall / Hilink / Turris 10G copper SFPs
            - HALNy GPON module
      
         - WiFi:
            - CYW43439 SDIO chipset (brcmfmac)
            - CYW89459 PCIe chipset (brcmfmac)
            - BCM4378 on Apple platforms (brcmfmac)
      
        Drivers:
      
         - CAN:
            - gs_usb: HW timestamp support
      
         - Ethernet PHYs:
            - lan8814: cable diagnostics
      
         - Ethernet NICs:
            - Intel (100G):
               - implement control of FCS/CRC stripping
               - port splitting via devlink
               - L2TPv3 filtering offload
            - nVidia/Mellanox:
               - tunnel offload for sub-functions
               - MACSec offload, w/ Extended packet number and replay window
                 offload
               - significantly restructure, and optimize the AF_XDP support,
                 align the behavior with other vendors
            - Huawei:
               - configuring DSCP map for traffic class selection
               - querying standard FEC statistics
               - querying SerDes lane number via ethtool
            - Marvell/Cavium:
               - egress priority flow control
               - MACSec offload
            - AMD/SolarFlare:
               - PTP over IPv6 and raw Ethernet
            - small / embedded:
               - ax88772: convert to phylink (to support SFP cages)
               - altera: tse: convert to phylink
               - ftgmac100: support fixed link
               - enetc: standard Ethtool counters
               - macb: ZynqMP SGMII dynamic configuration support
               - tsnep: support multi-queue and use page pool
               - lan743x: Rx IP & TCP checksum offload
               - igc: add xdp frags support to ndo_xdp_xmit
      
         - Ethernet high-speed switches:
            - Marvell (prestera):
               - support SPAN port features (traffic mirroring)
               - nexthop object offloading
            - Microchip (sparx5):
               - multicast forwarding offload
               - QoS queuing offload (tc-mqprio, tc-tbf, tc-ets)
      
         - Ethernet embedded switches:
            - Marvell (mv88e6xxx):
               - support RGMII cmode
            - NXP (felix):
               - standardized ethtool counters
            - Microchip (lan966x):
               - QoS queuing offload (tc-mqprio, tc-tbf, tc-cbs, tc-ets)
               - traffic policing and mirroring
               - link aggregation / bonding offload
               - QUSGMII PHY mode support
      
         - Qualcomm 802.11ax WiFi (ath11k):
            - cold boot calibration support on WCN6750
            - support to connect to a non-transmit MBSSID AP profile
            - enable remain-on-channel support on WCN6750
            - Wake-on-WLAN support for WCN6750
            - support to provide transmit power from firmware via nl80211
            - support to get power save duration for each client
            - spectral scan support for 160 MHz
      
         - MediaTek WiFi (mt76):
            - WiFi-to-Ethernet bridging offload for MT7986 chips
      
         - RealTek WiFi (rtw89):
            - P2P support"
      
      * tag 'net-next-6.1' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next: (1864 commits)
        eth: pse: add missing static inlines
        once: rename _SLOW to _SLEEPABLE
        net: pse-pd: add regulator based PSE driver
        dt-bindings: net: pse-dt: add bindings for regulator based PoDL PSE controller
        ethtool: add interface to interact with Ethernet Power Equipment
        net: mdiobus: search for PSE nodes by parsing PHY nodes.
        net: mdiobus: fwnode_mdiobus_register_phy() rework error handling
        net: add framework to support Ethernet PSE and PDs devices
        dt-bindings: net: phy: add PoDL PSE property
        net: marvell: prestera: Propagate nh state from hw to kernel
        net: marvell: prestera: Add neighbour cache accounting
        net: marvell: prestera: add stub handler neighbour events
        net: marvell: prestera: Add heplers to interact with fib_notifier_info
        net: marvell: prestera: Add length macros for prestera_ip_addr
        net: marvell: prestera: add delayed wq and flush wq on deinit
        net: marvell: prestera: Add strict cleanup of fib arbiter
        net: marvell: prestera: Add cleanup of allocated fib_nodes
        net: marvell: prestera: Add router nexthops ABI
        eth: octeon: fix build after netif_napi_add() changes
        net/mlx5: E-Switch, Return EBUSY if can't get mode lock
        ...
      0326074f
    • Linus Torvalds's avatar
      Merge tag 'landlock-6.1-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/mic/linux · 522667b2
      Linus Torvalds authored
      Pull landlock updates from Mickaël Salaün:
       "Improve user help for Landlock (documentation and sample)"
      
      * tag 'landlock-6.1-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/mic/linux:
        landlock: Fix documentation style
        landlock: Slightly improve documentation and fix spelling
        samples/landlock: Print hints about ABI versions
      522667b2
    • Linus Torvalds's avatar
      Merge tag 'audit-pr-20221003' of git://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/audit · c645c11a
      Linus Torvalds authored
      Pull audit updates from Paul Moore:
       "Six audit patches for v6.1, most are pretty trivial, but a quick list
        of the highlights are below:
      
         - Only free the audit proctitle information on task exit. This allows
           us to cache the information and improve performance slightly.
      
         - Use the time_after() macro to do time comparisons instead of doing
           it directly and potentially causing ourselves problems when the
           timer wraps.
      
         - Convert an audit_context state comparison from a relative enum
           comparison, e.g. (x < y), to a not-equal comparison to ensure that
           we are not caught out at some unknown point in the future by an
           enum shuffle.
      
         - A handful of small cleanups such as tidying up comments and
           removing unused declarations"
      
      * tag 'audit-pr-20221003' of git://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/audit:
        audit: remove selinux_audit_rule_update() declaration
        audit: use time_after to compare time
        audit: free audit_proctitle only on task exit
        audit: explicitly check audit_context->context enum value
        audit: audit_context pid unused, context enum comment fix
        audit: fix repeated words in comments
      c645c11a
    • Linus Torvalds's avatar
      Merge tag 'x86_cleanups_for_v6.1_rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · 3eba620e
      Linus Torvalds authored
      Pull x86 cleanups from Borislav Petkov:
      
       - The usual round of smaller fixes and cleanups all over the tree
      
      * tag 'x86_cleanups_for_v6.1_rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        x86/cpu: Include the header of init_ia32_feat_ctl()'s prototype
        x86/uaccess: Improve __try_cmpxchg64_user_asm() for x86_32
        x86: Fix various duplicate-word comment typos
        x86/boot: Remove superfluous type casting from arch/x86/boot/bitops.h
      3eba620e
    • Linus Torvalds's avatar
      Merge tag 'x86_cache_for_v6.1_rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · 193e2268
      Linus Torvalds authored
      Pull x86 cache resource control updates from Borislav Petkov:
      
       - More work by James Morse to disentangle the resctrl filesystem
         generic code from the architectural one with the endgoal of plugging
         ARM's MPAM implementation into it too so that the user interface
         remains the same
      
       - Properly restore the MSR_MISC_FEATURE_CONTROL value instead of
         blindly overwriting it to 0
      
      * tag 'x86_cache_for_v6.1_rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (22 commits)
        x86/resctrl: Make resctrl_arch_rmid_read() return values in bytes
        x86/resctrl: Add resctrl_rmid_realloc_limit to abstract x86's boot_cpu_data
        x86/resctrl: Rename and change the units of resctrl_cqm_threshold
        x86/resctrl: Move get_corrected_mbm_count() into resctrl_arch_rmid_read()
        x86/resctrl: Move mbm_overflow_count() into resctrl_arch_rmid_read()
        x86/resctrl: Pass the required parameters into resctrl_arch_rmid_read()
        x86/resctrl: Abstract __rmid_read()
        x86/resctrl: Allow per-rmid arch private storage to be reset
        x86/resctrl: Add per-rmid arch private storage for overflow and chunks
        x86/resctrl: Calculate bandwidth from the previous __mon_event_count() chunks
        x86/resctrl: Allow update_mba_bw() to update controls directly
        x86/resctrl: Remove architecture copy of mbps_val
        x86/resctrl: Switch over to the resctrl mbps_val list
        x86/resctrl: Create mba_sc configuration in the rdt_domain
        x86/resctrl: Abstract and use supports_mba_mbps()
        x86/resctrl: Remove set_mba_sc()s control array re-initialisation
        x86/resctrl: Add domain offline callback for resctrl work
        x86/resctrl: Group struct rdt_hw_domain cleanup
        x86/resctrl: Add domain online callback for resctrl work
        x86/resctrl: Merge mon_capable and mon_enabled
        ...
      193e2268
    • Linus Torvalds's avatar
      Merge tag 'x86_microcode_for_v6.1_rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · b5f0b113
      Linus Torvalds authored
      Pull x75 microcode loader updates from Borislav Petkov:
      
       - Get rid of a single ksize() usage
      
       - By popular demand, print the previous microcode revision an update
         was done over
      
       - Remove more code related to the now gone MICROCODE_OLD_INTERFACE
      
       - Document the problems stemming from microcode late loading
      
      * tag 'x86_microcode_for_v6.1_rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        x86/microcode/AMD: Track patch allocation size explicitly
        x86/microcode: Print previous version of microcode after reload
        x86/microcode: Remove ->request_microcode_user()
        x86/microcode: Document the whole late loading problem
      b5f0b113
    • Linus Torvalds's avatar
      Merge tag 'x86_paravirt_for_v6.1_rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · 9bf445b6
      Linus Torvalds authored
      Pull x86 paravirt fix from Borislav Petkov:
      
       - Ensure paravirt patching site descriptors are aligned properly so
         that code can do proper arithmetic with their addresses
      
      * tag 'x86_paravirt_for_v6.1_rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        x86/paravirt: Ensure proper alignment
      9bf445b6
    • Linus Torvalds's avatar
      Merge tag 'x86_misc_for_v6.1_rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · 901735e5
      Linus Torvalds authored
      Pull misc x86 fixes from Borislav Petkov:
      
       - Drop misleading "RIP" from the opcodes dumping message
      
       - Correct APM entry's Konfig help text
      
      * tag 'x86_misc_for_v6.1_rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        x86/dumpstack: Don't mention RIP in "Code: "
        x86/Kconfig: Specify idle=poll instead of no-hlt
      901735e5
    • Linus Torvalds's avatar
      Merge tag 'x86_asm_for_v6.1_rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · bb1f1154
      Linus Torvalds authored
      Pull x86 asm update from Borislav Petkov:
      
       - Use the __builtin_ffs/ctzl() compiler builtins for the constant
         argument case in the kernel's optimized ffs()/ffz() helpers in order
         to make use of the compiler's constant folding optmization passes.
      
      * tag 'x86_asm_for_v6.1_rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        x86/asm/bitops: Use __builtin_ctzl() to evaluate constant expressions
        x86/asm/bitops: Use __builtin_ffs() to evaluate constant expressions
      bb1f1154
    • Linus Torvalds's avatar
      Merge tag 'x86_core_for_v6.1_rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · 8cded8fb
      Linus Torvalds authored
      Pull x86 core fixes from Borislav Petkov:
      
       - Make sure an INT3 is slapped after every unconditional retpoline JMP
         as both vendors suggest
      
       - Clean up pciserial a bit
      
      * tag 'x86_core_for_v6.1_rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        x86,retpoline: Be sure to emit INT3 after JMP *%\reg
        x86/earlyprintk: Clean up pciserial
      8cded8fb
    • Linus Torvalds's avatar
      Merge tag 'x86_apic_for_v6.1_rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · 5bb3a16d
      Linus Torvalds authored
      Pull x86 APIC update from Borislav Petkov:
      
       - Add support for locking the APIC in X2APIC mode to prevent SGX
         enclave leaks
      
      * tag 'x86_apic_for_v6.1_rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        x86/apic: Don't disable x2APIC if locked
      5bb3a16d
    • Linus Torvalds's avatar
      Merge tag 'ras_core_for_v6.1_rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · 51eaa866
      Linus Torvalds authored
      Pull x86 RAS updates from Borislav Petkov:
      
       - Fix the APEI MCE callback handler to consult the hardware about the
         granularity of the memory error instead of hard-coding it
      
       - Offline memory pages on Intel machines after 2 errors reported per
         page
      
      * tag 'ras_core_for_v6.1_rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        x86/mce: Retrieve poison range from hardware
        RAS/CEC: Reduce offline page threshold for Intel systems
      51eaa866
    • Linus Torvalds's avatar
      Merge tag 'x86_cpu_for_v6.1_rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · 7db99f01
      Linus Torvalds authored
      Pull x86 cpu updates from Borislav Petkov:
      
       - Print the CPU number at segfault time.
      
         The number printed is not always accurate (preemption is enabled at
         that time) but the print string contains "likely" and after a lot of
         back'n'forth on this, this was the consensus that was reached. See
         thread at [1].
      
       - After a *lot* of testing and polishing, finally the clear_user()
         improvements to inline REP; STOSB by default
      
      Link: https://lore.kernel.org/r/5d62c1d0-7425-d5bb-ecb5-1dc3b4d7d245@intel.com [1]
      
      * tag 'x86_cpu_for_v6.1_rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        x86/mm: Print likely CPU at segfault time
        x86/clear_user: Make it faster
      7db99f01