Commit c96c679
bpf: Fix issue in verifying allow_ptr_leaks
commit d75e30d upstream.
After we converted the capabilities of our networking-bpf program from
cap_sys_admin to cap_net_admin+cap_bpf, our networking-bpf program
failed to start. Because it failed the bpf verifier, and the error log
is "R3 pointer comparison prohibited".
A simple reproducer as follows,
SEC("cls-ingress")
int ingress(struct __sk_buff *skb)
{
struct iphdr *iph = (void *)(long)skb->data + sizeof(struct ethhdr);
if ((long)(iph + 1) > (long)skb->data_end)
return TC_ACT_STOLEN;
return TC_ACT_OK;
}
Per discussion with Yonghong and Alexei [1], comparison of two packet
pointers is not a pointer leak. This patch fixes it.
Our local kernel is 6.1.y and we expect this fix to be backported to
6.1.y, so stable is CCed.
[1]. https://lore.kernel.org/bpf/CAADnVQ+Nmspr7Si+pxWn8zkE7hX-7s93ugwC+94aXSy4uQ9vBg@mail.gmail.com/
Suggested-by: Yonghong Song <yonghong.song@linux.dev>
Suggested-by: Alexei Starovoitov <alexei.starovoitov@gmail.com>
Signed-off-by: Yafang Shao <laoar.shao@gmail.com>
Acked-by: Eduard Zingerman <eddyz87@gmail.com>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20230823020703.3790-2-laoar.shao@gmail.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>1 parent b23c965 commit c96c679
1 file changed
Lines changed: 9 additions & 8 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
10401 | 10401 | | |
10402 | 10402 | | |
10403 | 10403 | | |
| 10404 | + | |
| 10405 | + | |
| 10406 | + | |
| 10407 | + | |
| 10408 | + | |
| 10409 | + | |
10404 | 10410 | | |
10405 | 10411 | | |
10406 | 10412 | | |
| |||
10412 | 10418 | | |
10413 | 10419 | | |
10414 | 10420 | | |
10415 | | - | |
| 10421 | + | |
| 10422 | + | |
| 10423 | + | |
10416 | 10424 | | |
10417 | 10425 | | |
10418 | 10426 | | |
10419 | 10427 | | |
10420 | | - | |
10421 | 10428 | | |
10422 | 10429 | | |
10423 | 10430 | | |
10424 | 10431 | | |
10425 | 10432 | | |
10426 | 10433 | | |
10427 | 10434 | | |
10428 | | - | |
10429 | | - | |
10430 | | - | |
10431 | | - | |
10432 | | - | |
10433 | | - | |
10434 | 10435 | | |
10435 | 10436 | | |
10436 | 10437 | | |
| |||
0 commit comments