)]}'
{
  "log": [
    {
      "commit": "bdbf1ffe1cf9ba75df39e8f788cde0e9c2641b86",
      "tree": "ca60a8493bce10b71b653c8c8ad2808237a62955",
      "parents": [
        "d838269c7a56a11ca746d4f268c983355dabf51b"
      ],
      "author": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Fri Mar 31 17:51:03 2023 -0700"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Fri Mar 31 17:51:03 2023 -0700"
      },
      "message": "bpf: wip.\n\nthis should be MAYBE_NULL.\n\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "d838269c7a56a11ca746d4f268c983355dabf51b",
      "tree": "538ce4de36dffdec5bfe4a6200d1c7116261f6bb",
      "parents": [
        "a9b54424ae4007a01026258e2a4b92ebc7542622"
      ],
      "author": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Fri Mar 31 17:49:33 2023 -0700"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Fri Mar 31 17:49:33 2023 -0700"
      },
      "message": "selftests/bpf: Add a test for walking task-\u003emm-\u003eexe_file.\n\nAdd a test that demonstrates safe walking of task-\u003emm-\u003eexe_file\nand passing file-\u003ef_path into bpf_d_path().\n\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "a9b54424ae4007a01026258e2a4b92ebc7542622",
      "tree": "b8bc0f095d8de39ebca5245565a6bd4bd9585398",
      "parents": [
        "64c179dc3d867c1fa91fa6b11cd5b84b1b10a206"
      ],
      "author": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Fri Mar 31 17:34:57 2023 -0700"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Fri Mar 31 17:40:11 2023 -0700"
      },
      "message": "bpf: Refactor NULL-ness check in check_reg_type().\n\ncheck_reg_type() unconditionally disallows PTR_TO_BTF_ID | PTR_MAYBE_NULL.\nIt\u0027s problematic for helpers that allow ARG_PTR_TO_BTF_ID_OR_NULL like\nbpf_sk_storage_get(). Allow passing PTR_TO_BTF_ID | PTR_MAYBE_NULL into such\nhelpers. That technically includes bpf_kptr_xchg() helper, but in practice:\n  bpf_kptr_xchg(..., bpf_cpumask_create());\nis still disallowed because bpf_cpumask_create() returns ref counted pointer\nwith ref_obj_id \u003e 0.\n\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "64c179dc3d867c1fa91fa6b11cd5b84b1b10a206",
      "tree": "82f60b8affcd22b63b7fc14a721e4415c0fabef4",
      "parents": [
        "93fbc16e34552f4d1780a900a0dce58fe03ed441"
      ],
      "author": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Fri Mar 31 17:08:54 2023 -0700"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Fri Mar 31 17:08:54 2023 -0700"
      },
      "message": "bpf: Teach verifier that certain helpers accept NULL pointer.\n\nbpf_[sk|inode|task|cgrp]_storage_[get|delete]() and bpf_get_socket_cookie() helpers\nperform run-time check that sk|inode|task|cgrp pointer !\u003d NULL.\nTeach verifier about this fact and allow bpf programs to pass\nPTR_TO_BTF_ID | PTR_MAYBE_NULL into such helpers.\nIt will be used in the subsequent patch that will do\nbpf_sk_storage_get(.., skb-\u003esk, ...);\nEven when \u0027skb\u0027 pointer is trusted the \u0027sk\u0027 pointer may be NULL.\n\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "93fbc16e34552f4d1780a900a0dce58fe03ed441",
      "tree": "de092b5008233127d186967015ad1d56a6c926c9",
      "parents": [
        "e941933c4944b34fb4c7713d8c247108cede10f3"
      ],
      "author": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Fri Mar 31 17:02:10 2023 -0700"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Fri Mar 31 17:02:10 2023 -0700"
      },
      "message": "bpf: Refactor btf_nested_type_is_trusted().\n\nbtf_nested_type_is_trusted() tries to find a struct member at corresponding offset.\nIt works for flat structures and falls apart in more complex structs with nested structs.\nThe offset-\u003emember search is already performed by btf_struct_walk() including nested structs.\nReuse this work and pass {field name, field btf id} into btf_nested_type_is_trusted()\ninstead of offset to make BTF_TYPE_SAFE*() logic more robust.\n\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "e941933c4944b34fb4c7713d8c247108cede10f3",
      "tree": "4816246759670d60c08ccedea87c7d23e6e8b3f4",
      "parents": [
        "67efbd57bc6e57de276b964f023f8f947bc52460",
        "dcc46f51d770bde625e4845cac42e808b3302b62"
      ],
      "author": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Fri Mar 31 09:40:16 2023 -0700"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Fri Mar 31 09:40:17 2023 -0700"
      },
      "message": "Merge branch \u0027selftests/bpf: Add read_build_id function\u0027\n\nJiri Olsa says:\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nhi,\nthis selftests cleanup was previously posted as part of file build id changes [1],\nwhich might take more time, so I\u0027m sending the selftests changes separately so it\nwon\u0027t get stuck.\n\nv4 changes:\n  - added size argument to read_build_id [Andrii]\n  - condition changes in parse_build_id_buf [Andrii]\n  - use ELF_C_READ_MMAP in elf_begin [Andrii]\n  - return -ENOENT in read_build_id if build id is not found [Andrii]\n  - dropped elf class check [Andrii]\n\nthanks,\njirka\n\n[1] https://lore.kernel.org/bpf/20230316170149.4106586-1-jolsa@kernel.org/\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "dcc46f51d770bde625e4845cac42e808b3302b62",
      "tree": "4816246759670d60c08ccedea87c7d23e6e8b3f4",
      "parents": [
        "88dc8b3605b38a440fba45edcc53a6c7a98eee3b"
      ],
      "author": {
        "name": "Jiri Olsa",
        "email": "jolsa@kernel.org",
        "time": "Fri Mar 31 11:31:57 2023 +0200"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Fri Mar 31 09:40:16 2023 -0700"
      },
      "message": "selftests/bpf: Replace extract_build_id with read_build_id\n\nReplacing extract_build_id with read_build_id that parses out\nbuild id directly from elf without using readelf tool.\n\nAcked-by: Andrii Nakryiko \u003candrii@kernel.org\u003e\nSigned-off-by: Jiri Olsa \u003cjolsa@kernel.org\u003e\nLink: https://lore.kernel.org/r/20230331093157.1749137-4-jolsa@kernel.org\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "88dc8b3605b38a440fba45edcc53a6c7a98eee3b",
      "tree": "e2e9478889db57ed4b12f7ab848d9e80c8754c3e",
      "parents": [
        "328bafc9a373da5f268d82533dd8f2e66526d168"
      ],
      "author": {
        "name": "Jiri Olsa",
        "email": "jolsa@kernel.org",
        "time": "Fri Mar 31 11:31:56 2023 +0200"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Fri Mar 31 09:40:16 2023 -0700"
      },
      "message": "selftests/bpf: Add read_build_id function\n\nAdding read_build_id function that parses out build id from\nspecified binary.\n\nIt will replace extract_build_id and also be used in following\nchanges.\n\nSigned-off-by: Jiri Olsa \u003cjolsa@kernel.org\u003e\nLink: https://lore.kernel.org/r/20230331093157.1749137-3-jolsa@kernel.org\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "328bafc9a373da5f268d82533dd8f2e66526d168",
      "tree": "b3cbb22676c74c48f6727d46ed1a69d5fbf6c578",
      "parents": [
        "67efbd57bc6e57de276b964f023f8f947bc52460"
      ],
      "author": {
        "name": "Jiri Olsa",
        "email": "jolsa@kernel.org",
        "time": "Fri Mar 31 11:31:55 2023 +0200"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Fri Mar 31 09:40:16 2023 -0700"
      },
      "message": "selftests/bpf: Add err.h header\n\nMoving error macros from profiler.inc.h to new err.h header.\nIt will be used in following changes.\n\nAlso adding PTR_ERR macro that will be used in following changes.\n\nAcked-by: Andrii Nakryiko \u003candrii@kernel.org\u003e\nSigned-off-by: Jiri Olsa \u003cjolsa@kernel.org\u003e\nLink: https://lore.kernel.org/r/20230331093157.1749137-2-jolsa@kernel.org\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "67efbd57bc6e57de276b964f023f8f947bc52460",
      "tree": "529c64a28262e83dabd1e9cc6046c43282c61316",
      "parents": [
        "e4c2acab95a5947fe7948140a83e4f4918c6c048"
      ],
      "author": {
        "name": "David Vernet",
        "email": "void@manifault.com",
        "time": "Thu Mar 30 09:52:03 2023 -0500"
      },
      "committer": {
        "name": "Andrii Nakryiko",
        "email": "andrii@kernel.org",
        "time": "Thu Mar 30 14:12:22 2023 -0700"
      },
      "message": "selftests/bpf: Add testcases for ptr_*_or_null_ in bpf_kptr_xchg\n\nThe second argument of the bpf_kptr_xchg() helper function is\nARG_PTR_TO_BTF_ID_OR_NULL. A recent patch fixed a bug whereby the\nverifier would fail with an internal error message if a program invoked\nthe helper with a PTR_TO_BTF_ID | PTR_MAYBE_NULL register. This testcase\nadds some testcases to ensure that it fails gracefully moving forward.\n\nBefore the fix, these testcases would have failed an error resembling\nthe following:\n\n; p \u003d bpf_kfunc_call_test_acquire(\u0026(unsigned long){0});\n99: (7b) *(u64 *)(r10 -16) \u003d r7       ; frame1: ...\n100: (bf) r1 \u003d r10                    ; frame1: ...\n101: (07) r1 +\u003d -16                   ; frame1: ...\n; p \u003d bpf_kfunc_call_test_acquire(\u0026(unsigned long){0});\n102: (85) call bpf_kfunc_call_test_acquire#13908\n; frame1: R0_w\u003dptr_or_null_prog_test_ref_kfunc...\n; p \u003d bpf_kptr_xchg(\u0026v-\u003eref_ptr, p);\n103: (bf) r1 \u003d r6                     ; frame1: ...\n104: (bf) r2 \u003d r0\n; frame1: R0_w\u003dptr_or_null_prog_test_ref_kfunc...\n105: (85) call bpf_kptr_xchg#194\nverifier internal error: invalid PTR_TO_BTF_ID register for type match\n\nSigned-off-by: David Vernet \u003cvoid@manifault.com\u003e\nSigned-off-by: Andrii Nakryiko \u003candrii@kernel.org\u003e\nLink: https://lore.kernel.org/bpf/20230330145203.80506-2-void@manifault.com\n"
    },
    {
      "commit": "e4c2acab95a5947fe7948140a83e4f4918c6c048",
      "tree": "555e07c3c42a26156a7c0a2289f1cda674a63a7c",
      "parents": [
        "d816129530e77b905b492631651eb09a18789692"
      ],
      "author": {
        "name": "David Vernet",
        "email": "void@manifault.com",
        "time": "Thu Mar 30 09:52:02 2023 -0500"
      },
      "committer": {
        "name": "Andrii Nakryiko",
        "email": "andrii@kernel.org",
        "time": "Thu Mar 30 14:12:22 2023 -0700"
      },
      "message": "bpf: Handle PTR_MAYBE_NULL case in PTR_TO_BTF_ID helper call arg\n\nWhen validating a helper function argument, we use check_reg_type() to\nensure that the register containing the argument is of the correct type.\nWhen the register\u0027s base type is PTR_TO_BTF_ID, there is some\nsupplemental logic where we do extra checks for various combinations of\nPTR_TO_BTF_ID type modifiers. For example, for PTR_TO_BTF_ID,\nPTR_TO_BTF_ID | PTR_TRUSTED, and PTR_TO_BTF_ID | MEM_RCU, we call\nmap_kptr_match_type() for bpf_kptr_xchg() calls, and\nbtf_struct_ids_match() for other helper calls.\n\nWhen an unhandled PTR_TO_BTF_ID type modifier combination is passed to\ncheck_reg_type(), the verifier fails with an internal verifier error\nmessage. This can currently be triggered by passing a PTR_MAYBE_NULL\npointer to helper functions (currently just bpf_kptr_xchg()) with an\nARG_PTR_TO_BTF_ID_OR_NULL arg type. For example, by callin\nbpf_kptr_xchg(\u0026v-\u003ekptr, bpf_cpumask_create()).\n\nWhether or not passing a PTR_MAYBE_NULL arg to an\nARG_PTR_TO_BTF_ID_OR_NULL argument is valid is an interesting question.\nIn a vacuum, it seems fine. A helper function with an\nARG_PTR_TO_BTF_ID_OR_NULL arg would seem to be implying that it can\nhandle either a NULL or non-NULL arg, and has logic in place to detect\nand gracefully handle each. This is the case for bpf_kptr_xchg(), which\nof course simply does an xchg(). On the other hand, bpf_kptr_xchg() also\nspecifies OBJ_RELEASE, and refcounting semantics for a PTR_MAYBE_NULL\npointer is different than handling it for a NULL _OR_ non-NULL pointer.\nFor example, with a non-NULL arg, we should always fail if there was not\na nonzero refcount for the value in the register being passed to the\nhelper. For PTR_MAYBE_NULL on the other hand, it\u0027s unclear. If the\npointer is NULL it would be fine, but if it\u0027s not NULL, it would be\nincorrect to load the program.\n\nThe current solution to this is to just fail if PTR_MAYBE_NULL is\npassed, and to instead require programs to have a NULL check to\nexplicitly handle the NULL and non-NULL cases. This seems reasonable.\nNot only would it possibly be quite complicated to correctly handle\nPTR_MAYBE_NULL refcounting in the verifier, but it\u0027s also an arguably\nodd programming pattern in general to not explicitly handle the NULL\ncase anyways. For example, it seems odd to not care about whether a\npointer you\u0027re passing to bpf_kptr_xchg() was successfully allocated in\na program such as the following:\n\nprivate(MASK) static struct bpf_cpumask __kptr * global_mask;\n\nSEC(\"tp_btf/task_newtask\")\nint BPF_PROG(example, struct task_struct *task, u64 clone_flags)\n{\n        struct bpf_cpumask *prev;\n\n\t/* bpf_cpumask_create() returns PTR_MAYBE_NULL */\n\tprev \u003d bpf_kptr_xchg(\u0026global_mask, bpf_cpumask_create());\n\tif (prev)\n\t\tbpf_cpumask_release(prev);\n\n\treturn 0;\n}\n\nThis patch therefore updates the verifier to explicitly check for\nPTR_MAYBE_NULL in check_reg_type(), and fail gracefully if it\u0027s\nobserved. This isn\u0027t really \"fixing\" anything unsafe or incorrect. We\u0027re\njust updating the verifier to fail gracefully, and explicitly handle\nthis pattern rather than unintentionally falling back to an internal\nverifier error path. A subsequent patch will update selftests.\n\nSigned-off-by: David Vernet \u003cvoid@manifault.com\u003e\nSigned-off-by: Andrii Nakryiko \u003candrii@kernel.org\u003e\nLink: https://lore.kernel.org/bpf/20230330145203.80506-1-void@manifault.com\n"
    },
    {
      "commit": "d816129530e77b905b492631651eb09a18789692",
      "tree": "8e799767a407d2edf46bed4631abd84753037cc5",
      "parents": [
        "4ca13d1002f37c10038ff4ed3cfdc70dbe049d60"
      ],
      "author": {
        "name": "Andrii Nakryiko",
        "email": "andrii@kernel.org",
        "time": "Thu Mar 30 12:01:15 2023 -0700"
      },
      "committer": {
        "name": "Martin KaFai Lau",
        "email": "martin.lau@kernel.org",
        "time": "Thu Mar 30 13:53:03 2023 -0700"
      },
      "message": "veristat: change guess for __sk_buff from CGROUP_SKB to SCHED_CLS\n\nSCHED_CLS seems to be a better option as a default guess for freplace\nprograms that have __sk_buff as a context type.\n\nReported-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nSigned-off-by: Andrii Nakryiko \u003candrii@kernel.org\u003e\nLink: https://lore.kernel.org/r/20230330190115.3942962-1-andrii@kernel.org\nSigned-off-by: Martin KaFai Lau \u003cmartin.lau@kernel.org\u003e\n"
    },
    {
      "commit": "4ca13d1002f37c10038ff4ed3cfdc70dbe049d60",
      "tree": "1c92420cfb04f0eab3e611ed06c929713b594425",
      "parents": [
        "8a9abe0293294fee279750058a509bbfab0c57a3"
      ],
      "author": {
        "name": "Xu Kuohai",
        "email": "xukuohai@huawei.com",
        "time": "Tue Mar 28 21:10:48 2023 -0400"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Wed Mar 29 17:26:09 2023 -0700"
      },
      "message": "selftests/bpf: Rewrite two infinite loops in bound check cases\n\nThe two infinite loops in bound check cases added by commit\n1a3148fc171f (\"selftests/bpf: Check when bounds are not in the 32-bit range\")\nincreased the execution time of test_verifier from about 6 seconds to\nabout 9 seconds. Rewrite these two infinite loops to finite loops to get\nrid of this extra time cost.\n\nSigned-off-by: Xu Kuohai \u003cxukuohai@huawei.com\u003e\nLink: https://lore.kernel.org/r/20230329011048.1721937-1-xukuohai@huaweicloud.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "8a9abe0293294fee279750058a509bbfab0c57a3",
      "tree": "4645d025d662333f08d7726f2e00e860ada66d51",
      "parents": [
        "8b52cc2a2fef541d605debb7efc7dc1bae7b2876",
        "fa7cc90620870e4444bb5184c08148495b1627c6"
      ],
      "author": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Wed Mar 29 17:22:02 2023 -0700"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Wed Mar 29 17:22:05 2023 -0700"
      },
      "message": "Merge branch \u0027veristat: add better support of freplace programs\u0027\n\nAndrii Nakryiko says:\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nTeach veristat how to deal with freplace BPF programs. As they can\u0027t be\ndirectly loaded by veristat without custom user-space part that sets correct\ntarget program FD, veristat always fails freplace programs. This patch set\nteaches veristat to guess target program type that will be inherited by\nfreplace program itself, and subtitute it for BPF_PROG_TYPE_EXT (freplace) one\nfor the purposes of BPF verification.\n\nPatch #1 fixes bug in libbpf preventing overriding freplace with specific\nprogram type.\n\nPatch #2 adds convenient -d flag to request veristat to emit libbpf debug\nlogs. It help debugging why a specific BPF program fails to load, if the\nproblem is not due to BPF verification itself.\n\nv3-\u003ev4:\n  - fix optional kern_name check when guessing prog type (Alexei);\nv2-\u003ev3:\n  - fix bpf_obj_id selftest that uses legacy bpf_prog_test_load() helper,\n    which always sets program type programmatically; teach the helper to do it\n    only if actually necessary (Stanislav);\nv1-\u003ev2:\n  - fix compilation error reported by old GCC (my GCC v11 doesn\u0027t produce even\n    a warning) and Clang (see CI failure at [0]):\n\nGCC version:\n\n  veristat.c: In function ‘fixup_obj’:\n  veristat.c:908:1: error: label at end of compound statement\n    908 | skip_freplace_fixup:\n        | ^~~~~~~~~~~~~~~~~~~\n\nClang version:\n\n  veristat.c:909:1: error: label at end of compound statement is a C2x extension [-Werror,-Wc2x-extensions]\n  }\n  ^\n  1 error generated.\n\n  [0] https://github.com/kernel-patches/bpf/actions/runs/4515972059/jobs/7953845335\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nAcked-by: Stanislav Fomichev \u003csdf@google.com\u003e\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "fa7cc90620870e4444bb5184c08148495b1627c6",
      "tree": "4645d025d662333f08d7726f2e00e860ada66d51",
      "parents": [
        "b3c63d7ad81ad6f43921d59af18fc25c64327a74"
      ],
      "author": {
        "name": "Andrii Nakryiko",
        "email": "andrii@kernel.org",
        "time": "Mon Mar 27 11:52:02 2023 -0700"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Wed Mar 29 17:22:01 2023 -0700"
      },
      "message": "veristat: guess and substitue underlying program type for freplace (EXT) progs\n\nSEC(\"freplace\") (i.e., BPF_PROG_TYPE_EXT) programs are not loadable as\nis through veristat, as kernel expects actual program\u0027s FD during\nBPF_PROG_LOAD time, which veristat has no way of knowing.\n\nUnfortunately, freplace programs are a pretty important class of\nprograms, especially when dealing with XDP chaining solutions, which\nrely on EXT programs.\n\nSo let\u0027s do our best and teach veristat to try to guess the original\nprogram type, based on program\u0027s context argument type. And if guessing\nprocess succeeds, we manually override freplace/EXT with guessed program\ntype using bpf_program__set_type() setter to increase chances of proper\nBPF verification.\n\nWe rely on BTF and maintain a simple lookup table. This process is\nobviously not 100% bulletproof, as valid program might not use context\nand thus wouldn\u0027t have to specify correct type. Also, __sk_buff is very\nambiguous and is the context type across many different program types.\nWe pick BPF_PROG_TYPE_CGROUP_SKB for now, which seems to work fine in\npractice so far. Similarly, some program types require specifying attach\ntype, and so we pick one out of possible few variants.\n\nBest effort at its best. But this makes veristat even more widely\napplicable.\n\nSigned-off-by: Andrii Nakryiko \u003candrii@kernel.org\u003e\nTested-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230327185202.1929145-4-andrii@kernel.org\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "b3c63d7ad81ad6f43921d59af18fc25c64327a74",
      "tree": "95cca6dc3e73e4c235936bc514adabcd78db89f1",
      "parents": [
        "d6e6286a12e7b8a4ddc66237c4ccf6f531ef1c82"
      ],
      "author": {
        "name": "Andrii Nakryiko",
        "email": "andrii@kernel.org",
        "time": "Mon Mar 27 11:52:01 2023 -0700"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Wed Mar 29 17:22:01 2023 -0700"
      },
      "message": "veristat: add -d debug mode option to see debug libbpf log\n\nAdd -d option to allow requesting libbpf debug logs from veristat.\n\nSigned-off-by: Andrii Nakryiko \u003candrii@kernel.org\u003e\nLink: https://lore.kernel.org/r/20230327185202.1929145-3-andrii@kernel.org\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "d6e6286a12e7b8a4ddc66237c4ccf6f531ef1c82",
      "tree": "5c7001ce51c15d89048d48672f91fe6c230ff458",
      "parents": [
        "8b52cc2a2fef541d605debb7efc7dc1bae7b2876"
      ],
      "author": {
        "name": "Andrii Nakryiko",
        "email": "andrii@kernel.org",
        "time": "Mon Mar 27 11:52:00 2023 -0700"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Wed Mar 29 17:22:01 2023 -0700"
      },
      "message": "libbpf: disassociate section handler on explicit bpf_program__set_type() call\n\nIf user explicitly overrides programs\u0027s type with\nbpf_program__set_type() API call, we need to disassociate whatever\nSEC_DEF handler libbpf determined initially based on program\u0027s SEC()\ndefinition, as it\u0027s not goind to be valid anymore and could lead to\ncrashes and/or confusing failures.\n\nAlso, fix up bpf_prog_test_load() helper in selftests/bpf, which is\nforce-setting program type (even if that\u0027s completely unnecessary; this\nis quite a legacy piece of code), and thus should expect auto-attach to\nnot work, yet one of the tests explicitly relies on auto-attach for\ntesting.\n\nInstead, force-set program type only if it differs from the desired one.\n\nSigned-off-by: Andrii Nakryiko \u003candrii@kernel.org\u003e\nLink: https://lore.kernel.org/r/20230327185202.1929145-2-andrii@kernel.org\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "8b52cc2a2fef541d605debb7efc7dc1bae7b2876",
      "tree": "e16331d33a1dab203c847b830d862e3a3a09a559",
      "parents": [
        "d8d8b008629ffd69f1e204010cb3299bb633877e",
        "4239561b69feb94e52e43d93685cc46fb9dbcae5"
      ],
      "author": {
        "name": "Martin KaFai Lau",
        "email": "martin.lau@kernel.org",
        "time": "Wed Mar 29 13:10:56 2023 -0700"
      },
      "committer": {
        "name": "Martin KaFai Lau",
        "email": "martin.lau@kernel.org",
        "time": "Wed Mar 29 13:10:56 2023 -0700"
      },
      "message": "Merge branch \u0027Allow BPF TCP CCs to write app_limited\u0027\n\nYixin Shen says:\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nThis series allow BPF TCP CCs to write app_limited of struct\ntcp_sock. A built-in CC or one from a kernel module is already\nable to write to app_limited of struct tcp_sock. Until now,\na BPF CC doesn\u0027t have write access to this member of struct\ntcp_sock.\n\nv2:\n - Merge the test of writing app_limited into the test of\n   writing sk_pacing. (Martin KaFai Lau)\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nSigned-off-by: Martin KaFai Lau \u003cmartin.lau@kernel.org\u003e\n"
    },
    {
      "commit": "4239561b69feb94e52e43d93685cc46fb9dbcae5",
      "tree": "e16331d33a1dab203c847b830d862e3a3a09a559",
      "parents": [
        "562dc56a88983421a6c5a46e0feb891873d118a1"
      ],
      "author": {
        "name": "Yixin Shen",
        "email": "bobankhshen@gmail.com",
        "time": "Wed Mar 29 07:35:58 2023 +0000"
      },
      "committer": {
        "name": "Martin KaFai Lau",
        "email": "martin.lau@kernel.org",
        "time": "Wed Mar 29 13:10:56 2023 -0700"
      },
      "message": "selftests/bpf: test a BPF CC writing app_limited\n\nTest whether a TCP CC implemented in BPF is allowed to write\napp_limited in struct tcp_sock. This is already allowed for\nthe built-in TCP CC.\n\nSigned-off-by: Yixin Shen \u003cbobankhshen@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230329073558.8136-3-bobankhshen@gmail.com\nSigned-off-by: Martin KaFai Lau \u003cmartin.lau@kernel.org\u003e\n"
    },
    {
      "commit": "562dc56a88983421a6c5a46e0feb891873d118a1",
      "tree": "d503b09b0383433a217cece89917c29688a1e18f",
      "parents": [
        "d8d8b008629ffd69f1e204010cb3299bb633877e"
      ],
      "author": {
        "name": "Yixin Shen",
        "email": "bobankhshen@gmail.com",
        "time": "Wed Mar 29 07:35:57 2023 +0000"
      },
      "committer": {
        "name": "Martin KaFai Lau",
        "email": "martin.lau@kernel.org",
        "time": "Wed Mar 29 13:10:56 2023 -0700"
      },
      "message": "bpf: allow a TCP CC to write app_limited\n\nA CC that implements tcp_congestion_ops.cong_control() should be able to\nwrite app_limited. A built-in CC or one from a kernel module is already\nable to write to this member of struct tcp_sock.\nFor a BPF program, write access has not been allowed, yet.\n\nSigned-off-by: Yixin Shen \u003cbobankhshen@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230329073558.8136-2-bobankhshen@gmail.com\nSigned-off-by: Martin KaFai Lau \u003cmartin.lau@kernel.org\u003e\n"
    },
    {
      "commit": "d8d8b008629ffd69f1e204010cb3299bb633877e",
      "tree": "802a8c70600df45f60105f4f5ccdbe6c28e9e5c4",
      "parents": [
        "07561769e0019d35665e8fc715c7ab2cfa2723c0"
      ],
      "author": {
        "name": "Manu Bretelle",
        "email": "chantr4@gmail.com",
        "time": "Wed Mar 29 00:30:02 2023 -0700"
      },
      "committer": {
        "name": "Andrii Nakryiko",
        "email": "andrii@kernel.org",
        "time": "Wed Mar 29 09:48:45 2023 -0700"
      },
      "message": "tools: bpftool: json: Fix backslash escape typo in jsonw_puts\n\nThis is essentially a backport of iproute2\u0027s\ncommit ed54f76484b5 (\"json: fix backslash escape typo in jsonw_puts\")\n\nAlso added the stdio.h include in json_writer.h to be able to compile\nand run the json_writer test as used below).\n\nBefore this fix:\n\n$ gcc -D notused -D TEST -I../../include -o json_writer  json_writer.c\njson_writer.h\n$ ./json_writer\n{\n    \"Vyatta\": {\n        \"url\": \"http://vyatta.com\",\n        \"downloads\": 2000000,\n        \"stock\": 8.16,\n        \"ARGV\": [],\n        \"empty\": [],\n        \"NIL\": {},\n        \"my_null\": null,\n        \"special chars\": [\n            \"slash\": \"/\",\n            \"newline\": \"\\n\",\n            \"tab\": \"\\t\",\n            \"ff\": \"\\f\",\n            \"quote\": \"\\\"\",\n            \"tick\": \"\u0027\",\n            \"backslash\": \"\\n\"\n        ]\n    }\n}\n\nAfter:\n\n$ gcc -D notused -D TEST -I../../include -o json_writer  json_writer.c\njson_writer.h\n$ ./json_writer\n{\n    \"Vyatta\": {\n        \"url\": \"http://vyatta.com\",\n        \"downloads\": 2000000,\n        \"stock\": 8.16,\n        \"ARGV\": [],\n        \"empty\": [],\n        \"NIL\": {},\n        \"my_null\": null,\n        \"special chars\": [\n            \"slash\": \"/\",\n            \"newline\": \"\\n\",\n            \"tab\": \"\\t\",\n            \"ff\": \"\\f\",\n            \"quote\": \"\\\"\",\n            \"tick\": \"\u0027\",\n            \"backslash\": \"\\\\\"\n        ]\n    }\n}\n\nSigned-off-by: Manu Bretelle \u003cchantr4@gmail.com\u003e\nSigned-off-by: Andrii Nakryiko \u003candrii@kernel.org\u003e\nReviewed-by: Quentin Monnet \u003cquentin@isovalent.com\u003e\nLink: https://lore.kernel.org/bpf/20230329073002.2026563-1-chantr4@gmail.com\n"
    },
    {
      "commit": "07561769e0019d35665e8fc715c7ab2cfa2723c0",
      "tree": "d3547767287476f5ebbd0771fd0bf2f8ef6a7593",
      "parents": [
        "d08ab82f59d55b0e5acfeb453081278dfc33f232",
        "c63a7d8bbb54a904f3ab8ff0aae39cd571b2c39c"
      ],
      "author": {
        "name": "Andrii Nakryiko",
        "email": "andrii@kernel.org",
        "time": "Tue Mar 28 14:48:27 2023 -0700"
      },
      "committer": {
        "name": "Andrii Nakryiko",
        "email": "andrii@kernel.org",
        "time": "Tue Mar 28 14:48:28 2023 -0700"
      },
      "message": "Merge branch \u0027verifier/xdp_direct_packet_access.c converted to inline assembly\u0027\n\nEduard Zingerman says:\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nverifier/xdp_direct_packet_access.c automatically converted to inline\nassembly using [1].\n\nThis is a leftover from [2], the last patch in a batch was blocked by\nmail server for being too long. This patch-set splits it in two:\n- one to add migrated test to progs/\n- one to remove old test from verifier/\n\n[1] Migration tool\n    https://github.com/eddyz87/verifier-tests-migrator\n[2] First batch of migrated verifier/*.c tests\n    https://lore.kernel.org/bpf/167979433109.17761.17302808621381963629.git-patchwork-notify@kernel.org/\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nSigned-off-by: Andrii Nakryiko \u003candrii@kernel.org\u003e\n"
    },
    {
      "commit": "c63a7d8bbb54a904f3ab8ff0aae39cd571b2c39c",
      "tree": "d3547767287476f5ebbd0771fd0bf2f8ef6a7593",
      "parents": [
        "6e9e141a7a28520a1cd13c96ad9127860e32ffbb"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Tue Mar 28 05:08:13 2023 +0300"
      },
      "committer": {
        "name": "Andrii Nakryiko",
        "email": "andrii@kernel.org",
        "time": "Tue Mar 28 14:48:27 2023 -0700"
      },
      "message": "selftests/bpf: Remove verifier/xdp_direct_packet_access.c, converted to progs/verifier_xdp_direct_packet_access.c\n\nRemoving verifier/xdp_direct_packet_access.c.c as it was automatically converted to use\ninline assembly in the previous commit. It is available in\nprogs/verifier_xdp_direct_packet_access.c.c.\n\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nSigned-off-by: Andrii Nakryiko \u003candrii@kernel.org\u003e\nLink: https://lore.kernel.org/bpf/20230328020813.392560-3-eddyz87@gmail.com\n"
    },
    {
      "commit": "6e9e141a7a28520a1cd13c96ad9127860e32ffbb",
      "tree": "d23d6affd1f2c27e20698d93d1024c8a2519c599",
      "parents": [
        "d08ab82f59d55b0e5acfeb453081278dfc33f232"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Tue Mar 28 05:08:12 2023 +0300"
      },
      "committer": {
        "name": "Andrii Nakryiko",
        "email": "andrii@kernel.org",
        "time": "Tue Mar 28 14:48:27 2023 -0700"
      },
      "message": "selftests/bpf: Verifier/xdp_direct_packet_access.c converted to inline assembly\n\nTest verifier/xdp_direct_packet_access.c automatically converted to use inline assembly.\nOriginal test would be removed in the next patch.\n\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nSigned-off-by: Andrii Nakryiko \u003candrii@kernel.org\u003e\nLink: https://lore.kernel.org/bpf/20230328020813.392560-2-eddyz87@gmail.com\n"
    },
    {
      "commit": "d08ab82f59d55b0e5acfeb453081278dfc33f232",
      "tree": "6165d102a7aba9310cec8108cd584897bc9aa1a7",
      "parents": [
        "7283137a7622292076dd8b7f3b8b2bb203ce5a14"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Tue Mar 28 03:47:38 2023 +0300"
      },
      "committer": {
        "name": "Andrii Nakryiko",
        "email": "andrii@kernel.org",
        "time": "Mon Mar 27 20:02:15 2023 -0700"
      },
      "message": "libbpf: Fix double-free when linker processes empty sections\n\nDouble-free error in bpf_linker__free() was reported by James Hilliard.\nThe error is caused by miss-use of realloc() in extend_sec().\nThe error occurs when two files with empty sections of the same name\nare linked:\n- when first file is processed:\n  - extend_sec() calls realloc(dst-\u003eraw_data, dst_align_sz)\n    with dst-\u003eraw_data \u003d\u003d NULL and dst_align_sz \u003d\u003d 0;\n  - dst-\u003eraw_data is set to a special pointer to a memory block of\n    size zero;\n- when second file is processed:\n  - extend_sec() calls realloc(dst-\u003eraw_data, dst_align_sz)\n    with dst-\u003eraw_data \u003d\u003d \u003cspecial pointer\u003e and dst_align_sz \u003d\u003d 0;\n  - realloc() \"frees\" dst-\u003eraw_data special pointer and returns NULL;\n  - extend_sec() exits with -ENOMEM, and the old dst-\u003eraw_data value\n    is preserved (it is now invalid);\n  - eventually, bpf_linker__free() attempts to free dst-\u003eraw_data again.\n\nThis patch fixes the bug by avoiding -ENOMEM exit for dst_align_sz \u003d\u003d 0.\nThe fix was suggested by Andrii Nakryiko \u003candrii.nakryiko@gmail.com\u003e.\n\nReported-by: James Hilliard \u003cjames.hilliard1@gmail.com\u003e\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nSigned-off-by: Andrii Nakryiko \u003candrii@kernel.org\u003e\nTested-by: James Hilliard \u003cjames.hilliard1@gmail.com\u003e\nLink: https://lore.kernel.org/bpf/CADvTj4o7ZWUikKwNTwFq0O_AaX+46t_+Ca9gvWMYdWdRtTGeHQ@mail.gmail.com/\nLink: https://lore.kernel.org/bpf/20230328004738.381898-3-eddyz87@gmail.com\n"
    },
    {
      "commit": "7283137a7622292076dd8b7f3b8b2bb203ce5a14",
      "tree": "37f7218ad0b16e8de84ac6addb332a1c35e29010",
      "parents": [
        "f1cb927cdb6280e0ce283174cc1bf395dffc43d4"
      ],
      "author": {
        "name": "Hengqi Chen",
        "email": "hengqi.chen@gmail.com",
        "time": "Sun Mar 26 09:53:41 2023 +0000"
      },
      "committer": {
        "name": "Andrii Nakryiko",
        "email": "andrii@kernel.org",
        "time": "Mon Mar 27 11:41:16 2023 -0700"
      },
      "message": "selftests/bpf: Don\u0027t assume page size is 4096\n\nThe verifier test creates BPF ringbuf maps using hard-coded\n4096 as max_entries. Some tests will fail if the page size\nof the running kernel is not 4096. Use getpagesize() instead.\n\nSigned-off-by: Hengqi Chen \u003chengqi.chen@gmail.com\u003e\nSigned-off-by: Andrii Nakryiko \u003candrii@kernel.org\u003e\nLink: https://lore.kernel.org/bpf/20230326095341.816023-1-hengqi.chen@gmail.com\n"
    },
    {
      "commit": "f1cb927cdb6280e0ce283174cc1bf395dffc43d4",
      "tree": "d9797bbb0073a28680c76bf7fe862a4272d5a285",
      "parents": [
        "5f5a7d8d8bd461f515543040ad7d107cc405d30c"
      ],
      "author": {
        "name": "JP Kobryn",
        "email": "inwardvessel@gmail.com",
        "time": "Fri Mar 24 18:08:45 2023 -0700"
      },
      "committer": {
        "name": "Andrii Nakryiko",
        "email": "andrii@kernel.org",
        "time": "Mon Mar 27 11:33:43 2023 -0700"
      },
      "message": "libbpf: Ensure print callback usage is thread-safe\n\nThis patch prevents races on the print function pointer, allowing the\nlibbpf_set_print() function to become thread-safe.\n\nSigned-off-by: JP Kobryn \u003cinwardvessel@gmail.com\u003e\nSigned-off-by: Andrii Nakryiko \u003candrii@kernel.org\u003e\nLink: https://lore.kernel.org/bpf/20230325010845.46000-1-inwardvessel@gmail.com\n"
    },
    {
      "commit": "5f5a7d8d8bd461f515543040ad7d107cc405d30c",
      "tree": "a682e451ae97a8d77c45c80738e994c49b4576d4",
      "parents": [
        "8cfee110711ed60bfdd39af0107ddef01d6b72c3"
      ],
      "author": {
        "name": "Nuno Gonçalves",
        "email": "nunog@fr24.com",
        "time": "Fri Mar 24 10:02:22 2023 +0000"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 21:07:35 2023 -0700"
      },
      "message": "xsk: allow remap of fill and/or completion rings\n\nThe remap of fill and completion rings was frowned upon as they\ncontrol the usage of UMEM which does not support concurrent use.\nAt the same time this would disallow the remap of these rings\ninto another process.\n\nA possible use case is that the user wants to transfer the socket/\nUMEM ownership to another process (via SYS_pidfd_getfd) and so\nwould need to also remap these rings.\n\nThis will have no impact on current usages and just relaxes the\nremap limitation.\n\nSigned-off-by: Nuno Gonçalves \u003cnunog@fr24.com\u003e\nReviewed-by: Maciej Fijalkowski \u003cmaciej.fijalkowski@intel.com\u003e\nAcked-by: Magnus Karlsson \u003cmagnus.karlsson@intel.com\u003e\nLink: https://lore.kernel.org/r/20230324100222.13434-1-nunog@fr24.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "8cfee110711ed60bfdd39af0107ddef01d6b72c3",
      "tree": "76277eeeb8242967e411df438f2a9c9e5ce6ed0a",
      "parents": [
        "8d2759608c1f39fc2d60702bf0a7421be246d209"
      ],
      "author": {
        "name": "Dave Thaler",
        "email": "dthaler@microsoft.com",
        "time": "Sun Mar 26 03:31:17 2023 +0000"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 20:58:36 2023 -0700"
      },
      "message": "bpf, docs: Add extended call instructions\n\nAdd extended call instructions.  Uses the term \"program-local\" for\ncall by offset.  And there are instructions for calling helper functions\nby \"address\" (the old way of using integer values), and for calling\nhelper functions by BTF ID (for kfuncs).\n\nV1 -\u003e V2: addressed comments from David Vernet\n\nV2 -\u003e V3: make descriptions in table consistent with updated names\n\nV3 -\u003e V4: addressed comments from Alexei\n\nV4 -\u003e V5: fixed alignment\n\nSigned-off-by: Dave Thaler \u003cdthaler@microsoft.com\u003e\nAcked-by: David Vernet \u003cvoid@manifault.com\u003e\nLink: https://lore.kernel.org/r/20230326033117.1075-1-dthaler1968@googlemail.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "8d2759608c1f39fc2d60702bf0a7421be246d209",
      "tree": "c5ac30ad68786fa9636d46cb2dbb8d1f36fccc04",
      "parents": [
        "e99360762a9cbd93bf1d352e90df5df78daa2f90",
        "cbe9d93d58b16b5912498ea42b5173022fff7c04"
      ],
      "author": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 19:52:52 2023 -0700"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 19:52:52 2023 -0700"
      },
      "message": "Merge branch \u0027bpf: Use bpf_mem_cache_alloc/free in bpf_local_storage\u0027\n\nMartin KaFai Lau says:\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nFrom: Martin KaFai Lau \u003cmartin.lau@kernel.org\u003e\n\nThis set is a continuation of the effort in using\nbpf_mem_cache_alloc/free in bpf_local_storage [1]\n\nMajor change is only using bpf_mem_alloc for task and cgrp storage\nwhile sk and inode stay with kzalloc/kfree. The details is\nin patch 2.\n\n[1]: https://lore.kernel.org/bpf/20230308065936.1550103-1-martin.lau@linux.dev/\n\nv3:\n- Only use bpf_mem_alloc for task and cgrp storage.\n- sk and inode storage stay with kzalloc/kfree.\n- Check NULL and add comments in bpf_mem_cache_raw_free() in patch 1.\n- Added test and benchmark for task storage.\n\nv2:\n- Added bpf_mem_cache_alloc_flags() and bpf_mem_cache_raw_free()\n  to hide the internal data structure of the bpf allocator.\n- Fixed a typo bug in bpf_selem_free()\n- Simplified the test_local_storage test by directly using\n  err returned from libbpf\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "cbe9d93d58b16b5912498ea42b5173022fff7c04",
      "tree": "c5ac30ad68786fa9636d46cb2dbb8d1f36fccc04",
      "parents": [
        "d8db84d71c0e539f7ce902e2fe297e535ba4d46c"
      ],
      "author": {
        "name": "Martin KaFai Lau",
        "email": "martin.lau@kernel.org",
        "time": "Wed Mar 22 14:52:46 2023 -0700"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 19:52:52 2023 -0700"
      },
      "message": "selftests/bpf: Add bench for task storage creation\n\nThis patch adds a task storage benchmark to the existing\nlocal-storage-create benchmark.\n\nFor task storage,\n./bench --storage-type task --batch-size 32:\n   bpf_ma: Summary: creates   30.456 ± 0.507k/s ( 30.456k/prod), 6.08 kmallocs/create\nno bpf_ma: Summary: creates   31.962 ± 0.486k/s ( 31.962k/prod), 6.13 kmallocs/create\n\n./bench --storage-type task --batch-size 64:\n   bpf_ma: Summary: creates   30.197 ± 1.476k/s ( 30.197k/prod), 6.08 kmallocs/create\nno bpf_ma: Summary: creates   31.103 ± 0.297k/s ( 31.103k/prod), 6.13 kmallocs/create\n\nSigned-off-by: Martin KaFai Lau \u003cmartin.lau@kernel.org\u003e\nLink: https://lore.kernel.org/r/20230322215246.1675516-6-martin.lau@linux.dev\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "d8db84d71c0e539f7ce902e2fe297e535ba4d46c",
      "tree": "4320619cce1a6f62d8a5e09ed2f4c31b4846c775",
      "parents": [
        "6ae9d5e99e1dd26babdd9502759fa25a3fd348ad"
      ],
      "author": {
        "name": "Martin KaFai Lau",
        "email": "martin.lau@kernel.org",
        "time": "Wed Mar 22 14:52:45 2023 -0700"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 19:52:52 2023 -0700"
      },
      "message": "selftests/bpf: Test task storage when local_storage-\u003esmap is NULL\n\nThe current sk storage test ensures the memory free works when\nthe local_storage-\u003esmap is NULL.\n\nThis patch adds a task storage test to ensure the memory free\ncode path works when local_storage-\u003esmap is NULL.\n\nSigned-off-by: Martin KaFai Lau \u003cmartin.lau@kernel.org\u003e\nLink: https://lore.kernel.org/r/20230322215246.1675516-5-martin.lau@linux.dev\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "6ae9d5e99e1dd26babdd9502759fa25a3fd348ad",
      "tree": "3a4d1dd1bdddc39d41f6c0a57ad3aa878a339747",
      "parents": [
        "08a7ce384e33e53e0732c500a8af67a73f8fceca"
      ],
      "author": {
        "name": "Martin KaFai Lau",
        "email": "martin.lau@kernel.org",
        "time": "Wed Mar 22 14:52:44 2023 -0700"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 19:52:52 2023 -0700"
      },
      "message": "bpf: Use bpf_mem_cache_alloc/free for bpf_local_storage\n\nThis patch uses bpf_mem_cache_alloc/free for allocating and freeing\nbpf_local_storage for task and cgroup storage.\n\nThe changes are similar to the previous patch. A few things that\nworth to mention for bpf_local_storage:\n\nThe local_storage is freed when the last selem is deleted.\nBefore deleting a selem from local_storage, it needs to retrieve the\nlocal_storage-\u003esmap because the bpf_selem_unlink_storage_nolock()\nmay have set it to NULL. Note that local_storage-\u003esmap may have\nalready been NULL when the selem created this local_storage has\nbeen removed. In this case, call_rcu will be used to free the\nlocal_storage.\nAlso, the bpf_ma (true or false) value is needed before calling\nbpf_local_storage_free(). The bpf_ma can either be obtained from\nthe local_storage-\u003esmap (if available) or any of its selem\u0027s smap.\nA new helper check_storage_bpf_ma() is added to obtain\nbpf_ma for a deleting bpf_local_storage.\n\nWhen bpf_local_storage_alloc getting a reused memory, all\nfields are either in the correct values or will be initialized.\n\u0027cache[]\u0027 must already be all NULLs. \u0027list\u0027 must be empty.\nOthers will be initialized.\n\nCc: Namhyung Kim \u003cnamhyung@kernel.org\u003e\nSigned-off-by: Martin KaFai Lau \u003cmartin.lau@kernel.org\u003e\nLink: https://lore.kernel.org/r/20230322215246.1675516-4-martin.lau@linux.dev\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "08a7ce384e33e53e0732c500a8af67a73f8fceca",
      "tree": "b3d6210f2fc17ef3b28c276bc0a38411a1054937",
      "parents": [
        "e65a5c6edbc6ca4853e6076bd81db1a410592a09"
      ],
      "author": {
        "name": "Martin KaFai Lau",
        "email": "martin.lau@kernel.org",
        "time": "Wed Mar 22 14:52:43 2023 -0700"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 19:52:52 2023 -0700"
      },
      "message": "bpf: Use bpf_mem_cache_alloc/free in bpf_local_storage_elem\n\nThis patch uses bpf_mem_alloc for the task and cgroup local storage that\nthe bpf prog can easily get a hold of the storage owner\u0027s PTR_TO_BTF_ID.\neg. bpf_get_current_task_btf() can be used in some of the kmalloc code\npath which will cause deadlock/recursion. bpf_mem_cache_alloc is\ndeadlock free and will solve a legit use case in [1].\n\nFor sk storage, its batch creation benchmark shows a few percent\nregression when the sk create/destroy batch size is larger than 32.\nThe sk creation/destruction happens much more often and\ndepends on external traffic. Considering it is hypothetical\nto be able to cause deadlock with sk storage, it can cross\nthe bridge to use bpf_mem_alloc till a legit (ie. useful)\nuse case comes up.\n\nFor inode storage, bpf_local_storage_destroy() is called before\nwaiting for a rcu gp and its memory cannot be reused immediately.\ninode stays with kmalloc/kfree after the rcu [or tasks_trace] gp.\n\nA \u0027bool bpf_ma\u0027 argument is added to bpf_local_storage_map_alloc().\nOnly task and cgroup storage have \u0027bpf_ma \u003d\u003d true\u0027 which\nmeans to use bpf_mem_cache_alloc/free(). This patch only changes\nselem to use bpf_mem_alloc for task and cgroup. The next patch\nwill change the local_storage to use bpf_mem_alloc also for\ntask and cgroup.\n\nHere is some more details on the changes:\n\n* memory allocation:\nAfter bpf_mem_cache_alloc(), the SDATA(selem)-\u003edata is zero-ed because\nbpf_mem_cache_alloc() could return a reused selem. It is to keep\nthe existing bpf_map_kzalloc() behavior. Only SDATA(selem)-\u003edata\nis zero-ed. SDATA(selem)-\u003edata is the visible part to the bpf prog.\nNo need to use zero_map_value() to do the zeroing because\nbpf_selem_free(..., reuse_now \u003d true) ensures no bpf prog is using\nthe selem before returning the selem through bpf_mem_cache_free().\nFor the internal fields of selem, they will be initialized when\nlinking to the new smap and the new local_storage.\n\nWhen \u0027bpf_ma \u003d\u003d false\u0027, nothing changes in this patch. It will\nstay with the bpf_map_kzalloc().\n\n* memory free:\nThe bpf_selem_free() and bpf_selem_free_rcu() are modified to handle\nthe bpf_ma \u003d\u003d true case.\n\nFor the common selem free path where its owner is also being destroyed,\nthe mem is freed in bpf_local_storage_destroy(), the owner (task\nand cgroup) has gone through a rcu gp. The memory can be reused\nimmediately, so bpf_local_storage_destroy() will call\nbpf_selem_free(..., reuse_now \u003d true) which will do\nbpf_mem_cache_free() for immediate reuse consideration.\n\nAn exception is the delete elem code path. The delete elem code path\nis called from the helper bpf_*_storage_delete() and the syscall\nbpf_map_delete_elem(). This path is an unusual case for local\nstorage because the common use case is to have the local storage\nstaying with its owner life time so that the bpf prog and the user\nspace does not have to monitor the owner\u0027s destruction. For the delete\nelem path, the selem cannot be reused immediately because there could\nbe bpf prog using it. It will call bpf_selem_free(..., reuse_now \u003d false)\nand it will wait for a rcu tasks trace gp before freeing the elem. The\nrcu callback is changed to do bpf_mem_cache_raw_free() instead of kfree().\n\nWhen \u0027bpf_ma \u003d\u003d false\u0027, it should be the same as before.\n__bpf_selem_free() is added to do the kfree_rcu and call_tasks_trace_rcu().\nA few words on the \u0027reuse_now \u003d\u003d true\u0027. When \u0027reuse_now \u003d\u003d true\u0027,\nit is still racing with bpf_local_storage_map_free which is under rcu\nprotection, so it still needs to wait for a rcu gp instead of kfree().\nOtherwise, the selem may be reused by slab for a totally different struct\nwhile the bpf_local_storage_map_free() is still using it (as a\nrcu reader). For the inode case, there may be other rcu readers also.\nIn short, when bpf_ma \u003d\u003d false and reuse_now \u003d\u003d true \u003d\u003e vanilla rcu.\n\n[1]: https://lore.kernel.org/bpf/20221118190109.1512674-1-namhyung@kernel.org/\n\nCc: Namhyung Kim \u003cnamhyung@kernel.org\u003e\nSigned-off-by: Martin KaFai Lau \u003cmartin.lau@kernel.org\u003e\nLink: https://lore.kernel.org/r/20230322215246.1675516-3-martin.lau@linux.dev\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "e65a5c6edbc6ca4853e6076bd81db1a410592a09",
      "tree": "48c2cb3a361df556443d7e73d74a45c1afdbc31d",
      "parents": [
        "e99360762a9cbd93bf1d352e90df5df78daa2f90"
      ],
      "author": {
        "name": "Martin KaFai Lau",
        "email": "martin.lau@kernel.org",
        "time": "Wed Mar 22 14:52:42 2023 -0700"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 19:52:51 2023 -0700"
      },
      "message": "bpf: Add a few bpf mem allocator functions\n\nThis patch adds a few bpf mem allocator functions which will\nbe used in the bpf_local_storage in a later patch.\n\nbpf_mem_cache_alloc_flags(..., gfp_t flags) is added. When the\nflags \u003d\u003d GFP_KERNEL, it will fallback to __alloc(..., GFP_KERNEL).\nbpf_local_storage knows its running context is sleepable (GFP_KERNEL)\nand provides a better guarantee on memory allocation.\n\nbpf_local_storage has some uncommon cases that its selem\ncannot be reused immediately. It handles its own\nrcu_head and goes through a rcu_trace gp and then free it.\nbpf_mem_cache_raw_free() is added for direct free purpose\nwithout leaking the LLIST_NODE_SZ internal knowledge.\nDuring free time, the \u0027struct bpf_mem_alloc *ma\u0027 is no longer\navailable. However, the caller should know if it is\npercpu memory or not and it can call different raw_free functions.\nbpf_local_storage does not support percpu value, so only\nthe non-percpu \u0027bpf_mem_cache_raw_free()\u0027 is added in\nthis patch.\n\nSigned-off-by: Martin KaFai Lau \u003cmartin.lau@kernel.org\u003e\nLink: https://lore.kernel.org/r/20230322215246.1675516-2-martin.lau@linux.dev\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "e99360762a9cbd93bf1d352e90df5df78daa2f90",
      "tree": "4f46a712b5334598eddf869b913f7b887c07178c",
      "parents": [
        "496f4f1b0f8e01baea22e6573f60af8cfd84df48",
        "ffb515c933a9e8000e50b03f76569ffb6ef4d39d"
      ],
      "author": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 17:02:06 2023 -0700"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 17:02:06 2023 -0700"
      },
      "message": "Merge branch \u0027First set of verifier/*.c migrated to inline assembly\u0027\n\nEduard Zingerman says:\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nThis is a follow up for RFC [1]. It migrates a first batch of 38\nverifier/*.c tests to inline assembly and use of ./test_progs for\nactual execution. The migration is done by a python script (see [2]).\n\nEach migrated verifier/xxx.c file is mapped to progs/verifier_xxx.c\nplus an entry in the prog_tests/verifier.c. One patch per each file.\n\nA few patches at the beginning of the patch-set extend test_loader\nwith necessary functionality, mainly:\n- support for tests execution in unprivileged mode;\n- support for test runs for test programs.\n\nMigrated tests could be selected for execution using the following filter:\n\n  ./test_progs -a verifier_*\n\nAn example of the migrated test:\n\n  SEC(\"xdp\")\n  __description(\"XDP pkt read, pkt_data\u0027 \u003e pkt_end, corner case, good access\")\n  __success __retval(0) __flag(BPF_F_ANY_ALIGNMENT)\n  __naked void end_corner_case_good_access_1(void)\n  {\n          asm volatile (\"                                 \\\n          r2 \u003d *(u32*)(r1 + %[xdp_md_data]);              \\\n          r3 \u003d *(u32*)(r1 + %[xdp_md_data_end]);          \\\n          r1 \u003d r2;                                        \\\n          r1 +\u003d 8;                                        \\\n          if r1 \u003e r3 goto l0_%\u003d;                          \\\n          r0 \u003d *(u64*)(r1 - 8);                           \\\n  l0_%\u003d:  r0 \u003d 0;                                         \\\n          exit;                                           \\\n  \"       :\n          : __imm_const(xdp_md_data, offsetof(struct xdp_md, data)),\n            __imm_const(xdp_md_data_end, offsetof(struct xdp_md, data_end))\n          : __clobber_all);\n  }\n\nChanges compared to RFC:\n- test_loader.c is extended to support test program runs;\n- capabilities handling now matches behavior of test_verifier;\n- BPF_ST_MEM instructions are automatically replaced by BPF_STX_MEM\n  instructions to overcome current clang limitations;\n- tests styling updates according to RFC feedback;\n- 38 migrated files are included instead of 1.\n\nI used the following means for testing:\n- migration tool itself has a set of self-tests;\n- migrated tests are passing;\n- manually compared each old/new file side-by-side.\n\nWhile doing side-by-side comparison I\u0027ve noted a few defects in the\noriginal tests:\n- and.c:\n  - One of the jump targets is off by one;\n  - BPF_ST_MEM wrong OFF/IMM ordering;\n- array_access.c:\n  - BPF_ST_MEM wrong OFF/IMM ordering;\n- value_or_null.c:\n  - BPF_ST_MEM wrong OFF/IMM ordering.\n\nThese defects would be addressed separately.\n\n[1] RFC\n    https://lore.kernel.org/bpf/20230123145148.2791939-1-eddyz87@gmail.com/\n[2] Migration tool\n    https://github.com/eddyz87/verifier-tests-migrator\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "ffb515c933a9e8000e50b03f76569ffb6ef4d39d",
      "tree": "4f46a712b5334598eddf869b913f7b887c07178c",
      "parents": [
        "a8036aea2d4f412c98a5fdbc0c987fa8a3c023ed"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Sat Mar 25 04:55:23 2023 +0200"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 17:02:06 2023 -0700"
      },
      "message": "selftests/bpf: verifier/xdp.c converted to inline assembly\n\nTest verifier/xdp.c automatically converted to use inline assembly.\n\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230325025524.144043-43-eddyz87@gmail.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "a8036aea2d4f412c98a5fdbc0c987fa8a3c023ed",
      "tree": "59f0b2c8c5305f61c7bbfdce48e83cc21e8bd850",
      "parents": [
        "d15f5b68b63ad7f47e05aba33c4794fb3bfaf1af"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Sat Mar 25 04:55:22 2023 +0200"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 17:02:06 2023 -0700"
      },
      "message": "selftests/bpf: verifier/xadd.c converted to inline assembly\n\nTest verifier/xadd.c automatically converted to use inline assembly.\n\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230325025524.144043-42-eddyz87@gmail.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "d15f5b68b63ad7f47e05aba33c4794fb3bfaf1af",
      "tree": "a5c1014b2cb66466d352a1aa542131f29f99e3fa",
      "parents": [
        "d330528617b78ae893c405bf06c6c604bd2e6357"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Sat Mar 25 04:55:21 2023 +0200"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 17:02:06 2023 -0700"
      },
      "message": "selftests/bpf: verifier/var_off.c converted to inline assembly\n\nTest verifier/var_off.c automatically converted to use inline assembly.\n\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230325025524.144043-41-eddyz87@gmail.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "d330528617b78ae893c405bf06c6c604bd2e6357",
      "tree": "a0c23dd91f598d5963066305c737191a41ca61f0",
      "parents": [
        "8f59e87a3bc6a5618f0ed459f1d36838c16bcad7"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Sat Mar 25 04:55:20 2023 +0200"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 17:02:06 2023 -0700"
      },
      "message": "selftests/bpf: verifier/value_or_null.c converted to inline assembly\n\nTest verifier/value_or_null.c automatically converted to use inline assembly.\n\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230325025524.144043-40-eddyz87@gmail.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "8f59e87a3bc6a5618f0ed459f1d36838c16bcad7",
      "tree": "e403ae562cc1cf8bc7eb7f47bee9d960d0a98a50",
      "parents": [
        "033914942da4696dcd9009ba88bc1bba06706549"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Sat Mar 25 04:55:19 2023 +0200"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 17:02:06 2023 -0700"
      },
      "message": "selftests/bpf: verifier/value.c converted to inline assembly\n\nTest verifier/value.c automatically converted to use inline assembly.\n\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230325025524.144043-39-eddyz87@gmail.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "033914942da4696dcd9009ba88bc1bba06706549",
      "tree": "356286cfab1ee0a1b50500d8b9e6fc80056456e1",
      "parents": [
        "ab839a58194633bd1c5ff42e6a9de87a746a67aa"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Sat Mar 25 04:55:18 2023 +0200"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 17:02:06 2023 -0700"
      },
      "message": "selftests/bpf: verifier/value_adj_spill.c converted to inline assembly\n\nTest verifier/value_adj_spill.c automatically converted to use inline assembly.\n\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230325025524.144043-38-eddyz87@gmail.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "ab839a58194633bd1c5ff42e6a9de87a746a67aa",
      "tree": "bbf9c161b7f585a79038aa7d4e88e381b5252e3f",
      "parents": [
        "edff37b2f28f5c24f628981d0f26ca2fcd7e2ad5"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Sat Mar 25 04:55:17 2023 +0200"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 17:02:05 2023 -0700"
      },
      "message": "selftests/bpf: verifier/uninit.c converted to inline assembly\n\nTest verifier/uninit.c automatically converted to use inline assembly.\n\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230325025524.144043-37-eddyz87@gmail.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "edff37b2f28f5c24f628981d0f26ca2fcd7e2ad5",
      "tree": "e303cf56cb63152ef07abe612752e67e1eae52d9",
      "parents": [
        "f4fe3cfe6c3ac60a6ec086a291b1c0f59e7daaa2"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Sat Mar 25 04:55:16 2023 +0200"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 17:02:05 2023 -0700"
      },
      "message": "selftests/bpf: verifier/stack_ptr.c converted to inline assembly\n\nTest verifier/stack_ptr.c automatically converted to use inline assembly.\n\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230325025524.144043-36-eddyz87@gmail.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "f4fe3cfe6c3ac60a6ec086a291b1c0f59e7daaa2",
      "tree": "b4fec5e8f23343880ff029f06d58086a7ae1aa38",
      "parents": [
        "b7e4203086eb4d85aa7bccd7f33c2835b34778d6"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Sat Mar 25 04:55:15 2023 +0200"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 17:02:05 2023 -0700"
      },
      "message": "selftests/bpf: verifier/spill_fill.c converted to inline assembly\n\nTest verifier/spill_fill.c automatically converted to use inline assembly.\n\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230325025524.144043-35-eddyz87@gmail.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "b7e4203086eb4d85aa7bccd7f33c2835b34778d6",
      "tree": "f7470938ad539fdf2a7fc516edeb13e6ef150b23",
      "parents": [
        "18cdc2b531fbe13450c51132a5b511c670c77585"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Sat Mar 25 04:55:14 2023 +0200"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 17:02:05 2023 -0700"
      },
      "message": "selftests/bpf: verifier/ringbuf.c converted to inline assembly\n\nTest verifier/ringbuf.c automatically converted to use inline assembly.\n\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230325025524.144043-34-eddyz87@gmail.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "18cdc2b531fbe13450c51132a5b511c670c77585",
      "tree": "c2bbd4347927ec83d87b99f7c5ba77bd64e2746b",
      "parents": [
        "5a77a01f3320562db51dfdd24b2921768637daf2"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Sat Mar 25 04:55:13 2023 +0200"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 17:02:05 2023 -0700"
      },
      "message": "selftests/bpf: verifier/raw_tp_writable.c converted to inline assembly\n\nTest verifier/raw_tp_writable.c automatically converted to use inline assembly.\n\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230325025524.144043-33-eddyz87@gmail.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "5a77a01f3320562db51dfdd24b2921768637daf2",
      "tree": "a0c1e58a79198587f0a4c1a7e1ca0c392d5ee1fa",
      "parents": [
        "65428312e38d896ce101ee3489403cff320d9b74"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Sat Mar 25 04:55:12 2023 +0200"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 17:02:05 2023 -0700"
      },
      "message": "selftests/bpf: verifier/raw_stack.c converted to inline assembly\n\nTest verifier/raw_stack.c automatically converted to use inline assembly.\n\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230325025524.144043-32-eddyz87@gmail.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "65428312e38d896ce101ee3489403cff320d9b74",
      "tree": "f90a902c61eaca70b71176d1df8ceef143c693bb",
      "parents": [
        "ade3f08fc236ce8a5f00c1ffaf85ba42aa18ded4"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Sat Mar 25 04:55:11 2023 +0200"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 17:02:05 2023 -0700"
      },
      "message": "selftests/bpf: verifier/meta_access.c converted to inline assembly\n\nTest verifier/meta_access.c automatically converted to use inline assembly.\n\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230325025524.144043-31-eddyz87@gmail.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "ade3f08fc236ce8a5f00c1ffaf85ba42aa18ded4",
      "tree": "5b8e5cf73375eef30c0af08478798c2ccf62dea8",
      "parents": [
        "05e474ecbb56a5fadea6b36b7aa7d8d237aea064"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Sat Mar 25 04:55:10 2023 +0200"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 17:02:05 2023 -0700"
      },
      "message": "selftests/bpf: verifier/masking.c converted to inline assembly\n\nTest verifier/masking.c automatically converted to use inline assembly.\n\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230325025524.144043-30-eddyz87@gmail.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "05e474ecbb56a5fadea6b36b7aa7d8d237aea064",
      "tree": "d099aba80ea0347d1061886bf0c3c642b5f38312",
      "parents": [
        "caf345cf12073eb5905b03c3c5f905cc0964dc6c"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Sat Mar 25 04:55:09 2023 +0200"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 17:02:05 2023 -0700"
      },
      "message": "selftests/bpf: verifier/map_ret_val.c converted to inline assembly\n\nTest verifier/map_ret_val.c automatically converted to use inline assembly.\n\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230325025524.144043-29-eddyz87@gmail.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "caf345cf12073eb5905b03c3c5f905cc0964dc6c",
      "tree": "04d11c395a0f77e3d50a4508a624d8832540da98",
      "parents": [
        "583c7ce5be093277ef1691f35d9bec5ef9934e24"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Sat Mar 25 04:55:08 2023 +0200"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 17:02:04 2023 -0700"
      },
      "message": "selftests/bpf: verifier/map_ptr.c converted to inline assembly\n\nTest verifier/map_ptr.c automatically converted to use inline assembly.\n\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230325025524.144043-28-eddyz87@gmail.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "583c7ce5be093277ef1691f35d9bec5ef9934e24",
      "tree": "7183fdfb63a9a8ebb08bdbdf60fceff8c121e066",
      "parents": [
        "e297875580662f2fdcde1cba4ea28bf70ea2ca49"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Sat Mar 25 04:55:07 2023 +0200"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 17:02:04 2023 -0700"
      },
      "message": "selftests/bpf: verifier/leak_ptr.c converted to inline assembly\n\nTest verifier/leak_ptr.c automatically converted to use inline assembly.\n\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230325025524.144043-27-eddyz87@gmail.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "e297875580662f2fdcde1cba4ea28bf70ea2ca49",
      "tree": "ea8349ac17695711403bb13aebcabc9ec573478c",
      "parents": [
        "01481e67dd4d1c2c62eb6a506a5f4803ee50f8a6"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Sat Mar 25 04:55:06 2023 +0200"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 17:02:04 2023 -0700"
      },
      "message": "selftests/bpf: verifier/ld_ind.c converted to inline assembly\n\nTest verifier/ld_ind.c automatically converted to use inline assembly.\n\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230325025524.144043-26-eddyz87@gmail.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "01481e67dd4d1c2c62eb6a506a5f4803ee50f8a6",
      "tree": "dec3c2198cf68db5cc194a024b6415298893002a",
      "parents": [
        "ecc424827b775860119f5a5e2c521d7485bcc74f"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Sat Mar 25 04:55:05 2023 +0200"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 17:02:04 2023 -0700"
      },
      "message": "selftests/bpf: verifier/int_ptr.c converted to inline assembly\n\nTest verifier/int_ptr.c automatically converted to use inline assembly.\n\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230325025524.144043-25-eddyz87@gmail.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "ecc424827b775860119f5a5e2c521d7485bcc74f",
      "tree": "4fe7d88870939ded8493f5cff4affa5c1987bb2e",
      "parents": [
        "77aa2563cb44a6241990cf4f082b55ee6f0a0623"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Sat Mar 25 04:55:04 2023 +0200"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 17:02:04 2023 -0700"
      },
      "message": "selftests/bpf: verifier/helper_value_access.c converted to inline assembly\n\nTest verifier/helper_value_access.c automatically converted to use inline assembly.\n\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230325025524.144043-24-eddyz87@gmail.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "77aa2563cb44a6241990cf4f082b55ee6f0a0623",
      "tree": "a0e893cff043cf9f951ef448a7d034b0684c97ea",
      "parents": [
        "fb179fe69e6a7bf66232d72a77f53ec10c026ee7"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Sat Mar 25 04:55:03 2023 +0200"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 17:02:04 2023 -0700"
      },
      "message": "selftests/bpf: verifier/helper_restricted.c converted to inline assembly\n\nTest verifier/helper_restricted.c automatically converted to use inline assembly.\n\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230325025524.144043-23-eddyz87@gmail.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "fb179fe69e6a7bf66232d72a77f53ec10c026ee7",
      "tree": "012c160fd713803e0685fda5867dd14e384c02ff",
      "parents": [
        "b37d776b431ec056075feeeaddcdee4512c522f6"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Sat Mar 25 04:55:02 2023 +0200"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 17:02:04 2023 -0700"
      },
      "message": "selftests/bpf: verifier/helper_packet_access.c converted to inline assembly\n\nTest verifier/helper_packet_access.c automatically converted to use inline assembly.\n\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230325025524.144043-22-eddyz87@gmail.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "b37d776b431ec056075feeeaddcdee4512c522f6",
      "tree": "e31e92b81c65e9d605275d6df9ee53f0f976ba4a",
      "parents": [
        "9553de70a8412a07b16703449b4b4c4e5d37c388"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Sat Mar 25 04:55:01 2023 +0200"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 17:02:04 2023 -0700"
      },
      "message": "selftests/bpf: verifier/helper_access_var_len.c converted to inline assembly\n\nTest verifier/helper_access_var_len.c automatically converted to use inline assembly.\n\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230325025524.144043-21-eddyz87@gmail.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "9553de70a8412a07b16703449b4b4c4e5d37c388",
      "tree": "28bff555a2677614cd044d6daa1acbb18f8641c9",
      "parents": [
        "01a0925531a4ec962c88ceccb464c1c1178e9d81"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Sat Mar 25 04:55:00 2023 +0200"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 17:02:04 2023 -0700"
      },
      "message": "selftests/bpf: verifier/div_overflow.c converted to inline assembly\n\nTest verifier/div_overflow.c automatically converted to use inline assembly.\n\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230325025524.144043-20-eddyz87@gmail.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "01a0925531a4ec962c88ceccb464c1c1178e9d81",
      "tree": "91eaa7801747737f90b78e2bd161eceb06608918",
      "parents": [
        "84988478fb2c9068c6adf107eb630c48c00ff690"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Sat Mar 25 04:54:59 2023 +0200"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 17:02:04 2023 -0700"
      },
      "message": "selftests/bpf: verifier/div0.c converted to inline assembly\n\nTest verifier/div0.c automatically converted to use inline assembly.\n\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230325025524.144043-19-eddyz87@gmail.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "84988478fb2c9068c6adf107eb630c48c00ff690",
      "tree": "7da3744a37ec5f7cfa586e06ea2f9bd7f51a74e1",
      "parents": [
        "a58475a98903c756a7f731cffdf20242ed17b9b0"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Sat Mar 25 04:54:58 2023 +0200"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 17:02:03 2023 -0700"
      },
      "message": "selftests/bpf: verifier/direct_stack_access_wraparound.c converted to inline assembly\n\nTest verifier/direct_stack_access_wraparound.c automatically converted to use inline assembly.\n\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230325025524.144043-18-eddyz87@gmail.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "a58475a98903c756a7f731cffdf20242ed17b9b0",
      "tree": "2f804eb58ba1d8b787e55c6c8365c3e16e203704",
      "parents": [
        "a2777eaad5d9b7b06917d5bd3e786a1733e9dc3c"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Sat Mar 25 04:54:57 2023 +0200"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 17:02:03 2023 -0700"
      },
      "message": "selftests/bpf: verifier/ctx_sk_msg.c converted to inline assembly\n\nTest verifier/ctx_sk_msg.c automatically converted to use inline assembly.\n\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230325025524.144043-17-eddyz87@gmail.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "a2777eaad5d9b7b06917d5bd3e786a1733e9dc3c",
      "tree": "fa8e86cd5447ce166ff55e3361999c848cc9de66",
      "parents": [
        "8f16f3c07e460f81ff6f4d673c7edd413db19ffe"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Sat Mar 25 04:54:56 2023 +0200"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 17:02:03 2023 -0700"
      },
      "message": "selftests/bpf: verifier/const_or.c converted to inline assembly\n\nTest verifier/const_or.c automatically converted to use inline assembly.\n\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230325025524.144043-16-eddyz87@gmail.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "8f16f3c07e460f81ff6f4d673c7edd413db19ffe",
      "tree": "86f9e9b8a40e2114c49e9f88d68b25a6a326fd0e",
      "parents": [
        "b1b6372535c0cc0cce4870b07a0938309f3a5d37"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Sat Mar 25 04:54:55 2023 +0200"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 17:02:03 2023 -0700"
      },
      "message": "selftests/bpf: verifier/cgroup_storage.c converted to inline assembly\n\nTest verifier/cgroup_storage.c automatically converted to use inline assembly.\n\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230325025524.144043-15-eddyz87@gmail.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "b1b6372535c0cc0cce4870b07a0938309f3a5d37",
      "tree": "4ff7e3bbef6cb45a393e3b3b80b1e1201e1e136b",
      "parents": [
        "047687a7f494d45198f112b51e72228aa054732c"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Sat Mar 25 04:54:54 2023 +0200"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 17:02:03 2023 -0700"
      },
      "message": "selftests/bpf: verifier/cgroup_skb.c converted to inline assembly\n\nTest verifier/cgroup_skb.c automatically converted to use inline assembly.\n\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230325025524.144043-14-eddyz87@gmail.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "047687a7f494d45198f112b51e72228aa054732c",
      "tree": "685c992952e89943149f0af86bbf02369fa2405d",
      "parents": [
        "2f2047c22cda4fbbe6bb889cc6c5450cd90688f8"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Sat Mar 25 04:54:53 2023 +0200"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 17:02:03 2023 -0700"
      },
      "message": "selftests/bpf: verifier/cgroup_inv_retcode.c converted to inline assembly\n\nTest verifier/cgroup_inv_retcode.c automatically converted to use inline assembly.\n\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230325025524.144043-13-eddyz87@gmail.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "2f2047c22cda4fbbe6bb889cc6c5450cd90688f8",
      "tree": "2be00e187a1ee742ea350b9bfc836e868f1dc1a2",
      "parents": [
        "b14a702afd0d2da746294ed6070668b839a77793"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Sat Mar 25 04:54:52 2023 +0200"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 17:02:03 2023 -0700"
      },
      "message": "selftests/bpf: verifier/cfg.c converted to inline assembly\n\nTest verifier/cfg.c automatically converted to use inline assembly.\n\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230325025524.144043-12-eddyz87@gmail.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "b14a702afd0d2da746294ed6070668b839a77793",
      "tree": "01b14879687303df5e746dc4e4d541460279e0a2",
      "parents": [
        "7605f94b3492328f37815c9b5749ffba5c76da84"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Sat Mar 25 04:54:51 2023 +0200"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 17:02:03 2023 -0700"
      },
      "message": "selftests/bpf: verifier/bounds_mix_sign_unsign.c converted to inline assembly\n\nTest verifier/bounds_mix_sign_unsign.c automatically converted to use inline assembly.\n\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230325025524.144043-11-eddyz87@gmail.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "7605f94b3492328f37815c9b5749ffba5c76da84",
      "tree": "c51b31f5ade33ed049e5759d9abeebad539c86d6",
      "parents": [
        "0ccbe4956d6c20fa0a09a72d2033c49f0976ed6c"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Sat Mar 25 04:54:50 2023 +0200"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 17:02:03 2023 -0700"
      },
      "message": "selftests/bpf: verifier/bounds_deduction.c converted to inline assembly\n\nTest verifier/bounds_deduction.c automatically converted to use inline assembly.\n\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230325025524.144043-10-eddyz87@gmail.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "0ccbe4956d6c20fa0a09a72d2033c49f0976ed6c",
      "tree": "ecbda3d816c81dc112918c753706036a399f962e",
      "parents": [
        "a3c830ae02093315a4526fa74fb7d1f66989d895"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Sat Mar 25 04:54:49 2023 +0200"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 17:02:02 2023 -0700"
      },
      "message": "selftests/bpf: verifier/basic_stack.c converted to inline assembly\n\nTest verifier/basic_stack.c automatically converted to use inline assembly.\n\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230325025524.144043-9-eddyz87@gmail.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "a3c830ae02093315a4526fa74fb7d1f66989d895",
      "tree": "5229973b7d8fb1d7f61efadf31c88d76cc7014c9",
      "parents": [
        "9d0f1568ad5ba29feddc0897e2ccc7d6de6713c8"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Sat Mar 25 04:54:48 2023 +0200"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 17:02:02 2023 -0700"
      },
      "message": "selftests/bpf: verifier/array_access.c converted to inline assembly\n\nTest verifier/array_access.c automatically converted to use inline assembly.\n\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230325025524.144043-8-eddyz87@gmail.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "9d0f1568ad5ba29feddc0897e2ccc7d6de6713c8",
      "tree": "dc6c55b9013abab4a60df41a98a17257f1f24e24",
      "parents": [
        "55108621a35e42f773de5d4b20cf7a14d6d53503"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Sat Mar 25 04:54:47 2023 +0200"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 17:02:02 2023 -0700"
      },
      "message": "selftests/bpf: verifier/and.c converted to inline assembly\n\nTest verifier/and.c automatically converted to use inline assembly.\n\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230325025524.144043-7-eddyz87@gmail.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "55108621a35e42f773de5d4b20cf7a14d6d53503",
      "tree": "4fef08a44c347e3788962af894c235e41f45046d",
      "parents": [
        "19a8e06f5f9155caf1a5577a0f7969eee13d0cbb"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Sat Mar 25 04:54:46 2023 +0200"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 17:02:02 2023 -0700"
      },
      "message": "selftests/bpf: prog_tests entry point for migrated test_verifier tests\n\nprog_tests/verifier.c would be used as a host for verifier/*.c tests\nmigrated to use inline assembly and run from test_progs.\n\nThe run_test_aux() function mimics the test_verifier behavior\ndropping CAP_SYS_ADMIN upon entry.\n\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230325025524.144043-6-eddyz87@gmail.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "19a8e06f5f9155caf1a5577a0f7969eee13d0cbb",
      "tree": "3fd90bf6fdb4bfd908146d024f130bf919ab4e39",
      "parents": [
        "1d56ade032a49b2042f43b3f6bdf116928064267"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Sat Mar 25 04:54:45 2023 +0200"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 17:02:02 2023 -0700"
      },
      "message": "selftests/bpf: Tests execution support for test_loader.c\n\nExtends test_loader.c:test_loader__run_subtests() by allowing to\nexecute BPF_PROG_TEST_RUN bpf command for selected programs.\nThis is similar to functionality provided by test_verifier.\n\nAdds the following new attributes controlling test_loader behavior:\n\n  __retval(...)\n  __retval_unpriv(...)\n\n* If any of these attributes is present, the annotated program would\n  be executed using libbpf\u0027s bpf_prog_test_run_opts() function.\n* If __retval is present, the test run would be done for program\n  loaded in privileged mode.\n* If __retval_unpriv is present, the test run would be done for\n  program loaded in unprivileged mode.\n* To mimic test_verifier behavior, the actual run is initiated in\n  privileged mode.\n* The value returned by a test run is compared against retval\n  parameter.\n\nThe retval attribute takes one of the following parameters:\n- a decimal number\n- a hexadecimal number (must start from \u00270x\u0027)\n- any of a three special literals (provided for compatibility with\n  test_verifier):\n  - INT_MIN\n  - POINTER_VALUE\n  - TEST_DATA_LEN\n\nAn example of the attribute usage:\n\n  SEC(\"socket\")\n  __description(\"return 42\")\n  __success __success_unpriv __retval(42)\n  __naked void the_42_test(void)\n  {\n          asm volatile (\"                                 \\\n          r0 \u003d 42;                                        \\\n          exit;                                           \\\n  \"       ::: __clobber_all);\n  }\n\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230325025524.144043-5-eddyz87@gmail.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "1d56ade032a49b2042f43b3f6bdf116928064267",
      "tree": "3dd1e6fd69333ea0b42f6b1621a4270327138396",
      "parents": [
        "207b1ba3019100d862931e97b49f76ff1e0a89f2"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Sat Mar 25 04:54:44 2023 +0200"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 17:02:02 2023 -0700"
      },
      "message": "selftests/bpf: Unprivileged tests for test_loader.c\n\nExtends test_loader.c:test_loader__run_subtests() by allowing to\nexecute tests in unprivileged mode, similar to test_verifier.c.\n\nAdds the following new attributes controlling test_loader behavior:\n\n  __msg_unpriv\n  __success_unpriv\n  __failure_unpriv\n\n* If any of these attributes is present the test would be loaded in\n  unprivileged mode.\n* If only \"privileged\" attributes are present the test would be loaded\n  only in privileged mode.\n* If both \"privileged\" and \"unprivileged\" attributes are present the\n  test would be loaded in both modes.\n* If test has to be executed in both modes, __msg(text) is specified\n  and __msg_unpriv is not specified the behavior is the same as if\n  __msg_unpriv(text) is specified.\n* For test filtering purposes the name of the program loaded in\n  unprivileged mode is derived from the usual program name by adding\n  `@unpriv\u0027 suffix.\n\nAlso adds attribute \u0027__description\u0027. This attribute specifies text to\nbe used instead of a program name for display and filtering purposes.\n\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230325025524.144043-4-eddyz87@gmail.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "207b1ba3019100d862931e97b49f76ff1e0a89f2",
      "tree": "e3be60c0708851eb931e9b300bae9f86aa5ddf33",
      "parents": [
        "3e5329e193f463e6aaf98c33f7cb1308160880ab"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Sat Mar 25 04:54:43 2023 +0200"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 17:02:02 2023 -0700"
      },
      "message": "selftests/bpf: __imm_insn \u0026 __imm_const macro for bpf_misc.h\n\nAdd two convenience macro for BPF test cases,\nallowing the following usage:\n\n  #include \u003clinux/filter.h\u003e\n\n  ...\n  asm volatile (\n  ...\n  \".8byte %[raw_insn];\"\n  ...\n  \"r1 +\u003d %[st_foo_offset];\"\n  ...\n  :\n  : __imm_insn(raw_insn, BPF_RAW_INSN(...)),\n    __imm_const(st_foo_offset, offsetof(struct st, foo))\n  : __clobber_all);\n\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230325025524.144043-3-eddyz87@gmail.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "3e5329e193f463e6aaf98c33f7cb1308160880ab",
      "tree": "575ac69bdf06d6d4c205fef5ca0fe044bf138094",
      "parents": [
        "496f4f1b0f8e01baea22e6573f60af8cfd84df48"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Sat Mar 25 04:54:42 2023 +0200"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 17:02:02 2023 -0700"
      },
      "message": "selftests/bpf: Report program name on parse_test_spec error\n\nChange test_loader.c:run_subtest() behavior to show BPF program name\nwhen test spec for that program can\u0027t be parsed.\n\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230325025524.144043-2-eddyz87@gmail.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "496f4f1b0f8e01baea22e6573f60af8cfd84df48",
      "tree": "60c4e0f8858c72e4dd92a38cf1e704e46ebe8252",
      "parents": [
        "55fbae05476df65e5eee8be54f61d0257af0240b",
        "6c831c4684124a544f73f7c9b83bc7b2eb0b23d3"
      ],
      "author": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 16:56:22 2023 -0700"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 16:56:22 2023 -0700"
      },
      "message": "Merge branch \u0027Don\u0027t invoke KPTR_REF destructor on NULL xchg\u0027\n\nDavid Vernet says:\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nWhen a map value is being freed, we loop over all of the fields of the\ncorresponding BPF object and issue the appropriate cleanup calls\ncorresponding to the field\u0027s type. If the field is a referenced kptr, we\natomically xchg the value out of the map, and invoke the kptr\u0027s\ndestructor on whatever was there before.\n\nCurrently, we always invoke the destructor (or bpf_obj_drop() for a\nlocal kptr) on any kptr, including if no value was xchg\u0027d out of the\nmap. This means that any function serving as the kptr\u0027s KF_RELEASE\ndestructor must always treat the argument as possibly NULL, and we\ninvoke unnecessary (and seemingly unsafe) cleanup logic for the local\nkptr path as well.\n\nThis is an odd requirement -- KF_RELEASE kfuncs that are invoked by BPF\nprograms do not have this restriction, and the verifier will fail to\nload the program if the register containing the to-be-released type has\nany untrusted modifiers (e.g. PTR_UNTRUSTED or PTR_MAYBE_NULL). So as to\nsimplify the expectations required for a KF_RELEASE kfunc, this patch\nset updates the KPTR_REF destructor logic to only be invoked when a\nnon-NULL value is xchg\u0027d out of the map.\n\nAdditionally, the patch removes now-unnecessary KF_RELEASE calls from\nseveral kfuncs, and finally, updates the verifier to have KF_RELEASE\nautomatically imply KF_TRUSTED_ARGS. This restriction was already\nimplicitly happening because of the aforementioned logic in the verifier\nto reject any regs with untrusted modifiers, and to enforce that\nKF_RELEASE args are passed with a 0 offset. This change just updates the\nbehavior to match that of other trusted args. This patch is left to the\nend of the series in case it happens to be controversial, as it arguably\nis slightly orthogonal to the purpose of the rest of the series.\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "6c831c4684124a544f73f7c9b83bc7b2eb0b23d3",
      "tree": "60c4e0f8858c72e4dd92a38cf1e704e46ebe8252",
      "parents": [
        "fb2211a57c110b4ced3cb7f8570bd7246acf2d04"
      ],
      "author": {
        "name": "David Vernet",
        "email": "void@manifault.com",
        "time": "Sat Mar 25 16:31:46 2023 -0500"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 16:56:22 2023 -0700"
      },
      "message": "bpf: Treat KF_RELEASE kfuncs as KF_TRUSTED_ARGS\n\nKF_RELEASE kfuncs are not currently treated as having KF_TRUSTED_ARGS,\neven though they have a superset of the requirements of KF_TRUSTED_ARGS.\nLike KF_TRUSTED_ARGS, KF_RELEASE kfuncs require a 0-offset argument, and\ndon\u0027t allow NULL-able arguments. Unlike KF_TRUSTED_ARGS which require\n_either_ an argument with ref_obj_id \u003e 0, _or_ (ref-\u003etype \u0026\nBPF_REG_TRUSTED_MODIFIERS) (and no unsafe modifiers allowed), KF_RELEASE\nonly allows for ref_obj_id \u003e 0.  Because KF_RELEASE today doesn\u0027t\nautomatically imply KF_TRUSTED_ARGS, some of these requirements are\nenforced in different ways that can make the behavior of the verifier\nfeel unpredictable. For example, a KF_RELEASE kfunc with a NULL-able\nargument will currently fail in the verifier with a message like, \"arg#0\nis ptr_or_null_ expected ptr_ or socket\" rather than \"Possibly NULL\npointer passed to trusted arg0\". Our intention is the same, but the\nsemantics are different due to implemenetation details that kfunc authors\nand BPF program writers should not need to care about.\n\nLet\u0027s make the behavior of the verifier more consistent and intuitive by\nhaving KF_RELEASE kfuncs imply the presence of KF_TRUSTED_ARGS. Our\neventual goal is to have all kfuncs assume KF_TRUSTED_ARGS by default\nanyways, so this takes us a step in that direction.\n\nNote that it does not make sense to assume KF_TRUSTED_ARGS for all\nKF_ACQUIRE kfuncs. KF_ACQUIRE kfuncs can have looser semantics than\nKF_RELEASE, with e.g. KF_RCU | KF_RET_NULL. We may want to have\nKF_ACQUIRE imply KF_TRUSTED_ARGS _unless_ KF_RCU is specified, but that\ncan be left to another patch set, and there are no such subtleties to\naddress for KF_RELEASE.\n\nSigned-off-by: David Vernet \u003cvoid@manifault.com\u003e\nLink: https://lore.kernel.org/r/20230325213144.486885-4-void@manifault.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "fb2211a57c110b4ced3cb7f8570bd7246acf2d04",
      "tree": "1d94a550acc6b2ee4a15129002a1a3bbbbea80b3",
      "parents": [
        "1431d0b584a673ea690c88a5f7e1aedd9caf0e84"
      ],
      "author": {
        "name": "David Vernet",
        "email": "void@manifault.com",
        "time": "Sat Mar 25 16:31:45 2023 -0500"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 16:56:22 2023 -0700"
      },
      "message": "bpf: Remove now-unnecessary NULL checks for KF_RELEASE kfuncs\n\nNow that we\u0027re not invoking kfunc destructors when the kptr in a map was\nNULL, we no longer require NULL checks in many of our KF_RELEASE kfuncs.\nThis patch removes those NULL checks.\n\nSigned-off-by: David Vernet \u003cvoid@manifault.com\u003e\nLink: https://lore.kernel.org/r/20230325213144.486885-3-void@manifault.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "1431d0b584a673ea690c88a5f7e1aedd9caf0e84",
      "tree": "52176b94e675a53d6b00772fdd112605e443391d",
      "parents": [
        "55fbae05476df65e5eee8be54f61d0257af0240b"
      ],
      "author": {
        "name": "David Vernet",
        "email": "void@manifault.com",
        "time": "Sat Mar 25 16:31:42 2023 -0500"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Sat Mar 25 16:56:22 2023 -0700"
      },
      "message": "bpf: Only invoke kptr dtor following non-NULL xchg\n\nWhen a map value is being freed, we loop over all of the fields of the\ncorresponding BPF object and issue the appropriate cleanup calls\ncorresponding to the field\u0027s type. If the field is a referenced kptr, we\natomically xchg the value out of the map, and invoke the kptr\u0027s\ndestructor on whatever was there before (or bpf_obj_drop() it if it was\na local kptr).\n\nCurrently, we always invoke the destructor (either bpf_obj_drop() or the\nkptr\u0027s registered destructor) on any KPTR_REF-type field in a map, even\nif there wasn\u0027t a value in the map. This means that any function serving\nas the kptr\u0027s KF_RELEASE destructor must always treat the argument as\npossibly NULL, as the following can and regularly does happen:\n\nvoid *xchgd_field;\n\n/* No value was in the map, so xchgd_field is NULL */\nxchgd_field \u003d (void *)xchg(unsigned long *field_ptr, 0);\nfield-\u003ekptr.dtor(xchgd_field);\n\nThese are odd semantics to impose on KF_RELEASE kfuncs -- BPF programs\nare prohibited by the verifier from passing NULL pointers to KF_RELEASE\nkfuncs, so it doesn\u0027t make sense to require this of BPF programs, but\nnot the main kernel destructor path. It\u0027s also unnecessary to invoke any\ncleanup logic for local kptrs. If there is no object there, there\u0027s\nnothing to drop.\n\nSo as to allow KF_RELEASE kfuncs to fully assume that an argument is\nnon-NULL, this patch updates a KPTR_REF\u0027s destructor to only be invoked\nwhen a non-NULL value is xchg\u0027d out of the kptr map field.\n\nSigned-off-by: David Vernet \u003cvoid@manifault.com\u003e\nLink: https://lore.kernel.org/r/20230325213144.486885-2-void@manifault.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "55fbae05476df65e5eee8be54f61d0257af0240b",
      "tree": "32a0ed63009db5289dd0d5082e0b27c8440170a4",
      "parents": [
        "226bc6ae6405c46a6e9865835c36a1d45fc0b3bf"
      ],
      "author": {
        "name": "Martin KaFai Lau",
        "email": "martin.lau@kernel.org",
        "time": "Fri Mar 24 11:42:41 2023 -0700"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Fri Mar 24 12:40:47 2023 -0700"
      },
      "message": "bpf: Check IS_ERR for the bpf_map_get() return value\n\nThis patch fixes a mistake in checking NULL instead of\nchecking IS_ERR for the bpf_map_get() return value.\n\nIt also fixes the return value in link_update_map() from -EINVAL\nto PTR_ERR(*_map).\n\nReported-by: syzbot+71ccc0fe37abb458406b@syzkaller.appspotmail.com\nFixes: 68b04864ca42 (\"bpf: Create links for BPF struct_ops maps.\")\nFixes: aef56f2e918b (\"bpf: Update the struct_ops of a bpf_link.\")\nSigned-off-by: Martin KaFai Lau \u003cmartin.lau@kernel.org\u003e\nAcked-by: Kui-Feng Lee \u003ckuifeng@meta.com\u003e\nAcked-by: Stanislav Fomichev \u003csdf@google.com\u003e\nLink: https://lore.kernel.org/r/20230324184241.1387437-1-martin.lau@linux.dev\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "226bc6ae6405c46a6e9865835c36a1d45fc0b3bf",
      "tree": "4122c213c03490408526d5efbce58bc853c742f4",
      "parents": [
        "b63cbc490e18d893632929b8faa55bb28da3fcd4",
        "06da9f3bd6418e06719f15340202996f7a4c258d"
      ],
      "author": {
        "name": "Martin KaFai Lau",
        "email": "martin.lau@kernel.org",
        "time": "Wed Mar 22 22:49:40 2023 -0700"
      },
      "committer": {
        "name": "Martin KaFai Lau",
        "email": "martin.lau@kernel.org",
        "time": "Wed Mar 22 22:53:27 2023 -0700"
      },
      "message": "Merge branch \u0027Transit between BPF TCP congestion controls.\u0027\n\nKui-Feng Lee says:\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nMajor changes:\n\n - Create bpf_links in the kernel for BPF struct_ops to register and\n   unregister it.\n\n - Enables switching between implementations of bpf-tcp-cc under a\n   name instantly by replacing the backing struct_ops map of a\n   bpf_link.\n\nPreviously, BPF struct_ops didn\u0027t go off, as even when the user\nprogram creating it was terminated, none of these ever were pinned.\nFor instance, the TCP congestion control subsystem indirectly\nmaintains a reference count on the struct_ops of any registered BPF\nimplemented algorithm. Thus, the algorithm won\u0027t be deactivated until\nsomeone deliberately unregisters it.  For compatibility with other BPF\nprograms, bpf_links have been created to work in coordination with\nstruct_ops maps. This ensures that the registration and unregistration\nof these respective maps is carried out at the start and end of the\nbpf_link.\n\nWe also faced complications when attempting to replace an existing TCP\ncongestion control algorithm with a new implementation on the fly. A\nstruct_ops map was used to register a TCP congestion control algorithm\nwith a unique name.  We had to either register the alternative\nimplementation with a new name and move over or unregister the current\none before being able to reregistration with the same name.  To fix\nthis problem, we can an option to migrate the registration of the\nalgorithm from struct_ops maps to bpf_links. By modifying the backing\nmap of a bpf_link, it suddenly becomes possible to replace an existing\nTCP congestion control algorithm with ease.\n---\n\nThe major differences from v11:\n\n - Fix incorrectly setting both old_prog_fd and old_map_fd.\n\nThe major differences from v10:\n\n - Add old_map_fd as an additional field instead of an union in\n   bpf_link_update_opts.\n\nThe major differences from v9:\n\n - Add test case for BPF_F_LINK.  Includes adding old_map_fd to struct\n   bpf_link_update_opts in patch 6.\n\n - Return -EPERM instead of -EINVAL when the old map fd doesn\u0027t match\n   with BPF_F_LINK.\n\n - Fix -EBUSY case in bpf_map__attach_struct_ops().\n\nThe major differences form v8:\n\n - Check bpf_struct_ops::{validate,update} in\n   bpf_struct_ops_map_alloc()\n\nThe major differences from v7:\n\n - Use synchronize_rcu_mult(call_rcu, call_rcu_tasks) to replace\n   synchronize_rcu() and synchronize_rcu_tasks().\n\n - Call synchronize_rcu() in tcp_update_congestion_control().\n\n - Handle -EBUSY in bpf_map__attach_struct_ops() to allow a struct_ops\n   can be used to create links more than once.  Include a test case.\n\n - Add old_map_fd to bpf_attr and handle BPF_F_REPLACE in\n   bpf_struct_ops_map_link_update().\n\n - Remove changes in bpf_dummy_struct_ops.c and add a check of .update\n   function pointer of bpf_struct_ops.\n\nThe major differences from v6:\n\n - Reword commit logs of the patch 1, 2, and 8.\n\n - Call synchronize_rcu_tasks() as well in bpf_struct_ops_map_free().\n\n - Refactor bpf_struct_ops_map_free() so that\n   bpf_struct_ops_map_alloc() can free a struct_ops without waiting\n   for a RCU grace period.\n\nThe major differences from v5:\n\n - Add a new step to bpf_object__load() to prepare vdata.\n\n - Accept BPF_F_REPLACE.\n\n - Check section IDs in find_struct_ops_map_by_offset()\n\n - Add a test case to check mixing w/ and w/o link struct_ops.\n\n - Add a test case of using struct_ops w/o link to update a link.\n\n - Improve bpf_link__detach_struct_ops() to handle the w/ link case.\n\nThe major differences from v4:\n\n - Rebase.\n\n - Reorder patches and merge part 4 to part 2 of the v4.\n\nThe major differences from v3:\n\n - Remove bpf_struct_ops_map_free_rcu(), and use synchronize_rcu().\n\n - Improve the commit log of the part 1.\n\n - Before transitioning to the READY state, we conduct a value check\n   to ensure that struct_ops can be successfully utilized and links\n   created later.\n\nThe major differences from v2:\n\n - Simplify states\n\n   - Remove TOBEUNREG.\n\n   - Rename UNREG to READY.\n\n - Stop using the refcnt of the kvalue of a struct_ops. Explicitly\n   increase and decrease the refcount of struct_ops.\n\n - Prepare kernel vdata during the load phase of libbpf.\n\nThe major differences from v1:\n\n - Added bpf_struct_ops_link to replace the previous union-based\n   approach.\n\n - Added UNREG and TOBEUNREG to the state of bpf_struct_ops_map.\n\n   - bpf_struct_ops_transit_state() maintains state transitions.\n\n - Fixed synchronization issue.\n\n - Prepare kernel vdata of struct_ops during the loading phase of\n   bpf_object.\n\n - Merged previous patch 3 to patch 1.\n\nv11: https://lore.kernel.org/all/20230323010409.2265383-1-kuifeng@meta.com/\nv10: https://lore.kernel.org/all/20230321232813.3376064-1-kuifeng@meta.com/\nv9: https://lore.kernel.org/all/20230320195644.1953096-1-kuifeng@meta.com/\nv8: https://lore.kernel.org/all/20230318053144.1180301-1-kuifeng@meta.com/\nv7: https://lore.kernel.org/all/20230316023641.2092778-1-kuifeng@meta.com/\nv6: https://lore.kernel.org/all/20230310043812.3087672-1-kuifeng@meta.com/\nv5: https://lore.kernel.org/all/20230308005050.255859-1-kuifeng@meta.com/\nv4: https://lore.kernel.org/all/20230307232913.576893-1-andrii@kernel.org/\nv3: https://lore.kernel.org/all/20230303012122.852654-1-kuifeng@meta.com/\nv2: https://lore.kernel.org/bpf/20230223011238.12313-1-kuifeng@meta.com/\nv1: https://lore.kernel.org/bpf/20230214221718.503964-1-kuifeng@meta.com/\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nSigned-off-by: Martin KaFai Lau \u003cmartin.lau@kernel.org\u003e\n"
    },
    {
      "commit": "06da9f3bd6418e06719f15340202996f7a4c258d",
      "tree": "4122c213c03490408526d5efbce58bc853c742f4",
      "parents": [
        "809a69d61899f6b79a8e9de474cd93249580fdaf"
      ],
      "author": {
        "name": "Kui-Feng Lee",
        "email": "kuifeng@meta.com",
        "time": "Wed Mar 22 20:24:05 2023 -0700"
      },
      "committer": {
        "name": "Martin KaFai Lau",
        "email": "martin.lau@kernel.org",
        "time": "Wed Mar 22 22:53:25 2023 -0700"
      },
      "message": "selftests/bpf: Test switching TCP Congestion Control algorithms.\n\nCreate a pair of sockets that utilize the congestion control algorithm\nunder a particular name. Then switch up this congestion control\nalgorithm to another implementation and check whether newly created\nconnections using the same cc name now run the new implementation.\n\nAlso, try to update a link with a struct_ops that is without\nBPF_F_LINK or with a wrong or different name.  These cases should fail\ndue to the violation of assumptions.  To update a bpf_link of a\nstruct_ops, it must be replaced with another struct_ops that is\nidentical in type and name and has the BPF_F_LINK flag.\n\nThe other test case is to create links from the same struct_ops more\nthan once.  It makes sure a struct_ops can be used repeatly.\n\nSigned-off-by: Kui-Feng Lee \u003ckuifeng@meta.com\u003e\nLink: https://lore.kernel.org/r/20230323032405.3735486-9-kuifeng@meta.com\nSigned-off-by: Martin KaFai Lau \u003cmartin.lau@kernel.org\u003e\n"
    },
    {
      "commit": "809a69d61899f6b79a8e9de474cd93249580fdaf",
      "tree": "1a4f0fc77743b396c992609bb3e6ade844a3c202",
      "parents": [
        "912dd4b0c2a50a839301520badb241f36664ae07"
      ],
      "author": {
        "name": "Kui-Feng Lee",
        "email": "kuifeng@meta.com",
        "time": "Wed Mar 22 20:24:04 2023 -0700"
      },
      "committer": {
        "name": "Martin KaFai Lau",
        "email": "martin.lau@kernel.org",
        "time": "Wed Mar 22 22:53:02 2023 -0700"
      },
      "message": "libbpf: Use .struct_ops.link section to indicate a struct_ops with a link.\n\nFlags a struct_ops is to back a bpf_link by putting it to the\n\".struct_ops.link\" section.  Once it is flagged, the created\nstruct_ops can be used to create a bpf_link or update a bpf_link that\nhas been backed by another struct_ops.\n\nSigned-off-by: Kui-Feng Lee \u003ckuifeng@meta.com\u003e\nAcked-by: Andrii Nakryiko \u003candrii@kernel.org\u003e\nLink: https://lore.kernel.org/r/20230323032405.3735486-8-kuifeng@meta.com\nSigned-off-by: Martin KaFai Lau \u003cmartin.lau@kernel.org\u003e\n"
    },
    {
      "commit": "912dd4b0c2a50a839301520badb241f36664ae07",
      "tree": "389be76c86c3de80341b8bf7678b213194c98744",
      "parents": [
        "aef56f2e918bf8fc8de25f0b36e8c2aba44116ec"
      ],
      "author": {
        "name": "Kui-Feng Lee",
        "email": "kuifeng@meta.com",
        "time": "Wed Mar 22 20:24:03 2023 -0700"
      },
      "committer": {
        "name": "Martin KaFai Lau",
        "email": "martin.lau@kernel.org",
        "time": "Wed Mar 22 22:53:02 2023 -0700"
      },
      "message": "libbpf: Update a bpf_link with another struct_ops.\n\nIntroduce bpf_link__update_map(), which allows to atomically update\nunderlying struct_ops implementation for given struct_ops BPF link.\n\nAlso add old_map_fd to struct bpf_link_update_opts to handle\nBPF_F_REPLACE feature.\n\nSigned-off-by: Kui-Feng Lee \u003ckuifeng@meta.com\u003e\nLink: https://lore.kernel.org/r/20230323032405.3735486-7-kuifeng@meta.com\nSigned-off-by: Martin KaFai Lau \u003cmartin.lau@kernel.org\u003e\n"
    },
    {
      "commit": "aef56f2e918bf8fc8de25f0b36e8c2aba44116ec",
      "tree": "38d252f9d4fa8ef28ccf18e642bb3741d658fb92",
      "parents": [
        "8d1608d70927747da9c1a8770edf7b6ee68f8ebc"
      ],
      "author": {
        "name": "Kui-Feng Lee",
        "email": "kuifeng@meta.com",
        "time": "Wed Mar 22 20:24:02 2023 -0700"
      },
      "committer": {
        "name": "Martin KaFai Lau",
        "email": "martin.lau@kernel.org",
        "time": "Wed Mar 22 22:53:02 2023 -0700"
      },
      "message": "bpf: Update the struct_ops of a bpf_link.\n\nBy improving the BPF_LINK_UPDATE command of bpf(), it should allow you\nto conveniently switch between different struct_ops on a single\nbpf_link. This would enable smoother transitions from one struct_ops\nto another.\n\nThe struct_ops maps passing along with BPF_LINK_UPDATE should have the\nBPF_F_LINK flag.\n\nSigned-off-by: Kui-Feng Lee \u003ckuifeng@meta.com\u003e\nAcked-by: Andrii Nakryiko \u003candrii@kernel.org\u003e\nLink: https://lore.kernel.org/r/20230323032405.3735486-6-kuifeng@meta.com\nSigned-off-by: Martin KaFai Lau \u003cmartin.lau@kernel.org\u003e\n"
    },
    {
      "commit": "8d1608d70927747da9c1a8770edf7b6ee68f8ebc",
      "tree": "62a2fcea2891964abe076315d003935823296600",
      "parents": [
        "68b04864ca425d1894c96b8141d4fba1181f11cb"
      ],
      "author": {
        "name": "Kui-Feng Lee",
        "email": "kuifeng@meta.com",
        "time": "Wed Mar 22 20:24:01 2023 -0700"
      },
      "committer": {
        "name": "Martin KaFai Lau",
        "email": "martin.lau@kernel.org",
        "time": "Wed Mar 22 22:53:02 2023 -0700"
      },
      "message": "libbpf: Create a bpf_link in bpf_map__attach_struct_ops().\n\nbpf_map__attach_struct_ops() was creating a dummy bpf_link as a\nplaceholder, but now it is constructing an authentic one by calling\nbpf_link_create() if the map has the BPF_F_LINK flag.\n\nYou can flag a struct_ops map with BPF_F_LINK by calling\nbpf_map__set_map_flags().\n\nSigned-off-by: Kui-Feng Lee \u003ckuifeng@meta.com\u003e\nAcked-by: Andrii Nakryiko \u003candrii@kernel.org\u003e\nLink: https://lore.kernel.org/r/20230323032405.3735486-5-kuifeng@meta.com\nSigned-off-by: Martin KaFai Lau \u003cmartin.lau@kernel.org\u003e\n"
    },
    {
      "commit": "68b04864ca425d1894c96b8141d4fba1181f11cb",
      "tree": "66aa6314f9efbba3b8a6ec8363b6b127ed4f016b",
      "parents": [
        "8fb1a76a0f35c45a424c9eb84b0f97ffd51e6052"
      ],
      "author": {
        "name": "Kui-Feng Lee",
        "email": "kuifeng@meta.com",
        "time": "Wed Mar 22 20:24:00 2023 -0700"
      },
      "committer": {
        "name": "Martin KaFai Lau",
        "email": "martin.lau@kernel.org",
        "time": "Wed Mar 22 22:53:02 2023 -0700"
      },
      "message": "bpf: Create links for BPF struct_ops maps.\n\nMake bpf_link support struct_ops.  Previously, struct_ops were always\nused alone without any associated links. Upon updating its value, a\nstruct_ops would be activated automatically. Yet other BPF program\ntypes required to make a bpf_link with their instances before they\ncould become active. Now, however, you can create an inactive\nstruct_ops, and create a link to activate it later.\n\nWith bpf_links, struct_ops has a behavior similar to other BPF program\ntypes. You can pin/unpin them from their links and the struct_ops will\nbe deactivated when its link is removed while previously need someone\nto delete the value for it to be deactivated.\n\nbpf_links are responsible for registering their associated\nstruct_ops. You can only use a struct_ops that has the BPF_F_LINK flag\nset to create a bpf_link, while a structs without this flag behaves in\nthe same manner as before and is registered upon updating its value.\n\nThe BPF_LINK_TYPE_STRUCT_OPS serves a dual purpose. Not only is it\nused to craft the links for BPF struct_ops programs, but also to\ncreate links for BPF struct_ops them-self.  Since the links of BPF\nstruct_ops programs are only used to create trampolines internally,\nthey are never seen in other contexts. Thus, they can be reused for\nstruct_ops themself.\n\nTo maintain a reference to the map supporting this link, we add\nbpf_struct_ops_link as an additional type. The pointer of the map is\nRCU and won\u0027t be necessary until later in the patchset.\n\nSigned-off-by: Kui-Feng Lee \u003ckuifeng@meta.com\u003e\nLink: https://lore.kernel.org/r/20230323032405.3735486-4-kuifeng@meta.com\nSigned-off-by: Martin KaFai Lau \u003cmartin.lau@kernel.org\u003e\n"
    },
    {
      "commit": "8fb1a76a0f35c45a424c9eb84b0f97ffd51e6052",
      "tree": "fbe167ee5d52342b50005ab130fdc88d7e4c02e8",
      "parents": [
        "b671c2067a04c0668df174ff5dfdb573d1f9b074"
      ],
      "author": {
        "name": "Kui-Feng Lee",
        "email": "kuifeng@meta.com",
        "time": "Wed Mar 22 20:23:59 2023 -0700"
      },
      "committer": {
        "name": "Martin KaFai Lau",
        "email": "martin.lau@kernel.org",
        "time": "Wed Mar 22 22:53:00 2023 -0700"
      },
      "message": "net: Update an existing TCP congestion control algorithm.\n\nThis feature lets you immediately transition to another congestion\ncontrol algorithm or implementation with the same name.  Once a name\nis updated, new connections will apply this new algorithm.\n\nThe purpose is to update a customized algorithm implemented in BPF\nstruct_ops with a new version on the flight.  The following is an\nexample of using the userspace API implemented in later BPF patches.\n\n   link \u003d bpf_map__attach_struct_ops(skel-\u003emaps.ca_update_1);\n   .......\n   err \u003d bpf_link__update_map(link, skel-\u003emaps.ca_update_2);\n\nWe first load and register an algorithm implemented in BPF struct_ops,\nthen swap it out with a new one using the same name. After that, newly\ncreated connections will apply the updated algorithm, while older ones\nretain the previous version already applied.\n\nThis patch also takes this chance to refactor the ca validation into\nthe new tcp_validate_congestion_control() function.\n\nCc: netdev@vger.kernel.org, Eric Dumazet \u003cedumazet@google.com\u003e\nSigned-off-by: Kui-Feng Lee \u003ckuifeng@meta.com\u003e\nLink: https://lore.kernel.org/r/20230323032405.3735486-3-kuifeng@meta.com\nSigned-off-by: Martin KaFai Lau \u003cmartin.lau@kernel.org\u003e\n"
    },
    {
      "commit": "b671c2067a04c0668df174ff5dfdb573d1f9b074",
      "tree": "81b83fbcca8f6749dafec7c851bdee4ced3c8619",
      "parents": [
        "b63cbc490e18d893632929b8faa55bb28da3fcd4"
      ],
      "author": {
        "name": "Kui-Feng Lee",
        "email": "kuifeng@meta.com",
        "time": "Wed Mar 22 20:23:58 2023 -0700"
      },
      "committer": {
        "name": "Martin KaFai Lau",
        "email": "martin.lau@kernel.org",
        "time": "Wed Mar 22 22:51:47 2023 -0700"
      },
      "message": "bpf: Retire the struct_ops map kvalue-\u003erefcnt.\n\nWe have replaced kvalue-refcnt with synchronize_rcu() to wait for an\nRCU grace period.\n\nMaintenance of kvalue-\u003erefcnt was a complicated task, as we had to\nsimultaneously keep track of two reference counts: one for the\nreference count of bpf_map. When the kvalue-\u003erefcnt reaches zero, we\nalso have to reduce the reference count on bpf_map - yet these steps\nare not performed in an atomic manner and require us to be vigilant\nwhen managing them. By eliminating kvalue-\u003erefcnt, we can make our\nmaintenance more straightforward as the refcount of bpf_map is now\nsolely managed!\n\nTo prevent the trampoline image of a struct_ops from being released\nwhile it is still in use, we wait for an RCU grace period. The\nsetsockopt(TCP_CONGESTION, \"...\") command allows you to change your\nsocket\u0027s congestion control algorithm and can result in releasing the\nold struct_ops implementation. It is fine. However, this function is\nexposed through bpf_setsockopt(), it may be accessed by BPF programs\nas well. To ensure that the trampoline image belonging to struct_op\ncan be safely called while its method is in use, the trampoline\nsafeguarde the BPF program with rcu_read_lock(). Doing so prevents any\ndestruction of the associated images before returning from a\ntrampoline and requires us to wait for an RCU grace period.\n\nSigned-off-by: Kui-Feng Lee \u003ckuifeng@meta.com\u003e\nLink: https://lore.kernel.org/r/20230323032405.3735486-2-kuifeng@meta.com\nSigned-off-by: Martin KaFai Lau \u003cmartin.lau@kernel.org\u003e\n"
    },
    {
      "commit": "b63cbc490e18d893632929b8faa55bb28da3fcd4",
      "tree": "a6d2301d8bfc328cd8671bc3211998ab4c128629",
      "parents": [
        "1a3148fc171f5cde11b4c24e808a953ff725a3e2"
      ],
      "author": {
        "name": "Andrii Nakryiko",
        "email": "andrii@kernel.org",
        "time": "Wed Mar 22 16:25:02 2023 -0700"
      },
      "committer": {
        "name": "Martin KaFai Lau",
        "email": "martin.lau@kernel.org",
        "time": "Wed Mar 22 17:04:47 2023 -0700"
      },
      "message": "bpf: remember meta-\u003eiter info only for initialized iters\n\nFor iter_new() functions iterator state\u0027s slot might not be yet\ninitialized, in which case iter_get_spi() will return -ERANGE. This is\nexpected and is handled properly. But for iter_next() and iter_destroy()\ncases iter slot is supposed to be initialized and correct, so -ERANGE is\nnot possible.\n\nMove meta-\u003eiter.{spi,frameno} initialization into iter_next/iter_destroy\nhandling branch to make it more explicit that valid information will be\nremembered in meta-\u003eiter block for subsequent use in process_iter_next_call(),\navoiding confusingly looking -ERANGE assignment for meta-\u003eiter.spi.\n\nReported-by: Dan Carpenter \u003cerror27@gmail.com\u003e\nSigned-off-by: Andrii Nakryiko \u003candrii@kernel.org\u003e\nLink: https://lore.kernel.org/r/20230322232502.836171-1-andrii@kernel.org\nSigned-off-by: Martin KaFai Lau \u003cmartin.lau@kernel.org\u003e\n"
    },
    {
      "commit": "1a3148fc171f5cde11b4c24e808a953ff725a3e2",
      "tree": "445695857ed647c430258e0894558f862ad42648",
      "parents": [
        "7be14c1c9030f73cc18b4ff23b78a0a081f16188"
      ],
      "author": {
        "name": "Xu Kuohai",
        "email": "xukuohai@huawei.com",
        "time": "Wed Mar 22 22:30:56 2023 +0100"
      },
      "committer": {
        "name": "Andrii Nakryiko",
        "email": "andrii@kernel.org",
        "time": "Wed Mar 22 16:49:25 2023 -0700"
      },
      "message": "selftests/bpf: Check when bounds are not in the 32-bit range\n\nAdd cases to check if bound is updated correctly when 64-bit value is\nnot in the 32-bit range.\n\nSigned-off-by: Xu Kuohai \u003cxukuohai@huawei.com\u003e\nSigned-off-by: Daniel Borkmann \u003cdaniel@iogearbox.net\u003e\nSigned-off-by: Andrii Nakryiko \u003candrii@kernel.org\u003e\nAcked-by: John Fastabend \u003cjohn.fastabend@gmail.com\u003e\nLink: https://lore.kernel.org/bpf/20230322213056.2470-2-daniel@iogearbox.net\n"
    },
    {
      "commit": "7be14c1c9030f73cc18b4ff23b78a0a081f16188",
      "tree": "01bd2959916f9239e54c16045a5a066ed424fbc0",
      "parents": [
        "02adf9e9bec115962424d45d45d0d65d6b6477fa"
      ],
      "author": {
        "name": "Daniel Borkmann",
        "email": "daniel@iogearbox.net",
        "time": "Wed Mar 22 22:30:55 2023 +0100"
      },
      "committer": {
        "name": "Andrii Nakryiko",
        "email": "andrii@kernel.org",
        "time": "Wed Mar 22 16:49:25 2023 -0700"
      },
      "message": "bpf: Fix __reg_bound_offset 64-\u003e32 var_off subreg propagation\n\nXu reports that after commit 3f50f132d840 (\"bpf: Verifier, do explicit ALU32\nbounds tracking\"), the following BPF program is rejected by the verifier:\n\n   0: (61) r2 \u003d *(u32 *)(r1 +0)          ; R2_w\u003dpkt(off\u003d0,r\u003d0,imm\u003d0)\n   1: (61) r3 \u003d *(u32 *)(r1 +4)          ; R3_w\u003dpkt_end(off\u003d0,imm\u003d0)\n   2: (bf) r1 \u003d r2\n   3: (07) r1 +\u003d 1\n   4: (2d) if r1 \u003e r3 goto pc+8\n   5: (71) r1 \u003d *(u8 *)(r2 +0)           ; R1_w\u003dscalar(umax\u003d255,var_off\u003d(0x0; 0xff))\n   6: (18) r0 \u003d 0x7fffffffffffff10\n   8: (0f) r1 +\u003d r0                      ; R1_w\u003dscalar(umin\u003d0x7fffffffffffff10,umax\u003d0x800000000000000f)\n   9: (18) r0 \u003d 0x8000000000000000\n  11: (07) r0 +\u003d 1\n  12: (ad) if r0 \u003c r1 goto pc-2\n  13: (b7) r0 \u003d 0\n  14: (95) exit\n\nAnd the verifier log says:\n\n  func#0 @0\n  0: R1\u003dctx(off\u003d0,imm\u003d0) R10\u003dfp0\n  0: (61) r2 \u003d *(u32 *)(r1 +0)          ; R1\u003dctx(off\u003d0,imm\u003d0) R2_w\u003dpkt(off\u003d0,r\u003d0,imm\u003d0)\n  1: (61) r3 \u003d *(u32 *)(r1 +4)          ; R1\u003dctx(off\u003d0,imm\u003d0) R3_w\u003dpkt_end(off\u003d0,imm\u003d0)\n  2: (bf) r1 \u003d r2                       ; R1_w\u003dpkt(off\u003d0,r\u003d0,imm\u003d0) R2_w\u003dpkt(off\u003d0,r\u003d0,imm\u003d0)\n  3: (07) r1 +\u003d 1                       ; R1_w\u003dpkt(off\u003d1,r\u003d0,imm\u003d0)\n  4: (2d) if r1 \u003e r3 goto pc+8          ; R1_w\u003dpkt(off\u003d1,r\u003d1,imm\u003d0) R3_w\u003dpkt_end(off\u003d0,imm\u003d0)\n  5: (71) r1 \u003d *(u8 *)(r2 +0)           ; R1_w\u003dscalar(umax\u003d255,var_off\u003d(0x0; 0xff)) R2_w\u003dpkt(off\u003d0,r\u003d1,imm\u003d0)\n  6: (18) r0 \u003d 0x7fffffffffffff10       ; R0_w\u003d9223372036854775568\n  8: (0f) r1 +\u003d r0                      ; R0_w\u003d9223372036854775568 R1_w\u003dscalar(umin\u003d9223372036854775568,umax\u003d9223372036854775823,s32_min\u003d-240,s32_max\u003d15)\n  9: (18) r0 \u003d 0x8000000000000000       ; R0_w\u003d-9223372036854775808\n  11: (07) r0 +\u003d 1                      ; R0_w\u003d-9223372036854775807\n  12: (ad) if r0 \u003c r1 goto pc-2         ; R0_w\u003d-9223372036854775807 R1_w\u003dscalar(umin\u003d9223372036854775568,umax\u003d9223372036854775809)\n  13: (b7) r0 \u003d 0                       ; R0_w\u003d0\n  14: (95) exit\n\n  from 12 to 11: R0_w\u003d-9223372036854775807 R1_w\u003dscalar(umin\u003d9223372036854775810,umax\u003d9223372036854775823,var_off\u003d(0x8000000000000000; 0xffffffff)) R2_w\u003dpkt(off\u003d0,r\u003d1,imm\u003d0) R3_w\u003dpkt_end(off\u003d0,imm\u003d0) R10\u003dfp0\n  11: (07) r0 +\u003d 1                      ; R0_w\u003d-9223372036854775806\n  12: (ad) if r0 \u003c r1 goto pc-2         ; R0_w\u003d-9223372036854775806 R1_w\u003dscalar(umin\u003d9223372036854775810,umax\u003d9223372036854775810,var_off\u003d(0x8000000000000000; 0xffffffff))\n  13: safe\n\n  [...]\n\n  from 12 to 11: R0_w\u003d-9223372036854775795 R1\u003dscalar(umin\u003d9223372036854775822,umax\u003d9223372036854775823,var_off\u003d(0x8000000000000000; 0xffffffff)) R2\u003dpkt(off\u003d0,r\u003d1,imm\u003d0) R3\u003dpkt_end(off\u003d0,imm\u003d0) R10\u003dfp0\n  11: (07) r0 +\u003d 1                      ; R0_w\u003d-9223372036854775794\n  12: (ad) if r0 \u003c r1 goto pc-2         ; R0_w\u003d-9223372036854775794 R1\u003dscalar(umin\u003d9223372036854775822,umax\u003d9223372036854775822,var_off\u003d(0x8000000000000000; 0xffffffff))\n  13: safe\n\n  from 12 to 11: R0_w\u003d-9223372036854775794 R1\u003dscalar(umin\u003d9223372036854775823,umax\u003d9223372036854775823,var_off\u003d(0x8000000000000000; 0xffffffff)) R2\u003dpkt(off\u003d0,r\u003d1,imm\u003d0) R3\u003dpkt_end(off\u003d0,imm\u003d0) R10\u003dfp0\n  11: (07) r0 +\u003d 1                      ; R0_w\u003d-9223372036854775793\n  12: (ad) if r0 \u003c r1 goto pc-2         ; R0_w\u003d-9223372036854775793 R1\u003dscalar(umin\u003d9223372036854775823,umax\u003d9223372036854775823,var_off\u003d(0x8000000000000000; 0xffffffff))\n  13: safe\n\n  from 12 to 11: R0_w\u003d-9223372036854775793 R1\u003dscalar(umin\u003d9223372036854775824,umax\u003d9223372036854775823,var_off\u003d(0x8000000000000000; 0xffffffff)) R2\u003dpkt(off\u003d0,r\u003d1,imm\u003d0) R3\u003dpkt_end(off\u003d0,imm\u003d0) R10\u003dfp0\n  11: (07) r0 +\u003d 1                      ; R0_w\u003d-9223372036854775792\n  12: (ad) if r0 \u003c r1 goto pc-2         ; R0_w\u003d-9223372036854775792 R1\u003dscalar(umin\u003d9223372036854775824,umax\u003d9223372036854775823,var_off\u003d(0x8000000000000000; 0xffffffff))\n  13: safe\n\n  [...]\n\nThe 64bit umin\u003d9223372036854775810 bound continuously bumps by +1 while\numax\u003d9223372036854775823 stays as-is until the verifier complexity limit\nis reached and the program gets finally rejected. During this simulation,\nthe umin also eventually surpasses umax. Looking at the first \u0027from 12\nto 11\u0027 output line from the loop, R1 has the following state:\n\n  R1_w\u003dscalar(umin\u003d0x8000000000000002 (9223372036854775810),\n              umax\u003d0x800000000000000f (9223372036854775823),\n          var_off\u003d(0x8000000000000000;\n                           0xffffffff))\n\nThe var_off has technically not an inconsistent state but it\u0027s very\nimprecise and far off surpassing 64bit umax bounds whereas the expected\noutput with refined known bits in var_off should have been like:\n\n  R1_w\u003dscalar(umin\u003d0x8000000000000002 (9223372036854775810),\n              umax\u003d0x800000000000000f (9223372036854775823),\n          var_off\u003d(0x8000000000000000;\n                                  0xf))\n\nIn the above log, var_off stays as var_off\u003d(0x8000000000000000; 0xffffffff)\nand does not converge into a narrower mask where more bits become known,\neventually transforming R1 into a constant upon umin\u003d9223372036854775823,\numax\u003d9223372036854775823 case where the verifier would have terminated and\nlet the program pass.\n\nThe __reg_combine_64_into_32() marks the subregister unknown and propagates\n64bit {s,u}min/{s,u}max bounds to their 32bit equivalents iff they are within\nthe 32bit universe. The question came up whether __reg_combine_64_into_32()\nshould special case the situation that when 64bit {s,u}min bounds have\nthe same value as 64bit {s,u}max bounds to then assign the latter as\nwell to the 32bit reg-\u003e{s,u}32_{min,max}_value. As can be seen from the\nabove example however, that is just /one/ special case and not a /generic/\nsolution given above example would still not be addressed this way and\nremain at an imprecise var_off\u003d(0x8000000000000000; 0xffffffff).\n\nThe improvement is needed in __reg_bound_offset() to refine var32_off with\nthe updated var64_off instead of the prior reg-\u003evar_off. The reg_bounds_sync()\ncode first refines information about the register\u0027s min/max bounds via\n__update_reg_bounds() from the current var_off, then in __reg_deduce_bounds()\nfrom sign bit and with the potentially learned bits from bounds it\u0027ll\nupdate the var_off tnum in __reg_bound_offset(). For example, intersecting\nwith the old var_off might have improved bounds slightly, e.g. if umax\nwas 0x7f...f and var_off was (0; 0xf...fc), then new var_off will then\nresult in (0; 0x7f...fc). The intersected var64_off holds then the\nuniverse which is a superset of var32_off. The point for the latter is\nnot to broaden, but to further refine known bits based on the intersection\nof var_off with 32 bit bounds, so that we later construct the final var_off\nfrom upper and lower 32 bits. The final __update_reg_bounds() can then\npotentially still slightly refine bounds if more bits became known from the\nnew var_off.\n\nAfter the improvement, we can see R1 converging successively:\n\n  func#0 @0\n  0: R1\u003dctx(off\u003d0,imm\u003d0) R10\u003dfp0\n  0: (61) r2 \u003d *(u32 *)(r1 +0)          ; R1\u003dctx(off\u003d0,imm\u003d0) R2_w\u003dpkt(off\u003d0,r\u003d0,imm\u003d0)\n  1: (61) r3 \u003d *(u32 *)(r1 +4)          ; R1\u003dctx(off\u003d0,imm\u003d0) R3_w\u003dpkt_end(off\u003d0,imm\u003d0)\n  2: (bf) r1 \u003d r2                       ; R1_w\u003dpkt(off\u003d0,r\u003d0,imm\u003d0) R2_w\u003dpkt(off\u003d0,r\u003d0,imm\u003d0)\n  3: (07) r1 +\u003d 1                       ; R1_w\u003dpkt(off\u003d1,r\u003d0,imm\u003d0)\n  4: (2d) if r1 \u003e r3 goto pc+8          ; R1_w\u003dpkt(off\u003d1,r\u003d1,imm\u003d0) R3_w\u003dpkt_end(off\u003d0,imm\u003d0)\n  5: (71) r1 \u003d *(u8 *)(r2 +0)           ; R1_w\u003dscalar(umax\u003d255,var_off\u003d(0x0; 0xff)) R2_w\u003dpkt(off\u003d0,r\u003d1,imm\u003d0)\n  6: (18) r0 \u003d 0x7fffffffffffff10       ; R0_w\u003d9223372036854775568\n  8: (0f) r1 +\u003d r0                      ; R0_w\u003d9223372036854775568 R1_w\u003dscalar(umin\u003d9223372036854775568,umax\u003d9223372036854775823,s32_min\u003d-240,s32_max\u003d15)\n  9: (18) r0 \u003d 0x8000000000000000       ; R0_w\u003d-9223372036854775808\n  11: (07) r0 +\u003d 1                      ; R0_w\u003d-9223372036854775807\n  12: (ad) if r0 \u003c r1 goto pc-2         ; R0_w\u003d-9223372036854775807 R1_w\u003dscalar(umin\u003d9223372036854775568,umax\u003d9223372036854775809)\n  13: (b7) r0 \u003d 0                       ; R0_w\u003d0\n  14: (95) exit\n\n  from 12 to 11: R0_w\u003d-9223372036854775807 R1_w\u003dscalar(umin\u003d9223372036854775810,umax\u003d9223372036854775823,var_off\u003d(0x8000000000000000; 0xf),s32_min\u003d0,s32_max\u003d15,u32_max\u003d15) R2_w\u003dpkt(off\u003d0,r\u003d1,imm\u003d0) R3_w\u003dpkt_end(off\u003d0,imm\u003d0) R10\u003dfp0\n  11: (07) r0 +\u003d 1                      ; R0_w\u003d-9223372036854775806\n  12: (ad) if r0 \u003c r1 goto pc-2         ; R0_w\u003d-9223372036854775806 R1_w\u003d-9223372036854775806\n  13: safe\n\n  from 12 to 11: R0_w\u003d-9223372036854775806 R1_w\u003dscalar(umin\u003d9223372036854775811,umax\u003d9223372036854775823,var_off\u003d(0x8000000000000000; 0xf),s32_min\u003d0,s32_max\u003d15,u32_max\u003d15) R2_w\u003dpkt(off\u003d0,r\u003d1,imm\u003d0) R3_w\u003dpkt_end(off\u003d0,imm\u003d0) R10\u003dfp0\n  11: (07) r0 +\u003d 1                      ; R0_w\u003d-9223372036854775805\n  12: (ad) if r0 \u003c r1 goto pc-2         ; R0_w\u003d-9223372036854775805 R1_w\u003d-9223372036854775805\n  13: safe\n\n  [...]\n\n  from 12 to 11: R0_w\u003d-9223372036854775798 R1\u003dscalar(umin\u003d9223372036854775819,umax\u003d9223372036854775823,var_off\u003d(0x8000000000000008; 0x7),s32_min\u003d8,s32_max\u003d15,u32_min\u003d8,u32_max\u003d15) R2\u003dpkt(off\u003d0,r\u003d1,imm\u003d0) R3\u003dpkt_end(off\u003d0,imm\u003d0) R10\u003dfp0\n  11: (07) r0 +\u003d 1                      ; R0_w\u003d-9223372036854775797\n  12: (ad) if r0 \u003c r1 goto pc-2         ; R0_w\u003d-9223372036854775797 R1\u003d-9223372036854775797\n  13: safe\n\n  from 12 to 11: R0_w\u003d-9223372036854775797 R1\u003dscalar(umin\u003d9223372036854775820,umax\u003d9223372036854775823,var_off\u003d(0x800000000000000c; 0x3),s32_min\u003d12,s32_max\u003d15,u32_min\u003d12,u32_max\u003d15) R2\u003dpkt(off\u003d0,r\u003d1,imm\u003d0) R3\u003dpkt_end(off\u003d0,imm\u003d0) R10\u003dfp0\n  11: (07) r0 +\u003d 1                      ; R0_w\u003d-9223372036854775796\n  12: (ad) if r0 \u003c r1 goto pc-2         ; R0_w\u003d-9223372036854775796 R1\u003d-9223372036854775796\n  13: safe\n\n  from 12 to 11: R0_w\u003d-9223372036854775796 R1\u003dscalar(umin\u003d9223372036854775821,umax\u003d9223372036854775823,var_off\u003d(0x800000000000000c; 0x3),s32_min\u003d12,s32_max\u003d15,u32_min\u003d12,u32_max\u003d15) R2\u003dpkt(off\u003d0,r\u003d1,imm\u003d0) R3\u003dpkt_end(off\u003d0,imm\u003d0) R10\u003dfp0\n  11: (07) r0 +\u003d 1                      ; R0_w\u003d-9223372036854775795\n  12: (ad) if r0 \u003c r1 goto pc-2         ; R0_w\u003d-9223372036854775795 R1\u003d-9223372036854775795\n  13: safe\n\n  from 12 to 11: R0_w\u003d-9223372036854775795 R1\u003dscalar(umin\u003d9223372036854775822,umax\u003d9223372036854775823,var_off\u003d(0x800000000000000e; 0x1),s32_min\u003d14,s32_max\u003d15,u32_min\u003d14,u32_max\u003d15) R2\u003dpkt(off\u003d0,r\u003d1,imm\u003d0) R3\u003dpkt_end(off\u003d0,imm\u003d0) R10\u003dfp0\n  11: (07) r0 +\u003d 1                      ; R0_w\u003d-9223372036854775794\n  12: (ad) if r0 \u003c r1 goto pc-2         ; R0_w\u003d-9223372036854775794 R1\u003d-9223372036854775794\n  13: safe\n\n  from 12 to 11: R0_w\u003d-9223372036854775794 R1\u003d-9223372036854775793 R2\u003dpkt(off\u003d0,r\u003d1,imm\u003d0) R3\u003dpkt_end(off\u003d0,imm\u003d0) R10\u003dfp0\n  11: (07) r0 +\u003d 1                      ; R0_w\u003d-9223372036854775793\n  12: (ad) if r0 \u003c r1 goto pc-2\n  last_idx 12 first_idx 12\n  parent didn\u0027t have regs\u003d1 stack\u003d0 marks: R0_rw\u003dP-9223372036854775801 R1_r\u003dscalar(umin\u003d9223372036854775815,umax\u003d9223372036854775823,var_off\u003d(0x8000000000000000; 0xf),s32_min\u003d0,s32_max\u003d15,u32_max\u003d15) R2\u003dpkt(off\u003d0,r\u003d1,imm\u003d0) R3\u003dpkt_end(off\u003d0,imm\u003d0) R10\u003dfp0\n  last_idx 11 first_idx 11\n  regs\u003d1 stack\u003d0 before 11: (07) r0 +\u003d 1\n  parent didn\u0027t have regs\u003d1 stack\u003d0 marks: R0_rw\u003dP-9223372036854775805 R1_rw\u003dscalar(umin\u003d9223372036854775812,umax\u003d9223372036854775823,var_off\u003d(0x8000000000000000; 0xf),s32_min\u003d0,s32_max\u003d15,u32_max\u003d15) R2_w\u003dpkt(off\u003d0,r\u003d1,imm\u003d0) R3_w\u003dpkt_end(off\u003d0,imm\u003d0) R10\u003dfp0\n  last_idx 12 first_idx 0\n  regs\u003d1 stack\u003d0 before 12: (ad) if r0 \u003c r1 goto pc-2\n  regs\u003d1 stack\u003d0 before 11: (07) r0 +\u003d 1\n  regs\u003d1 stack\u003d0 before 12: (ad) if r0 \u003c r1 goto pc-2\n  regs\u003d1 stack\u003d0 before 11: (07) r0 +\u003d 1\n  regs\u003d1 stack\u003d0 before 12: (ad) if r0 \u003c r1 goto pc-2\n  regs\u003d1 stack\u003d0 before 11: (07) r0 +\u003d 1\n  regs\u003d1 stack\u003d0 before 9: (18) r0 \u003d 0x8000000000000000\n  last_idx 12 first_idx 12\n  parent didn\u0027t have regs\u003d2 stack\u003d0 marks: R0_rw\u003dP-9223372036854775801 R1_r\u003dPscalar(umin\u003d9223372036854775815,umax\u003d9223372036854775823,var_off\u003d(0x8000000000000000; 0xf),s32_min\u003d0,s32_max\u003d15,u32_max\u003d15) R2\u003dpkt(off\u003d0,r\u003d1,imm\u003d0) R3\u003dpkt_end(off\u003d0,imm\u003d0) R10\u003dfp0\n  last_idx 11 first_idx 11\n  regs\u003d2 stack\u003d0 before 11: (07) r0 +\u003d 1\n  parent didn\u0027t have regs\u003d2 stack\u003d0 marks: R0_rw\u003dP-9223372036854775805 R1_rw\u003dPscalar(umin\u003d9223372036854775812,umax\u003d9223372036854775823,var_off\u003d(0x8000000000000000; 0xf),s32_min\u003d0,s32_max\u003d15,u32_max\u003d15) R2_w\u003dpkt(off\u003d0,r\u003d1,imm\u003d0) R3_w\u003dpkt_end(off\u003d0,imm\u003d0) R10\u003dfp0\n  last_idx 12 first_idx 0\n  regs\u003d2 stack\u003d0 before 12: (ad) if r0 \u003c r1 goto pc-2\n  regs\u003d2 stack\u003d0 before 11: (07) r0 +\u003d 1\n  regs\u003d2 stack\u003d0 before 12: (ad) if r0 \u003c r1 goto pc-2\n  regs\u003d2 stack\u003d0 before 11: (07) r0 +\u003d 1\n  regs\u003d2 stack\u003d0 before 12: (ad) if r0 \u003c r1 goto pc-2\n  regs\u003d2 stack\u003d0 before 11: (07) r0 +\u003d 1\n  regs\u003d2 stack\u003d0 before 9: (18) r0 \u003d 0x8000000000000000\n  regs\u003d2 stack\u003d0 before 8: (0f) r1 +\u003d r0\n  regs\u003d3 stack\u003d0 before 6: (18) r0 \u003d 0x7fffffffffffff10\n  regs\u003d2 stack\u003d0 before 5: (71) r1 \u003d *(u8 *)(r2 +0)\n  13: safe\n\n  from 4 to 13: safe\n  verification time 322 usec\n  stack depth 0\n  processed 56 insns (limit 1000000) max_states_per_insn 1 total_states 3 peak_states 3 mark_read 1\n\nThis also fixes up a test case along with this improvement where we match\non the verifier log. The updated log now has a refined var_off, too.\n\nFixes: 3f50f132d840 (\"bpf: Verifier, do explicit ALU32 bounds tracking\")\nReported-by: Xu Kuohai \u003cxukuohai@huaweicloud.com\u003e\nSigned-off-by: Daniel Borkmann \u003cdaniel@iogearbox.net\u003e\nSigned-off-by: Andrii Nakryiko \u003candrii@kernel.org\u003e\nReviewed-by: John Fastabend \u003cjohn.fastabend@gmail.com\u003e\nLink: https://lore.kernel.org/bpf/20230314203424.4015351-2-xukuohai@huaweicloud.com\nLink: https://lore.kernel.org/bpf/20230322213056.2470-1-daniel@iogearbox.net\n"
    },
    {
      "commit": "02adf9e9bec115962424d45d45d0d65d6b6477fa",
      "tree": "980f432af2432a9480cdd981ca9b2b99491ea532",
      "parents": [
        "d9d93f3b61434bc18ec905eaad224407cce1a9e2",
        "d7ba4cc900bf1eea2d8c807c6b1fc6bd61f41237"
      ],
      "author": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Wed Mar 22 15:11:07 2023 -0700"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Wed Mar 22 15:12:03 2023 -0700"
      },
      "message": "Merge branch \u0027error checking where helpers call bpf_map_ops\u0027\n\nJP Kobryn says:\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nWithin bpf programs, the bpf helper functions can make inline calls to\nkernel functions. In this scenario there can be a disconnect between the\nregister the kernel function writes a return value to and the register the\nbpf program uses to evaluate that return value.\n\nAs an example, this bpf code:\n\nlong err \u003d bpf_map_update_elem(...);\nif (err \u0026\u0026 err !\u003d -EEXIST)\n\t// got some error other than -EEXIST\n\n...can result in the bpf assembly:\n\n; err \u003d bpf_map_update_elem(\u0026mymap, \u0026key, \u0026val, BPF_NOEXIST);\n  37:\tmovabs $0xffff976a10730400,%rdi\n  41:\tmov    $0x1,%ecx\n  46:\tcall   0xffffffffe103291c\t; htab_map_update_elem\n; if (err \u0026\u0026 err !\u003d -EEXIST) {\n  4b:\tcmp    $0xffffffffffffffef,%rax ; cmp -EEXIST,%rax\n  4f:\tje     0x000000000000008e\n  51:\ttest   %rax,%rax\n  54:\tje     0x000000000000008e\n\nThe compare operation here evaluates %rax, while in the preceding call to\nhtab_map_update_elem the corresponding assembly returns -EEXIST via %eax\n(the lower 32 bits of %rax):\n\nmovl $0xffffffef, %r9d\n...\nmovl %r9d, %eax\n\n...since it\u0027s returning int (32-bit). So the resulting comparison becomes:\n\ncmp $0xffffffffffffffef, $0x00000000ffffffef\n\n...making it not possible to check for negative errors or specific errors,\nsince the sign value is left at the 32nd bit. It means in the original\nexample, the conditional branch will be entered even when the error is\n-EEXIST, which was not intended.\n\nThe selftests added cover these cases for the different bpf_map_ops\nfunctions. When the second patch is applied, changing the return type of\nthose functions to long, the comparison works as intended and the tests\npass.\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "d7ba4cc900bf1eea2d8c807c6b1fc6bd61f41237",
      "tree": "980f432af2432a9480cdd981ca9b2b99491ea532",
      "parents": [
        "830154cdc57971b06f81d4ffc39b868e3d7693de"
      ],
      "author": {
        "name": "JP Kobryn",
        "email": "inwardvessel@gmail.com",
        "time": "Wed Mar 22 12:47:54 2023 -0700"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Wed Mar 22 15:11:30 2023 -0700"
      },
      "message": "bpf: return long from bpf_map_ops funcs\n\nThis patch changes the return types of bpf_map_ops functions to long, where\npreviously int was returned. Using long allows for bpf programs to maintain\nthe sign bit in the absence of sign extension during situations where\ninlined bpf helper funcs make calls to the bpf_map_ops funcs and a negative\nerror is returned.\n\nThe definitions of the helper funcs are generated from comments in the bpf\nuapi header at `include/uapi/linux/bpf.h`. The return type of these\nhelpers was previously changed from int to long in commit bdb7b79b4ce8. For\nany case where one of the map helpers call the bpf_map_ops funcs that are\nstill returning 32-bit int, a compiler might not include sign extension\ninstructions to properly convert the 32-bit negative value a 64-bit\nnegative value.\n\nFor example:\nbpf assembly excerpt of an inlined helper calling a kernel function and\nchecking for a specific error:\n\n; err \u003d bpf_map_update_elem(\u0026mymap, \u0026key, \u0026val, BPF_NOEXIST);\n  ...\n  46:\tcall   0xffffffffe103291c\t; htab_map_update_elem\n; if (err \u0026\u0026 err !\u003d -EEXIST) {\n  4b:\tcmp    $0xffffffffffffffef,%rax ; cmp -EEXIST,%rax\n\nkernel function assembly excerpt of return value from\n`htab_map_update_elem` returning 32-bit int:\n\nmovl $0xffffffef, %r9d\n...\nmovl %r9d, %eax\n\n...results in the comparison:\ncmp $0xffffffffffffffef, $0x00000000ffffffef\n\nFixes: bdb7b79b4ce8 (\"bpf: Switch most helper return values from 32-bit int to 64-bit long\")\nTested-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nSigned-off-by: JP Kobryn \u003cinwardvessel@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230322194754.185781-3-inwardvessel@gmail.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "830154cdc57971b06f81d4ffc39b868e3d7693de",
      "tree": "49341537b04bcedddfc578730e56fe3167589932",
      "parents": [
        "d9d93f3b61434bc18ec905eaad224407cce1a9e2"
      ],
      "author": {
        "name": "JP Kobryn",
        "email": "inwardvessel@gmail.com",
        "time": "Wed Mar 22 12:47:53 2023 -0700"
      },
      "committer": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Wed Mar 22 15:11:06 2023 -0700"
      },
      "message": "bpf/selftests: coverage for bpf_map_ops errors\n\nThese tests expose the issue of being unable to properly check for errors\nreturned from inlined bpf map helpers that make calls to the bpf_map_ops\nfunctions. At best, a check for zero or non-zero can be done but these\ntests show it is not possible to check for a negative value or for a\nspecific error value.\n\nSigned-off-by: JP Kobryn \u003cinwardvessel@gmail.com\u003e\nTested-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20230322194754.185781-2-inwardvessel@gmail.com\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\n"
    },
    {
      "commit": "d9d93f3b61434bc18ec905eaad224407cce1a9e2",
      "tree": "4a2a93b5aebe1bb40668ddca8bc24a344f6a2571",
      "parents": [
        "9a321fd3308e262f2a76761bea86dd0f311e3f86",
        "3b2ec2140fa27febb21034943d656898b659dc02"
      ],
      "author": {
        "name": "Andrii Nakryiko",
        "email": "andrii@kernel.org",
        "time": "Wed Mar 22 09:31:05 2023 -0700"
      },
      "committer": {
        "name": "Andrii Nakryiko",
        "email": "andrii@kernel.org",
        "time": "Wed Mar 22 09:31:06 2023 -0700"
      },
      "message": "Merge branch \u0027bpf: Support ksym detection in light skeleton.\u0027\n\nAlexei Starovoitov says:\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nFrom: Alexei Starovoitov \u003cast@kernel.org\u003e\n\nv1-\u003ev2: update denylist on s390\n\nPatch 1: Cleanup internal libbpf names.\nPatch 2: Teach the verifier that rdonly_mem !\u003d NULL.\nPatch 3: Fix gen_loader to support ksym detection.\nPatch 4: Selftest and update denylist.\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nSigned-off-by: Andrii Nakryiko \u003candrii@kernel.org\u003e\n"
    },
    {
      "commit": "3b2ec2140fa27febb21034943d656898b659dc02",
      "tree": "4a2a93b5aebe1bb40668ddca8bc24a344f6a2571",
      "parents": [
        "708cdc5706a4701be9e5f81cb2e2b60b57f34c42"
      ],
      "author": {
        "name": "Alexei Starovoitov",
        "email": "ast@kernel.org",
        "time": "Tue Mar 21 13:38:54 2023 -0700"
      },
      "committer": {
        "name": "Andrii Nakryiko",
        "email": "andrii@kernel.org",
        "time": "Wed Mar 22 09:31:05 2023 -0700"
      },
      "message": "selftests/bpf: Add light skeleton test for kfunc detection.\n\nAdd light skeleton test for kfunc detection and denylist it for s390.\n\nSigned-off-by: Alexei Starovoitov \u003cast@kernel.org\u003e\nSigned-off-by: Andrii Nakryiko \u003candrii@kernel.org\u003e\nLink: https://lore.kernel.org/bpf/20230321203854.3035-5-alexei.starovoitov@gmail.com\n"
    }
  ],
  "next": "708cdc5706a4701be9e5f81cb2e2b60b57f34c42"
}
