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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox