Re: [PATCH bpf-next] bpf, arm64: JIT support for private stack

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxx/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@xxxxxxxxx/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@xxxxxxxxx>
| Closes: https://lore.kernel.org/oe-kbuild-all/202507232327.S1FR5cNc-lkp@xxxxxxxxx/

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




[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux