lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Message-ID: <202508191020.PBBh07cK-lkp@intel.com>
Date: Tue, 19 Aug 2025 09:13:29 +0300
From: Dan Carpenter <dan.carpenter@...aro.org>
To: oe-kbuild@...ts.linux.dev, Chenghao Duan <duanchenghao@...inos.cn>
Cc: lkp@...el.com, oe-kbuild-all@...ts.linux.dev,
	linux-kernel@...r.kernel.org, Huacai Chen <chenhuacai@...nel.org>,
	George Guo <guodongtai@...inos.cn>
Subject: arch/loongarch/net/bpf_jit.c:1547 __arch_prepare_bpf_trampoline()
 error: uninitialized symbol 'retval_off'.

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   be48bcf004f9d0c9207ff21d0edb3b42f253829e
commit: f9b6b41f0cf31791541cea9644ddbedb46465801 LoongArch: BPF: Add basic bpf trampoline support
date:   2 weeks ago
config: loongarch-randconfig-r073-20250818 (https://download.01.org/0day-ci/archive/20250819/202508191020.PBBh07cK-lkp@intel.com/config)
compiler: loongarch64-linux-gcc (GCC) 15.1.0

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@...el.com>
| Reported-by: Dan Carpenter <dan.carpenter@...aro.org>
| Closes: https://lore.kernel.org/r/202508191020.PBBh07cK-lkp@intel.com/

New smatch warnings:
arch/loongarch/net/bpf_jit.c:1547 __arch_prepare_bpf_trampoline() error: uninitialized symbol 'retval_off'.

vim +/retval_off +1547 arch/loongarch/net/bpf_jit.c

f9b6b41f0cf317 Chenghao Duan 2025-08-05  1419  static int __arch_prepare_bpf_trampoline(struct jit_ctx *ctx, struct bpf_tramp_image *im,
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1420  					 const struct btf_func_model *m, struct bpf_tramp_links *tlinks,
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1421  					 void *func_addr, u32 flags)
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1422  {
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1423  	int i, ret, save_ret;
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1424  	int stack_size = 0, nargs = 0;
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1425  	int retval_off, args_off, nargs_off, ip_off, run_ctx_off, sreg_off;
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1426  	void *orig_call = func_addr;
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1427  	struct bpf_tramp_links *fentry = &tlinks[BPF_TRAMP_FENTRY];
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1428  	struct bpf_tramp_links *fexit = &tlinks[BPF_TRAMP_FEXIT];
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1429  	struct bpf_tramp_links *fmod_ret = &tlinks[BPF_TRAMP_MODIFY_RETURN];
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1430  	u32 **branches = NULL;
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1431  
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1432  	if (flags & (BPF_TRAMP_F_ORIG_STACK | BPF_TRAMP_F_SHARE_IPMODIFY))
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1433  		return -ENOTSUPP;
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1434  
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1435  	/*
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1436  	 * FP + 8       [ RA to parent func ] return address to parent
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1437  	 *                    function
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1438  	 * FP + 0       [ FP of parent func ] frame pointer of parent
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1439  	 *                    function
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1440  	 * FP - 8       [ T0 to traced func ] return address of traced
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1441  	 *                    function
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1442  	 * FP - 16      [ FP of traced func ] frame pointer of traced
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1443  	 *                    function
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1444  	 *
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1445  	 * FP - retval_off  [ return value      ] BPF_TRAMP_F_CALL_ORIG or
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1446  	 *                    BPF_TRAMP_F_RET_FENTRY_RET
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1447  	 *                  [ argN              ]
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1448  	 *                  [ ...               ]
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1449  	 * FP - args_off    [ arg1              ]
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1450  	 *
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1451  	 * FP - nargs_off   [ regs count        ]
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1452  	 *
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1453  	 * FP - ip_off      [ traced func   ] BPF_TRAMP_F_IP_ARG
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1454  	 *
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1455  	 * FP - run_ctx_off [ bpf_tramp_run_ctx ]
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1456  	 *
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1457  	 * FP - sreg_off    [ callee saved reg  ]
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1458  	 *
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1459  	 */
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1460  
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1461  	if (m->nr_args > LOONGARCH_MAX_REG_ARGS)
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1462  		return -ENOTSUPP;
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1463  
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1464  	if (flags & (BPF_TRAMP_F_ORIG_STACK | BPF_TRAMP_F_SHARE_IPMODIFY))
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1465  		return -ENOTSUPP;
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1466  
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1467  	stack_size = 0;
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1468  
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1469  	/* Room of trampoline frame to store return address and frame pointer */
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1470  	stack_size += 16;
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1471  
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1472  	save_ret = flags & (BPF_TRAMP_F_CALL_ORIG | BPF_TRAMP_F_RET_FENTRY_RET);
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1473  	if (save_ret) {
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1474  		/* Save BPF R0 and A0 */
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1475  		stack_size += 16;
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1476  		retval_off = stack_size;
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1477  	}

retval_off is uninitialized on the else path.

f9b6b41f0cf317 Chenghao Duan 2025-08-05  1478  
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1479  	/* Room of trampoline frame to store args */
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1480  	nargs = m->nr_args;
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1481  	stack_size += nargs * 8;
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1482  	args_off = stack_size;
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1483  
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1484  	/* Room of trampoline frame to store args number */
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1485  	stack_size += 8;
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1486  	nargs_off = stack_size;
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1487  
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1488  	/* Room of trampoline frame to store ip address */
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1489  	if (flags & BPF_TRAMP_F_IP_ARG) {
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1490  		stack_size += 8;
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1491  		ip_off = stack_size;
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1492  	}
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1493  
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1494  	/* Room of trampoline frame to store struct bpf_tramp_run_ctx */
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1495  	stack_size += round_up(sizeof(struct bpf_tramp_run_ctx), 8);
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1496  	run_ctx_off = stack_size;
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1497  
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1498  	stack_size += 8;
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1499  	sreg_off = stack_size;
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1500  
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1501  	stack_size = round_up(stack_size, 16);
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1502  
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1503  	/* For the trampoline called from function entry */
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1504  	/* RA and FP for parent function */
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1505  	emit_insn(ctx, addid, LOONGARCH_GPR_SP, LOONGARCH_GPR_SP, -16);
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1506  	emit_insn(ctx, std, LOONGARCH_GPR_RA, LOONGARCH_GPR_SP, 8);
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1507  	emit_insn(ctx, std, LOONGARCH_GPR_FP, LOONGARCH_GPR_SP, 0);
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1508  	emit_insn(ctx, addid, LOONGARCH_GPR_FP, LOONGARCH_GPR_SP, 16);
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1509  
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1510  	/* RA and FP for traced function */
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1511  	emit_insn(ctx, addid, LOONGARCH_GPR_SP, LOONGARCH_GPR_SP, -stack_size);
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1512  	emit_insn(ctx, std, LOONGARCH_GPR_T0, LOONGARCH_GPR_SP, stack_size - 8);
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1513  	emit_insn(ctx, std, LOONGARCH_GPR_FP, LOONGARCH_GPR_SP, stack_size - 16);
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1514  	emit_insn(ctx, addid, LOONGARCH_GPR_FP, LOONGARCH_GPR_SP, stack_size);
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1515  
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1516  	/* callee saved register S1 to pass start time */
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1517  	emit_insn(ctx, std, LOONGARCH_GPR_S1, LOONGARCH_GPR_FP, -sreg_off);
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1518  
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1519  	/* store ip address of the traced function */
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1520  	if (flags & BPF_TRAMP_F_IP_ARG) {
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1521  		move_imm(ctx, LOONGARCH_GPR_T1, (const s64)func_addr, false);
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1522  		emit_insn(ctx, std, LOONGARCH_GPR_T1, LOONGARCH_GPR_FP, -ip_off);
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1523  	}
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1524  
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1525  	/* store nargs number */
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1526  	move_imm(ctx, LOONGARCH_GPR_T1, nargs, false);
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1527  	emit_insn(ctx, std, LOONGARCH_GPR_T1, LOONGARCH_GPR_FP, -nargs_off);
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1528  
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1529  	store_args(ctx, nargs, args_off);
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1530  
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1531  	/* To traced function */
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1532  	/* Ftrace jump skips 2 NOP instructions */
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1533  	if (is_kernel_text((unsigned long)orig_call))
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1534  		orig_call += LOONGARCH_FENTRY_NBYTES;
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1535  	/* Direct jump skips 5 NOP instructions */
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1536  	else if (is_bpf_text_address((unsigned long)orig_call))
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1537  		orig_call += LOONGARCH_BPF_FENTRY_NBYTES;
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1538  
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1539  	if (flags & BPF_TRAMP_F_CALL_ORIG) {
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1540  		move_imm(ctx, LOONGARCH_GPR_A0, (const s64)im, false);
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1541  		ret = emit_call(ctx, (const u64)__bpf_tramp_enter);
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1542  		if (ret)
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1543  			return ret;
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1544  	}
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1545  
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1546  	for (i = 0; i < fentry->nr_links; i++) {
f9b6b41f0cf317 Chenghao Duan 2025-08-05 @1547  		ret = invoke_bpf_prog(ctx, fentry->links[i], args_off, retval_off,
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1548  				      run_ctx_off, flags & BPF_TRAMP_F_RET_FENTRY_RET);

It's undefined behavior to pass uninitialized data to a function (unless
the function is inlined, I suppose).

f9b6b41f0cf317 Chenghao Duan 2025-08-05  1549  		if (ret)
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1550  			return ret;
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1551  	}
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1552  	if (fmod_ret->nr_links) {
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1553  		branches  = kcalloc(fmod_ret->nr_links, sizeof(u32 *), GFP_KERNEL);
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1554  		if (!branches)
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1555  			return -ENOMEM;
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1556  
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1557  		invoke_bpf_mod_ret(ctx, fmod_ret, args_off, retval_off, run_ctx_off, branches);
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1558  	}
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1559  
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1560  	if (flags & BPF_TRAMP_F_CALL_ORIG) {
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1561  		restore_args(ctx, m->nr_args, args_off);
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1562  		ret = emit_call(ctx, (const u64)orig_call);
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1563  		if (ret)
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1564  			goto out;
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1565  		emit_insn(ctx, std, LOONGARCH_GPR_A0, LOONGARCH_GPR_FP, -retval_off);
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1566  		emit_insn(ctx, std, regmap[BPF_REG_0], LOONGARCH_GPR_FP, -(retval_off - 8));
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1567  		im->ip_after_call = ctx->ro_image + ctx->idx;
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1568  		/* Reserve space for the move_imm + jirl instruction */
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1569  		for (i = 0; i < LOONGARCH_LONG_JUMP_NINSNS; i++)
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1570  			emit_insn(ctx, nop);
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1571  	}
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1572  
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1573  	for (i = 0; ctx->image && i < fmod_ret->nr_links; i++) {
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1574  		int offset = (void *)(&ctx->image[ctx->idx]) - (void *)branches[i];
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1575  		*branches[i] = larch_insn_gen_bne(LOONGARCH_GPR_T1, LOONGARCH_GPR_ZERO, offset);
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1576  	}
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1577  
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1578  	for (i = 0; i < fexit->nr_links; i++) {
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1579  		ret = invoke_bpf_prog(ctx, fexit->links[i], args_off, retval_off, run_ctx_off, false);
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1580  		if (ret)
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1581  			goto out;
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1582  	}
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1583  
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1584  	if (flags & BPF_TRAMP_F_CALL_ORIG) {
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1585  		im->ip_epilogue = ctx->ro_image + ctx->idx;
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1586  		move_imm(ctx, LOONGARCH_GPR_A0, (const s64)im, false);
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1587  		ret = emit_call(ctx, (const u64)__bpf_tramp_exit);
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1588  		if (ret)
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1589  			goto out;
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1590  	}
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1591  
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1592  	if (flags & BPF_TRAMP_F_RESTORE_REGS)
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1593  		restore_args(ctx, m->nr_args, args_off);
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1594  
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1595  	if (save_ret) {
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1596  		emit_insn(ctx, ldd, LOONGARCH_GPR_A0, LOONGARCH_GPR_FP, -retval_off);
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1597  		emit_insn(ctx, ldd, regmap[BPF_REG_0], LOONGARCH_GPR_FP, -(retval_off - 8));
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1598  	}
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1599  
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1600  	emit_insn(ctx, ldd, LOONGARCH_GPR_S1, LOONGARCH_GPR_FP, -sreg_off);
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1601  
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1602  	/* trampoline called from function entry */
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1603  	emit_insn(ctx, ldd, LOONGARCH_GPR_T0, LOONGARCH_GPR_SP, stack_size - 8);
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1604  	emit_insn(ctx, ldd, LOONGARCH_GPR_FP, LOONGARCH_GPR_SP, stack_size - 16);
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1605  	emit_insn(ctx, addid, LOONGARCH_GPR_SP, LOONGARCH_GPR_SP, stack_size);
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1606  
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1607  	emit_insn(ctx, ldd, LOONGARCH_GPR_RA, LOONGARCH_GPR_SP, 8);
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1608  	emit_insn(ctx, ldd, LOONGARCH_GPR_FP, LOONGARCH_GPR_SP, 0);
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1609  	emit_insn(ctx, addid, LOONGARCH_GPR_SP, LOONGARCH_GPR_SP, 16);
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1610  
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1611  	if (flags & BPF_TRAMP_F_SKIP_FRAME)
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1612  		/* return to parent function */
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1613  		emit_insn(ctx, jirl, LOONGARCH_GPR_ZERO, LOONGARCH_GPR_RA, 0);
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1614  	else
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1615  		/* return to traced function */
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1616  		emit_insn(ctx, jirl, LOONGARCH_GPR_ZERO, LOONGARCH_GPR_T0, 0);
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1617  
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1618  	ret = ctx->idx;
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1619  out:
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1620  	kfree(branches);
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1621  
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1622  	return ret;
f9b6b41f0cf317 Chenghao Duan 2025-08-05  1623  }

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ