diff options
Diffstat (limited to 'arch/x86/net/bpf_jit_comp.c')
| -rw-r--r-- | arch/x86/net/bpf_jit_comp.c | 19 | 
1 files changed, 8 insertions, 11 deletions
diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c index a7ba8e178645..df5fac428408 100644 --- a/arch/x86/net/bpf_jit_comp.c +++ b/arch/x86/net/bpf_jit_comp.c @@ -480,7 +480,7 @@ static int emit_call(u8 **pprog, void *func, void *ip)  static int emit_rsb_call(u8 **pprog, void *func, void *ip)  {  	OPTIMIZER_HIDE_VAR(func); -	x86_call_depth_emit_accounting(pprog, func); +	ip += x86_call_depth_emit_accounting(pprog, func, ip);  	return emit_patch(pprog, func, ip, 0xE8);  } @@ -1972,20 +1972,17 @@ populate_extable:  			/* call */  		case BPF_JMP | BPF_CALL: { -			int offs; +			u8 *ip = image + addrs[i - 1];  			func = (u8 *) __bpf_call_base + imm32;  			if (tail_call_reachable) {  				RESTORE_TAIL_CALL_CNT(bpf_prog->aux->stack_depth); -				if (!imm32) -					return -EINVAL; -				offs = 7 + x86_call_depth_emit_accounting(&prog, func); -			} else { -				if (!imm32) -					return -EINVAL; -				offs = x86_call_depth_emit_accounting(&prog, func); +				ip += 7;  			} -			if (emit_call(&prog, func, image + addrs[i - 1] + offs)) +			if (!imm32) +				return -EINVAL; +			ip += x86_call_depth_emit_accounting(&prog, func, ip); +			if (emit_call(&prog, func, ip))  				return -EINVAL;  			break;  		} @@ -2835,7 +2832,7 @@ static int __arch_prepare_bpf_trampoline(struct bpf_tramp_image *im, void *rw_im  		 * Direct-call fentry stub, as such it needs accounting for the  		 * __fentry__ call.  		 */ -		x86_call_depth_emit_accounting(&prog, NULL); +		x86_call_depth_emit_accounting(&prog, NULL, image);  	}  	EMIT1(0x55);		 /* push rbp */  	EMIT3(0x48, 0x89, 0xE5); /* mov rbp, rsp */  |