From: kernel test robot <lkp@intel.com>
To: Puranjay Mohan <puranjay@kernel.org>,
Alexei Starovoitov <ast@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
Andrii Nakryiko <andrii@kernel.org>,
Martin KaFai Lau <martin.lau@linux.dev>,
Eduard Zingerman <eddyz87@gmail.com>, Song Liu <song@kernel.org>,
Yonghong Song <yonghong.song@linux.dev>,
John Fastabend <john.fastabend@gmail.com>,
KP Singh <kpsingh@kernel.org>,
Stanislav Fomichev <sdf@fomichev.me>, Hao Luo <haoluo@google.com>,
Jiri Olsa <jolsa@kernel.org>,
Xu Kuohai <xukuohai@huaweicloud.com>,
Catalin Marinas <catalin.marinas@arm.com>,
Will Deacon <will@kernel.org>, Mykola Lysenko <mykolal@fb.com>,
bpf@vger.kernel.org
Cc: llvm@lists.linux.dev, oe-kbuild-all@lists.linux.dev
Subject: Re: [PATCH bpf-next] bpf, arm64: JIT support for private stack
Date: Wed, 23 Jul 2025 23:52:01 +0800 [thread overview]
Message-ID: <202507232327.S1FR5cNc-lkp@intel.com> (raw)
In-Reply-To: <20250722173254.3879-1-puranjay@kernel.org>
Hi Puranjay,
kernel test robot noticed the following build warnings:
[auto build test WARNING on bpf-next/master]
url: https://github.com/intel-lab-lkp/linux/commits/Puranjay-Mohan/bpf-arm64-JIT-support-for-private-stack/20250723-013449
base: https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git master
patch link: https://lore.kernel.org/r/20250722173254.3879-1-puranjay%40kernel.org
patch subject: [PATCH bpf-next] bpf, arm64: JIT support for private stack
config: arm64-randconfig-001-20250723 (https://download.01.org/0day-ci/archive/20250723/202507232327.S1FR5cNc-lkp@intel.com/config)
compiler: clang version 22.0.0git (https://github.com/llvm/llvm-project 853c343b45b3e83cc5eeef5a52fc8cc9d8a09252)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250723/202507232327.S1FR5cNc-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202507232327.S1FR5cNc-lkp@intel.com/
All warnings (new ones prefixed by >>):
>> arch/arm64/net/bpf_jit_comp.c:2031:6: warning: variable 'ro_header' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized]
2031 | if (build_body(&ctx, extra_pass)) {
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
arch/arm64/net/bpf_jit_comp.c:2160:8: note: uninitialized use occurs here
2160 | if (!ro_header && priv_stack_ptr) {
| ^~~~~~~~~
arch/arm64/net/bpf_jit_comp.c:2031:2: note: remove the 'if' if its condition is always false
2031 | if (build_body(&ctx, extra_pass)) {
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2032 | prog = orig_prog;
| ~~~~~~~~~~~~~~~~~
2033 | goto out_off;
| ~~~~~~~~~~~~~
2034 | }
| ~
arch/arm64/net/bpf_jit_comp.c:2026:6: warning: variable 'ro_header' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized]
2026 | if (build_prologue(&ctx, was_classic)) {
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
arch/arm64/net/bpf_jit_comp.c:2160:8: note: uninitialized use occurs here
2160 | if (!ro_header && priv_stack_ptr) {
| ^~~~~~~~~
arch/arm64/net/bpf_jit_comp.c:2026:2: note: remove the 'if' if its condition is always false
2026 | if (build_prologue(&ctx, was_classic)) {
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2027 | prog = orig_prog;
| ~~~~~~~~~~~~~~~~~
2028 | goto out_off;
| ~~~~~~~~~~~~~
2029 | }
| ~
arch/arm64/net/bpf_jit_comp.c:2010:6: warning: variable 'ro_header' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized]
2010 | if (ctx.offset == NULL) {
| ^~~~~~~~~~~~~~~~~~
arch/arm64/net/bpf_jit_comp.c:2160:8: note: uninitialized use occurs here
2160 | if (!ro_header && priv_stack_ptr) {
| ^~~~~~~~~
arch/arm64/net/bpf_jit_comp.c:2010:2: note: remove the 'if' if its condition is always false
2010 | if (ctx.offset == NULL) {
| ^~~~~~~~~~~~~~~~~~~~~~~~~
2011 | prog = orig_prog;
| ~~~~~~~~~~~~~~~~~
2012 | goto out_off;
| ~~~~~~~~~~~~~
2013 | }
| ~
arch/arm64/net/bpf_jit_comp.c:1942:37: note: initialize the variable 'ro_header' to silence this warning
1942 | struct bpf_binary_header *ro_header;
| ^
| = NULL
3 warnings generated.
vim +2031 arch/arm64/net/bpf_jit_comp.c
db496944fdaaf2 Alexei Starovoitov 2017-12-14 1936
d1c55ab5e41fcd Daniel Borkmann 2016-05-13 1937 struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog)
e54bcde3d69d40 Zi Shen Lim 2014-08-26 1938 {
b2ad54e1533e91 Xu Kuohai 2022-07-11 1939 int image_size, prog_size, extable_size, extable_align, extable_offset;
26eb042ee4c784 Daniel Borkmann 2016-05-13 1940 struct bpf_prog *tmp, *orig_prog = prog;
b569c1c622c5e6 Daniel Borkmann 2014-09-16 1941 struct bpf_binary_header *header;
1dad391daef129 Puranjay Mohan 2024-02-28 1942 struct bpf_binary_header *ro_header;
db496944fdaaf2 Alexei Starovoitov 2017-12-14 1943 struct arm64_jit_data *jit_data;
291f131eb536b5 Puranjay Mohan 2025-07-22 1944 void __percpu *priv_stack_ptr = NULL;
56ea6a8b4949c6 Daniel Borkmann 2018-05-14 1945 bool was_classic = bpf_prog_was_classic(prog);
291f131eb536b5 Puranjay Mohan 2025-07-22 1946 int priv_stack_alloc_sz;
26eb042ee4c784 Daniel Borkmann 2016-05-13 1947 bool tmp_blinded = false;
db496944fdaaf2 Alexei Starovoitov 2017-12-14 1948 bool extra_pass = false;
e54bcde3d69d40 Zi Shen Lim 2014-08-26 1949 struct jit_ctx ctx;
b569c1c622c5e6 Daniel Borkmann 2014-09-16 1950 u8 *image_ptr;
1dad391daef129 Puranjay Mohan 2024-02-28 1951 u8 *ro_image_ptr;
ddbe9ec55039dd Xu Kuohai 2024-09-03 1952 int body_idx;
ddbe9ec55039dd Xu Kuohai 2024-09-03 1953 int exentry_idx;
e54bcde3d69d40 Zi Shen Lim 2014-08-26 1954
60b58afc96c9df Alexei Starovoitov 2017-12-14 1955 if (!prog->jit_requested)
26eb042ee4c784 Daniel Borkmann 2016-05-13 1956 return orig_prog;
26eb042ee4c784 Daniel Borkmann 2016-05-13 1957
26eb042ee4c784 Daniel Borkmann 2016-05-13 1958 tmp = bpf_jit_blind_constants(prog);
26eb042ee4c784 Daniel Borkmann 2016-05-13 1959 /* If blinding was requested and we failed during blinding,
26eb042ee4c784 Daniel Borkmann 2016-05-13 1960 * we must fall back to the interpreter.
26eb042ee4c784 Daniel Borkmann 2016-05-13 1961 */
26eb042ee4c784 Daniel Borkmann 2016-05-13 1962 if (IS_ERR(tmp))
26eb042ee4c784 Daniel Borkmann 2016-05-13 1963 return orig_prog;
26eb042ee4c784 Daniel Borkmann 2016-05-13 1964 if (tmp != prog) {
26eb042ee4c784 Daniel Borkmann 2016-05-13 1965 tmp_blinded = true;
26eb042ee4c784 Daniel Borkmann 2016-05-13 1966 prog = tmp;
26eb042ee4c784 Daniel Borkmann 2016-05-13 1967 }
e54bcde3d69d40 Zi Shen Lim 2014-08-26 1968
db496944fdaaf2 Alexei Starovoitov 2017-12-14 1969 jit_data = prog->aux->jit_data;
db496944fdaaf2 Alexei Starovoitov 2017-12-14 1970 if (!jit_data) {
db496944fdaaf2 Alexei Starovoitov 2017-12-14 1971 jit_data = kzalloc(sizeof(*jit_data), GFP_KERNEL);
db496944fdaaf2 Alexei Starovoitov 2017-12-14 1972 if (!jit_data) {
db496944fdaaf2 Alexei Starovoitov 2017-12-14 1973 prog = orig_prog;
db496944fdaaf2 Alexei Starovoitov 2017-12-14 1974 goto out;
db496944fdaaf2 Alexei Starovoitov 2017-12-14 1975 }
db496944fdaaf2 Alexei Starovoitov 2017-12-14 1976 prog->aux->jit_data = jit_data;
db496944fdaaf2 Alexei Starovoitov 2017-12-14 1977 }
291f131eb536b5 Puranjay Mohan 2025-07-22 1978 priv_stack_ptr = prog->aux->priv_stack_ptr;
291f131eb536b5 Puranjay Mohan 2025-07-22 1979 if (!priv_stack_ptr && prog->aux->jits_use_priv_stack) {
291f131eb536b5 Puranjay Mohan 2025-07-22 1980 /* Allocate actual private stack size with verifier-calculated
291f131eb536b5 Puranjay Mohan 2025-07-22 1981 * stack size plus two memory guards to protect overflow and
291f131eb536b5 Puranjay Mohan 2025-07-22 1982 * underflow.
291f131eb536b5 Puranjay Mohan 2025-07-22 1983 */
291f131eb536b5 Puranjay Mohan 2025-07-22 1984 priv_stack_alloc_sz = round_up(prog->aux->stack_depth, 16) +
291f131eb536b5 Puranjay Mohan 2025-07-22 1985 2 * PRIV_STACK_GUARD_SZ;
291f131eb536b5 Puranjay Mohan 2025-07-22 1986 priv_stack_ptr = __alloc_percpu_gfp(priv_stack_alloc_sz, 16, GFP_KERNEL);
291f131eb536b5 Puranjay Mohan 2025-07-22 1987 if (!priv_stack_ptr) {
291f131eb536b5 Puranjay Mohan 2025-07-22 1988 prog = orig_prog;
291f131eb536b5 Puranjay Mohan 2025-07-22 1989 goto out_priv_stack;
291f131eb536b5 Puranjay Mohan 2025-07-22 1990 }
291f131eb536b5 Puranjay Mohan 2025-07-22 1991
291f131eb536b5 Puranjay Mohan 2025-07-22 1992 priv_stack_init_guard(priv_stack_ptr, priv_stack_alloc_sz);
291f131eb536b5 Puranjay Mohan 2025-07-22 1993 prog->aux->priv_stack_ptr = priv_stack_ptr;
291f131eb536b5 Puranjay Mohan 2025-07-22 1994 }
db496944fdaaf2 Alexei Starovoitov 2017-12-14 1995 if (jit_data->ctx.offset) {
db496944fdaaf2 Alexei Starovoitov 2017-12-14 1996 ctx = jit_data->ctx;
1dad391daef129 Puranjay Mohan 2024-02-28 1997 ro_image_ptr = jit_data->ro_image;
1dad391daef129 Puranjay Mohan 2024-02-28 1998 ro_header = jit_data->ro_header;
db496944fdaaf2 Alexei Starovoitov 2017-12-14 1999 header = jit_data->header;
1dad391daef129 Puranjay Mohan 2024-02-28 2000 image_ptr = (void *)header + ((void *)ro_image_ptr
1dad391daef129 Puranjay Mohan 2024-02-28 2001 - (void *)ro_header);
db496944fdaaf2 Alexei Starovoitov 2017-12-14 2002 extra_pass = true;
800834285361dc Jean-Philippe Brucker 2020-07-28 2003 prog_size = sizeof(u32) * ctx.idx;
db496944fdaaf2 Alexei Starovoitov 2017-12-14 2004 goto skip_init_ctx;
db496944fdaaf2 Alexei Starovoitov 2017-12-14 2005 }
e54bcde3d69d40 Zi Shen Lim 2014-08-26 2006 memset(&ctx, 0, sizeof(ctx));
e54bcde3d69d40 Zi Shen Lim 2014-08-26 2007 ctx.prog = prog;
e54bcde3d69d40 Zi Shen Lim 2014-08-26 2008
19f68ed6dc90c9 Aijun Sun 2022-08-04 2009 ctx.offset = kvcalloc(prog->len + 1, sizeof(int), GFP_KERNEL);
26eb042ee4c784 Daniel Borkmann 2016-05-13 2010 if (ctx.offset == NULL) {
26eb042ee4c784 Daniel Borkmann 2016-05-13 2011 prog = orig_prog;
db496944fdaaf2 Alexei Starovoitov 2017-12-14 2012 goto out_off;
26eb042ee4c784 Daniel Borkmann 2016-05-13 2013 }
e54bcde3d69d40 Zi Shen Lim 2014-08-26 2014
4dd31243e30843 Puranjay Mohan 2024-03-25 2015 ctx.user_vm_start = bpf_arena_get_user_vm_start(prog->aux->arena);
5d4fa9ec5643a5 Xu Kuohai 2024-08-26 2016 ctx.arena_vm_start = bpf_arena_get_kern_vm_start(prog->aux->arena);
5b3d19b9bd4080 Xu Kuohai 2022-03-21 2017
291f131eb536b5 Puranjay Mohan 2025-07-22 2018 if (priv_stack_ptr)
291f131eb536b5 Puranjay Mohan 2025-07-22 2019 ctx.priv_sp_used = true;
291f131eb536b5 Puranjay Mohan 2025-07-22 2020
ddbe9ec55039dd Xu Kuohai 2024-09-03 2021 /* Pass 1: Estimate the maximum image size.
68e4f238b0e9d3 Hou Tao 2022-02-26 2022 *
68e4f238b0e9d3 Hou Tao 2022-02-26 2023 * BPF line info needs ctx->offset[i] to be the offset of
68e4f238b0e9d3 Hou Tao 2022-02-26 2024 * instruction[i] in jited image, so build prologue first.
68e4f238b0e9d3 Hou Tao 2022-02-26 2025 */
5d4fa9ec5643a5 Xu Kuohai 2024-08-26 2026 if (build_prologue(&ctx, was_classic)) {
26eb042ee4c784 Daniel Borkmann 2016-05-13 2027 prog = orig_prog;
26eb042ee4c784 Daniel Borkmann 2016-05-13 2028 goto out_off;
26eb042ee4c784 Daniel Borkmann 2016-05-13 2029 }
e54bcde3d69d40 Zi Shen Lim 2014-08-26 2030
68e4f238b0e9d3 Hou Tao 2022-02-26 @2031 if (build_body(&ctx, extra_pass)) {
ddb55992b04d97 Zi Shen Lim 2016-06-08 2032 prog = orig_prog;
ddb55992b04d97 Zi Shen Lim 2016-06-08 2033 goto out_off;
ddb55992b04d97 Zi Shen Lim 2016-06-08 2034 }
51c9fbb1b146f3 Zi Shen Lim 2014-12-03 2035
51c9fbb1b146f3 Zi Shen Lim 2014-12-03 2036 ctx.epilogue_offset = ctx.idx;
0dfefc2ea2f29c James Morse 2021-12-09 2037 build_epilogue(&ctx, was_classic);
b2ad54e1533e91 Xu Kuohai 2022-07-11 2038 build_plt(&ctx);
e54bcde3d69d40 Zi Shen Lim 2014-08-26 2039
b2ad54e1533e91 Xu Kuohai 2022-07-11 2040 extable_align = __alignof__(struct exception_table_entry);
800834285361dc Jean-Philippe Brucker 2020-07-28 2041 extable_size = prog->aux->num_exentries *
800834285361dc Jean-Philippe Brucker 2020-07-28 2042 sizeof(struct exception_table_entry);
800834285361dc Jean-Philippe Brucker 2020-07-28 2043
ddbe9ec55039dd Xu Kuohai 2024-09-03 2044 /* Now we know the maximum image size. */
800834285361dc Jean-Philippe Brucker 2020-07-28 2045 prog_size = sizeof(u32) * ctx.idx;
b2ad54e1533e91 Xu Kuohai 2022-07-11 2046 /* also allocate space for plt target */
b2ad54e1533e91 Xu Kuohai 2022-07-11 2047 extable_offset = round_up(prog_size + PLT_TARGET_SIZE, extable_align);
b2ad54e1533e91 Xu Kuohai 2022-07-11 2048 image_size = extable_offset + extable_size;
1dad391daef129 Puranjay Mohan 2024-02-28 2049 ro_header = bpf_jit_binary_pack_alloc(image_size, &ro_image_ptr,
1dad391daef129 Puranjay Mohan 2024-02-28 2050 sizeof(u32), &header, &image_ptr,
1dad391daef129 Puranjay Mohan 2024-02-28 2051 jit_fill_hole);
1dad391daef129 Puranjay Mohan 2024-02-28 2052 if (!ro_header) {
26eb042ee4c784 Daniel Borkmann 2016-05-13 2053 prog = orig_prog;
26eb042ee4c784 Daniel Borkmann 2016-05-13 2054 goto out_off;
26eb042ee4c784 Daniel Borkmann 2016-05-13 2055 }
e54bcde3d69d40 Zi Shen Lim 2014-08-26 2056
ddbe9ec55039dd Xu Kuohai 2024-09-03 2057 /* Pass 2: Determine jited position and result for each instruction */
e54bcde3d69d40 Zi Shen Lim 2014-08-26 2058
1dad391daef129 Puranjay Mohan 2024-02-28 2059 /*
1dad391daef129 Puranjay Mohan 2024-02-28 2060 * Use the image(RW) for writing the JITed instructions. But also save
1dad391daef129 Puranjay Mohan 2024-02-28 2061 * the ro_image(RX) for calculating the offsets in the image. The RW
1dad391daef129 Puranjay Mohan 2024-02-28 2062 * image will be later copied to the RX image from where the program
1dad391daef129 Puranjay Mohan 2024-02-28 2063 * will run. The bpf_jit_binary_pack_finalize() will do this copy in the
1dad391daef129 Puranjay Mohan 2024-02-28 2064 * final step.
1dad391daef129 Puranjay Mohan 2024-02-28 2065 */
425e1ed73e6574 Luc Van Oostenryck 2017-06-28 2066 ctx.image = (__le32 *)image_ptr;
1dad391daef129 Puranjay Mohan 2024-02-28 2067 ctx.ro_image = (__le32 *)ro_image_ptr;
800834285361dc Jean-Philippe Brucker 2020-07-28 2068 if (extable_size)
1dad391daef129 Puranjay Mohan 2024-02-28 2069 prog->aux->extable = (void *)ro_image_ptr + extable_offset;
db496944fdaaf2 Alexei Starovoitov 2017-12-14 2070 skip_init_ctx:
e54bcde3d69d40 Zi Shen Lim 2014-08-26 2071 ctx.idx = 0;
800834285361dc Jean-Philippe Brucker 2020-07-28 2072 ctx.exentry_idx = 0;
ddbe9ec55039dd Xu Kuohai 2024-09-03 2073 ctx.write = true;
b569c1c622c5e6 Daniel Borkmann 2014-09-16 2074
5d4fa9ec5643a5 Xu Kuohai 2024-08-26 2075 build_prologue(&ctx, was_classic);
e54bcde3d69d40 Zi Shen Lim 2014-08-26 2076
ddbe9ec55039dd Xu Kuohai 2024-09-03 2077 /* Record exentry_idx and body_idx before first build_body */
ddbe9ec55039dd Xu Kuohai 2024-09-03 2078 exentry_idx = ctx.exentry_idx;
ddbe9ec55039dd Xu Kuohai 2024-09-03 2079 body_idx = ctx.idx;
ddbe9ec55039dd Xu Kuohai 2024-09-03 2080 /* Dont write body instructions to memory for now */
ddbe9ec55039dd Xu Kuohai 2024-09-03 2081 ctx.write = false;
ddbe9ec55039dd Xu Kuohai 2024-09-03 2082
8c11ea5ce13da0 Daniel Borkmann 2018-11-26 2083 if (build_body(&ctx, extra_pass)) {
26eb042ee4c784 Daniel Borkmann 2016-05-13 2084 prog = orig_prog;
1dad391daef129 Puranjay Mohan 2024-02-28 2085 goto out_free_hdr;
60ef0494f197d4 Daniel Borkmann 2014-09-11 2086 }
e54bcde3d69d40 Zi Shen Lim 2014-08-26 2087
ddbe9ec55039dd Xu Kuohai 2024-09-03 2088 ctx.epilogue_offset = ctx.idx;
ddbe9ec55039dd Xu Kuohai 2024-09-03 2089 ctx.exentry_idx = exentry_idx;
ddbe9ec55039dd Xu Kuohai 2024-09-03 2090 ctx.idx = body_idx;
ddbe9ec55039dd Xu Kuohai 2024-09-03 2091 ctx.write = true;
ddbe9ec55039dd Xu Kuohai 2024-09-03 2092
ddbe9ec55039dd Xu Kuohai 2024-09-03 2093 /* Pass 3: Adjust jump offset and write final image */
ddbe9ec55039dd Xu Kuohai 2024-09-03 2094 if (build_body(&ctx, extra_pass) ||
ddbe9ec55039dd Xu Kuohai 2024-09-03 2095 WARN_ON_ONCE(ctx.idx != ctx.epilogue_offset)) {
ddbe9ec55039dd Xu Kuohai 2024-09-03 2096 prog = orig_prog;
ddbe9ec55039dd Xu Kuohai 2024-09-03 2097 goto out_free_hdr;
ddbe9ec55039dd Xu Kuohai 2024-09-03 2098 }
ddbe9ec55039dd Xu Kuohai 2024-09-03 2099
0dfefc2ea2f29c James Morse 2021-12-09 2100 build_epilogue(&ctx, was_classic);
b2ad54e1533e91 Xu Kuohai 2022-07-11 2101 build_plt(&ctx);
e54bcde3d69d40 Zi Shen Lim 2014-08-26 2102
ddbe9ec55039dd Xu Kuohai 2024-09-03 2103 /* Extra pass to validate JITed code. */
efc9909fdce00a Xu Kuohai 2022-07-11 2104 if (validate_ctx(&ctx)) {
26eb042ee4c784 Daniel Borkmann 2016-05-13 2105 prog = orig_prog;
1dad391daef129 Puranjay Mohan 2024-02-28 2106 goto out_free_hdr;
42ff712bc0c3d7 Zi Shen Lim 2016-01-13 2107 }
42ff712bc0c3d7 Zi Shen Lim 2016-01-13 2108
ddbe9ec55039dd Xu Kuohai 2024-09-03 2109 /* update the real prog size */
ddbe9ec55039dd Xu Kuohai 2024-09-03 2110 prog_size = sizeof(u32) * ctx.idx;
ddbe9ec55039dd Xu Kuohai 2024-09-03 2111
e54bcde3d69d40 Zi Shen Lim 2014-08-26 2112 /* And we're done. */
e54bcde3d69d40 Zi Shen Lim 2014-08-26 2113 if (bpf_jit_enable > 1)
800834285361dc Jean-Philippe Brucker 2020-07-28 2114 bpf_jit_dump(prog->len, prog_size, 2, ctx.image);
e54bcde3d69d40 Zi Shen Lim 2014-08-26 2115
db496944fdaaf2 Alexei Starovoitov 2017-12-14 2116 if (!prog->is_func || extra_pass) {
ddbe9ec55039dd Xu Kuohai 2024-09-03 2117 /* The jited image may shrink since the jited result for
ddbe9ec55039dd Xu Kuohai 2024-09-03 2118 * BPF_CALL to subprog may be changed from indirect call
ddbe9ec55039dd Xu Kuohai 2024-09-03 2119 * to direct call.
ddbe9ec55039dd Xu Kuohai 2024-09-03 2120 */
ddbe9ec55039dd Xu Kuohai 2024-09-03 2121 if (extra_pass && ctx.idx > jit_data->ctx.idx) {
ddbe9ec55039dd Xu Kuohai 2024-09-03 2122 pr_err_once("multi-func JIT bug %d > %d\n",
db496944fdaaf2 Alexei Starovoitov 2017-12-14 2123 ctx.idx, jit_data->ctx.idx);
db496944fdaaf2 Alexei Starovoitov 2017-12-14 2124 prog->bpf_func = NULL;
db496944fdaaf2 Alexei Starovoitov 2017-12-14 2125 prog->jited = 0;
10f3b29c65bb2f Eric Dumazet 2022-05-31 2126 prog->jited_len = 0;
1dad391daef129 Puranjay Mohan 2024-02-28 2127 goto out_free_hdr;
1dad391daef129 Puranjay Mohan 2024-02-28 2128 }
9919c5c98cb25d Rafael Passos 2024-06-14 2129 if (WARN_ON(bpf_jit_binary_pack_finalize(ro_header, header))) {
1dad391daef129 Puranjay Mohan 2024-02-28 2130 /* ro_header has been freed */
1dad391daef129 Puranjay Mohan 2024-02-28 2131 ro_header = NULL;
1dad391daef129 Puranjay Mohan 2024-02-28 2132 prog = orig_prog;
db496944fdaaf2 Alexei Starovoitov 2017-12-14 2133 goto out_off;
db496944fdaaf2 Alexei Starovoitov 2017-12-14 2134 }
1dad391daef129 Puranjay Mohan 2024-02-28 2135 /*
1dad391daef129 Puranjay Mohan 2024-02-28 2136 * The instructions have now been copied to the ROX region from
1dad391daef129 Puranjay Mohan 2024-02-28 2137 * where they will execute. Now the data cache has to be cleaned to
1dad391daef129 Puranjay Mohan 2024-02-28 2138 * the PoU and the I-cache has to be invalidated for the VAs.
1dad391daef129 Puranjay Mohan 2024-02-28 2139 */
1dad391daef129 Puranjay Mohan 2024-02-28 2140 bpf_flush_icache(ro_header, ctx.ro_image + ctx.idx);
db496944fdaaf2 Alexei Starovoitov 2017-12-14 2141 } else {
db496944fdaaf2 Alexei Starovoitov 2017-12-14 2142 jit_data->ctx = ctx;
1dad391daef129 Puranjay Mohan 2024-02-28 2143 jit_data->ro_image = ro_image_ptr;
db496944fdaaf2 Alexei Starovoitov 2017-12-14 2144 jit_data->header = header;
1dad391daef129 Puranjay Mohan 2024-02-28 2145 jit_data->ro_header = ro_header;
db496944fdaaf2 Alexei Starovoitov 2017-12-14 2146 }
1dad391daef129 Puranjay Mohan 2024-02-28 2147
1dad391daef129 Puranjay Mohan 2024-02-28 2148 prog->bpf_func = (void *)ctx.ro_image;
a91263d520246b Daniel Borkmann 2015-09-30 2149 prog->jited = 1;
800834285361dc Jean-Philippe Brucker 2020-07-28 2150 prog->jited_len = prog_size;
26eb042ee4c784 Daniel Borkmann 2016-05-13 2151
db496944fdaaf2 Alexei Starovoitov 2017-12-14 2152 if (!prog->is_func || extra_pass) {
dda7596c109fc3 Hou Tao 2022-02-26 2153 int i;
dda7596c109fc3 Hou Tao 2022-02-26 2154
dda7596c109fc3 Hou Tao 2022-02-26 2155 /* offset[prog->len] is the size of program */
dda7596c109fc3 Hou Tao 2022-02-26 2156 for (i = 0; i <= prog->len; i++)
dda7596c109fc3 Hou Tao 2022-02-26 2157 ctx.offset[i] *= AARCH64_INSN_SIZE;
32f6865c7aa3c4 Ilias Apalodimas 2020-09-17 2158 bpf_prog_fill_jited_linfo(prog, ctx.offset + 1);
26eb042ee4c784 Daniel Borkmann 2016-05-13 2159 out_off:
291f131eb536b5 Puranjay Mohan 2025-07-22 2160 if (!ro_header && priv_stack_ptr) {
291f131eb536b5 Puranjay Mohan 2025-07-22 2161 free_percpu(priv_stack_ptr);
291f131eb536b5 Puranjay Mohan 2025-07-22 2162 prog->aux->priv_stack_ptr = NULL;
291f131eb536b5 Puranjay Mohan 2025-07-22 2163 }
19f68ed6dc90c9 Aijun Sun 2022-08-04 2164 kvfree(ctx.offset);
291f131eb536b5 Puranjay Mohan 2025-07-22 2165 out_priv_stack:
db496944fdaaf2 Alexei Starovoitov 2017-12-14 2166 kfree(jit_data);
db496944fdaaf2 Alexei Starovoitov 2017-12-14 2167 prog->aux->jit_data = NULL;
db496944fdaaf2 Alexei Starovoitov 2017-12-14 2168 }
26eb042ee4c784 Daniel Borkmann 2016-05-13 2169 out:
26eb042ee4c784 Daniel Borkmann 2016-05-13 2170 if (tmp_blinded)
26eb042ee4c784 Daniel Borkmann 2016-05-13 2171 bpf_jit_prog_release_other(prog, prog == orig_prog ?
26eb042ee4c784 Daniel Borkmann 2016-05-13 2172 tmp : orig_prog);
d1c55ab5e41fcd Daniel Borkmann 2016-05-13 2173 return prog;
1dad391daef129 Puranjay Mohan 2024-02-28 2174
1dad391daef129 Puranjay Mohan 2024-02-28 2175 out_free_hdr:
1dad391daef129 Puranjay Mohan 2024-02-28 2176 if (header) {
1dad391daef129 Puranjay Mohan 2024-02-28 2177 bpf_arch_text_copy(&ro_header->size, &header->size,
1dad391daef129 Puranjay Mohan 2024-02-28 2178 sizeof(header->size));
1dad391daef129 Puranjay Mohan 2024-02-28 2179 bpf_jit_binary_pack_free(ro_header, header);
1dad391daef129 Puranjay Mohan 2024-02-28 2180 }
1dad391daef129 Puranjay Mohan 2024-02-28 2181 goto out_off;
e54bcde3d69d40 Zi Shen Lim 2014-08-26 2182 }
91fc957c9b1d6c Ard Biesheuvel 2018-11-23 2183
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
next prev parent reply other threads:[~2025-07-23 15:52 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-22 17:32 [PATCH bpf-next] bpf, arm64: JIT support for private stack Puranjay Mohan
2025-07-23 15:52 ` kernel test robot [this message]
2025-07-23 22:01 ` Yonghong Song
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202507232327.S1FR5cNc-lkp@intel.com \
--to=lkp@intel.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=catalin.marinas@arm.com \
--cc=daniel@iogearbox.net \
--cc=eddyz87@gmail.com \
--cc=haoluo@google.com \
--cc=john.fastabend@gmail.com \
--cc=jolsa@kernel.org \
--cc=kpsingh@kernel.org \
--cc=llvm@lists.linux.dev \
--cc=martin.lau@linux.dev \
--cc=mykolal@fb.com \
--cc=oe-kbuild-all@lists.linux.dev \
--cc=puranjay@kernel.org \
--cc=sdf@fomichev.me \
--cc=song@kernel.org \
--cc=will@kernel.org \
--cc=xukuohai@huaweicloud.com \
--cc=yonghong.song@linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.