BPF List
 help / color / mirror / Atom feed
* [syzbot] [bpf?] general protection fault in bpf_get_local_storage (2)
@ 2025-12-31  0:27 syzbot
  2025-12-31  3:17 ` Liang Jie
  0 siblings, 1 reply; 5+ messages in thread
From: syzbot @ 2025-12-31  0:27 UTC (permalink / raw)
  To: andrii, ast, bpf, daniel, eddyz87, haoluo, john.fastabend, jolsa,
	kpsingh, linux-kernel, martin.lau, sdf, song, syzkaller-bugs,
	yonghong.song

Hello,

syzbot found the following issue on:

HEAD commit:    3f0e9c8cefa9 Merge tag 'block-6.19-20251226' of git://git...
git tree:       upstream
console output: https://syzkaller.appspot.com/x/log.txt?x=11765022580000
kernel config:  https://syzkaller.appspot.com/x/.config?x=513255d80ab78f2b
dashboard link: https://syzkaller.appspot.com/bug?extid=4fe468a3f7fac86ea2c9
compiler:       Debian clang version 20.1.8 (++20250708063551+0c9f909b7976-1~exp1~20250708183702.136), Debian LLD 20.1.8
syz repro:      https://syzkaller.appspot.com/x/repro.syz?x=1071089a580000
C reproducer:   https://syzkaller.appspot.com/x/repro.c?x=11dd1bb4580000

Downloadable assets:
disk image (non-bootable): https://storage.googleapis.com/syzbot-assets/d900f083ada3/non_bootable_disk-3f0e9c8c.raw.xz
vmlinux: https://storage.googleapis.com/syzbot-assets/275bd6cb3fb6/vmlinux-3f0e9c8c.xz
kernel image: https://storage.googleapis.com/syzbot-assets/d5311a1a21c3/bzImage-3f0e9c8c.xz

IMPORTANT: if you fix the issue, please add the following tag to the commit:
Reported-by: syzbot+4fe468a3f7fac86ea2c9@syzkaller.appspotmail.com

Oops: general protection fault, probably for non-canonical address 0xdffffc0000000000: 0000 [#1] SMP KASAN NOPTI
KASAN: null-ptr-deref in range [0x0000000000000000-0x0000000000000007]
CPU: 0 UID: 0 PID: 9 Comm: kworker/0:0 Not tainted syzkaller #0 PREEMPT(full) 
Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2~bpo12+1 04/01/2014
Workqueue: rcu_gp process_srcu
RIP: 0010:____bpf_get_local_storage kernel/bpf/cgroup.c:1774 [inline]
RIP: 0010:bpf_get_local_storage+0xbd/0x180 kernel/bpf/cgroup.c:1756
Code: e0 49 83 c6 08 4c 89 f0 48 c1 e8 03 42 80 3c 38 00 74 08 4c 89 f7 e8 a2 83 39 00 4d 8b 36 83 fb 15 75 5c 4c 89 f0 48 c1 e8 03 <42> 80 3c 38 00 74 08 4c 89 f7 e8 84 83 39 00 49 8b 1e e8 ec 7e 6c
RSP: 0018:ffffc900000072d8 EFLAGS: 00010246
RAX: 0000000000000000 RBX: 0000000000000015 RCX: 0000000000000100
RDX: ffff88801bef4980 RSI: 0000000000000015 RDI: 0000000000000015
RBP: ffffc90000007310 R08: 0000000000000003 R09: 0000000000000000
R10: ffffc90000007380 R11: ffffffffa0203ce4 R12: 0000000000000001
R13: ffff88801248d640 R14: 0000000000000000 R15: dffffc0000000000
FS:  0000000000000000(0000) GS:ffff88808d416000(0000) knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 0000200000001c40 CR3: 000000003701b000 CR4: 0000000000352ef0
Call Trace:
 <IRQ>
 bpf_prog_e63b106389d7305a+0x2e/0x45
 bpf_dispatcher_nop_func include/linux/bpf.h:1378 [inline]
 __bpf_prog_run include/linux/filter.h:723 [inline]
 bpf_prog_run include/linux/filter.h:730 [inline]
 __bpf_prog_run_save_cb+0x127/0x370 include/linux/filter.h:980
 bpf_prog_run_array_cg kernel/bpf/cgroup.c:81 [inline]
 __cgroup_bpf_run_filter_skb+0x9e0/0xf40 kernel/bpf/cgroup.c:1612
 sk_filter_trim_cap+0xd42/0xf50 net/core/filter.c:150
 tcp_filter net/ipv4/tcp_ipv4.c:2117 [inline]
 tcp_v4_rcv+0x1f90/0x2f20 net/ipv4/tcp_ipv4.c:2304
 ip_protocol_deliver_rcu+0x221/0x440 net/ipv4/ip_input.c:207
 ip_local_deliver_finish+0x3bb/0x6f0 net/ipv4/ip_input.c:241
 NF_HOOK+0x30c/0x3a0 include/linux/netfilter.h:318
 NF_HOOK+0x30c/0x3a0 include/linux/netfilter.h:318
 __netif_receive_skb_one_core net/core/dev.c:6137 [inline]
 __netif_receive_skb+0x143/0x380 net/core/dev.c:6250
 process_backlog+0x54f/0x1340 net/core/dev.c:6602
 __napi_poll+0xae/0x320 net/core/dev.c:7666
 napi_poll net/core/dev.c:7729 [inline]
 net_rx_action+0x64a/0xe00 net/core/dev.c:7881
 handle_softirqs+0x22b/0x7c0 kernel/softirq.c:622
 __do_softirq kernel/softirq.c:656 [inline]
 invoke_softirq kernel/softirq.c:496 [inline]
 __irq_exit_rcu+0x60/0x150 kernel/softirq.c:723
 irq_exit_rcu+0x9/0x30 kernel/softirq.c:739
 instr_sysvec_apic_timer_interrupt arch/x86/kernel/apic/apic.c:1056 [inline]
 sysvec_apic_timer_interrupt+0xa6/0xc0 arch/x86/kernel/apic/apic.c:1056
 </IRQ>
 <TASK>
 asm_sysvec_apic_timer_interrupt+0x1a/0x20 arch/x86/include/asm/idtentry.h:697
RIP: 0010:delay_loop+0x20/0x30 arch/x86/lib/delay.c:44
Code: 90 90 90 90 90 90 90 90 90 90 f3 0f 1e fa 48 89 f8 48 85 c0 74 19 eb 02 66 90 eb 0e 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 <48> ff c8 75 fb 48 ff c8 c3 cc cc cc cc cc 66 90 90 90 90 90 90 90
RSP: 0018:ffffc900001b78d0 EFLAGS: 00000216
RAX: 00000000000022ff RBX: 0000000000000001 RCX: 0000000008583a9c
RDX: 00000000000036b0 RSI: 0000000000000008 RDI: 00000000000036b1
RBP: 0000000000000001 R08: ffff88801fc42b47 R09: 1ffff11003f88568
R10: dffffc0000000000 R11: ffffffff8b5a31d0 R12: 0000000000000001
R13: 0000000000004fb8 R14: ffff88801fc42b60 R15: dffffc0000000000
 udelay include/asm-generic/delay.h:64 [inline]
 try_check_zero+0x412/0x470 kernel/rcu/srcutree.c:1182
 srcu_advance_state kernel/rcu/srcutree.c:1886 [inline]
 process_srcu+0x2d3/0x1220 kernel/rcu/srcutree.c:1995
 process_one_work kernel/workqueue.c:3257 [inline]
 process_scheduled_works+0xad1/0x1770 kernel/workqueue.c:3340
 worker_thread+0x8a0/0xda0 kernel/workqueue.c:3421
 kthread+0x711/0x8a0 kernel/kthread.c:463
 ret_from_fork+0x510/0xa50 arch/x86/kernel/process.c:158
 ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:246
 </TASK>
Modules linked in:
---[ end trace 0000000000000000 ]---
RIP: 0010:____bpf_get_local_storage kernel/bpf/cgroup.c:1774 [inline]
RIP: 0010:bpf_get_local_storage+0xbd/0x180 kernel/bpf/cgroup.c:1756
Code: e0 49 83 c6 08 4c 89 f0 48 c1 e8 03 42 80 3c 38 00 74 08 4c 89 f7 e8 a2 83 39 00 4d 8b 36 83 fb 15 75 5c 4c 89 f0 48 c1 e8 03 <42> 80 3c 38 00 74 08 4c 89 f7 e8 84 83 39 00 49 8b 1e e8 ec 7e 6c
RSP: 0018:ffffc900000072d8 EFLAGS: 00010246
RAX: 0000000000000000 RBX: 0000000000000015 RCX: 0000000000000100
RDX: ffff88801bef4980 RSI: 0000000000000015 RDI: 0000000000000015
RBP: ffffc90000007310 R08: 0000000000000003 R09: 0000000000000000
R10: ffffc90000007380 R11: ffffffffa0203ce4 R12: 0000000000000001
R13: ffff88801248d640 R14: 0000000000000000 R15: dffffc0000000000
FS:  0000000000000000(0000) GS:ffff88808d416000(0000) knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 0000200000001c40 CR3: 000000003701b000 CR4: 0000000000352ef0
----------------
Code disassembly (best guess):
   0:	e0 49                	loopne 0x4b
   2:	83 c6 08             	add    $0x8,%esi
   5:	4c 89 f0             	mov    %r14,%rax
   8:	48 c1 e8 03          	shr    $0x3,%rax
   c:	42 80 3c 38 00       	cmpb   $0x0,(%rax,%r15,1)
  11:	74 08                	je     0x1b
  13:	4c 89 f7             	mov    %r14,%rdi
  16:	e8 a2 83 39 00       	call   0x3983bd
  1b:	4d 8b 36             	mov    (%r14),%r14
  1e:	83 fb 15             	cmp    $0x15,%ebx
  21:	75 5c                	jne    0x7f
  23:	4c 89 f0             	mov    %r14,%rax
  26:	48 c1 e8 03          	shr    $0x3,%rax
* 2a:	42 80 3c 38 00       	cmpb   $0x0,(%rax,%r15,1) <-- trapping instruction
  2f:	74 08                	je     0x39
  31:	4c 89 f7             	mov    %r14,%rdi
  34:	e8 84 83 39 00       	call   0x3983bd
  39:	49 8b 1e             	mov    (%r14),%rbx
  3c:	e8                   	.byte 0xe8
  3d:	ec                   	in     (%dx),%al
  3e:	7e 6c                	jle    0xac


---
This report is generated by a bot. It may contain errors.
See https://goo.gl/tpsmEJ for more information about syzbot.
syzbot engineers can be reached at syzkaller@googlegroups.com.

syzbot will keep track of this issue. See:
https://goo.gl/tpsmEJ#status for how to communicate with syzbot.

If the report is already addressed, let syzbot know by replying with:
#syz fix: exact-commit-title

If you want syzbot to run the reproducer, reply with:
#syz test: git://repo/address.git branch-or-commit-hash
If you attach or paste a git patch, syzbot will apply it before testing.

If you want to overwrite report's subsystems, reply with:
#syz set subsystems: new-subsystem
(See the list of subsystem names on the web dashboard)

If the report is a duplicate of another one, reply with:
#syz dup: exact-subject-of-another-report

If you want to undo deduplication, reply with:
#syz undup

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [syzbot] [bpf?] general protection fault in bpf_get_local_storage (2)
  2025-12-31  0:27 [syzbot] [bpf?] general protection fault in bpf_get_local_storage (2) syzbot
@ 2025-12-31  3:17 ` Liang Jie
  2025-12-31  3:42   ` syzbot
  2025-12-31  6:18   ` Amery Hung
  0 siblings, 2 replies; 5+ messages in thread
From: Liang Jie @ 2025-12-31  3:17 UTC (permalink / raw)
  To: syzbot+4fe468a3f7fac86ea2c9
  Cc: andrii, ast, bpf, daniel, eddyz87, haoluo, john.fastabend, jolsa,
	kpsingh, linux-kernel, martin.lau, sdf, song, syzkaller-bugs,
	yonghong.song, liangjie

#syz test: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 3f0e9c8cefa9

diff --git a/kernel/bpf/cgroup.c b/kernel/bpf/cgroup.c
index 69988af44b37..2bc27ece5cc5 100644
--- a/kernel/bpf/cgroup.c
+++ b/kernel/bpf/cgroup.c
@@ -1768,6 +1768,9 @@ BPF_CALL_2(bpf_get_local_storage, struct bpf_map *, map, u64, flags)
        ctx = container_of(current->bpf_ctx, struct bpf_cg_run_ctx, run_ctx);
        storage = ctx->prog_item->cgroup_storage[stype];
 
+       if (unlikely(!storage))
+               return (unsigned long)NULL;
+
        if (stype == BPF_CGROUP_STORAGE_SHARED)
                ptr = &READ_ONCE(storage->buf)->data[0];


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [syzbot] [bpf?] general protection fault in bpf_get_local_storage (2)
  2025-12-31  3:17 ` Liang Jie
@ 2025-12-31  3:42   ` syzbot
  2025-12-31  6:18   ` Amery Hung
  1 sibling, 0 replies; 5+ messages in thread
From: syzbot @ 2025-12-31  3:42 UTC (permalink / raw)
  To: andrii, ast, bpf, buaajxlj, daniel, eddyz87, haoluo,
	john.fastabend, jolsa, kpsingh, liangjie, linux-kernel,
	martin.lau, sdf, song, syzkaller-bugs, yonghong.song

Hello,

syzbot has tested the proposed patch and the reproducer did not trigger any issue:

Reported-by: syzbot+4fe468a3f7fac86ea2c9@syzkaller.appspotmail.com
Tested-by: syzbot+4fe468a3f7fac86ea2c9@syzkaller.appspotmail.com

Tested on:

commit:         3f0e9c8c Merge tag 'block-6.19-20251226' of git://git...
git tree:       git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
console output: https://syzkaller.appspot.com/x/log.txt?x=13bb9792580000
kernel config:  https://syzkaller.appspot.com/x/.config?x=513255d80ab78f2b
dashboard link: https://syzkaller.appspot.com/bug?extid=4fe468a3f7fac86ea2c9
compiler:       Debian clang version 20.1.8 (++20250708063551+0c9f909b7976-1~exp1~20250708183702.136), Debian LLD 20.1.8
patch:          https://syzkaller.appspot.com/x/patch.diff?x=10fca422580000

Note: testing is done by a robot and is best-effort only.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [syzbot] [bpf?] general protection fault in bpf_get_local_storage (2)
  2025-12-31  3:17 ` Liang Jie
  2025-12-31  3:42   ` syzbot
@ 2025-12-31  6:18   ` Amery Hung
  2025-12-31  7:29     ` Liang Jie
  1 sibling, 1 reply; 5+ messages in thread
From: Amery Hung @ 2025-12-31  6:18 UTC (permalink / raw)
  To: Liang Jie
  Cc: syzbot+4fe468a3f7fac86ea2c9, andrii, ast, bpf, daniel, eddyz87,
	haoluo, john.fastabend, jolsa, kpsingh, linux-kernel, martin.lau,
	sdf, song, syzkaller-bugs, yonghong.song, liangjie

On Tue, Dec 30, 2025 at 7:21 PM Liang Jie <buaajxlj@163.com> wrote:
>
> #syz test: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 3f0e9c8cefa9
>
> diff --git a/kernel/bpf/cgroup.c b/kernel/bpf/cgroup.c
> index 69988af44b37..2bc27ece5cc5 100644
> --- a/kernel/bpf/cgroup.c
> +++ b/kernel/bpf/cgroup.c
> @@ -1768,6 +1768,9 @@ BPF_CALL_2(bpf_get_local_storage, struct bpf_map *, map, u64, flags)
>         ctx = container_of(current->bpf_ctx, struct bpf_cg_run_ctx, run_ctx);
>         storage = ctx->prog_item->cgroup_storage[stype];
>
> +       if (unlikely(!storage))
> +               return (unsigned long)NULL;
> +
>         if (stype == BPF_CGROUP_STORAGE_SHARED)
>                 ptr = &READ_ONCE(storage->buf)->data[0];
>
>

Hi Liang,

I don't think we can do this here due to backward compatibility. The
return type of the helper is RET_PTR_TO_MAP_VALUE. Your proposed fix
would require adding a PTR_MAYBE_NULL and existing BPF programs would
no longer pass the verifier.

Did you look into why the storage pointer is NULL in the first place?

BTW, there is also another similar report and a work-in-progress fix
[1]. Do you think this is a separate issue from that?

Thanks,
Amery

[1] https://lore.kernel.org/bpf/20251203195050.3215728-1-ameryhung@gmail.com/

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [syzbot] [bpf?] general protection fault in bpf_get_local_storage (2)
  2025-12-31  6:18   ` Amery Hung
@ 2025-12-31  7:29     ` Liang Jie
  0 siblings, 0 replies; 5+ messages in thread
From: Liang Jie @ 2025-12-31  7:29 UTC (permalink / raw)
  To: ameryhung
  Cc: andrii, ast, bpf, buaajxlj, daniel, eddyz87, haoluo,
	john.fastabend, jolsa, kpsingh, liangjie, linux-kernel,
	martin.lau, sdf, song, syzbot+4fe468a3f7fac86ea2c9,
	syzkaller-bugs, yonghong.song

On Tue, 30 Dec 2025 22:18:00 -0800, Amery Hung <ameryhung@gmail.com> wrote:
> >
> > #syz test: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 3f0e9c8cefa9
> >
> > diff --git a/kernel/bpf/cgroup.c b/kernel/bpf/cgroup.c
> > index 69988af44b37..2bc27ece5cc5 100644
> > --- a/kernel/bpf/cgroup.c
> > +++ b/kernel/bpf/cgroup.c
> > @@ -1768,6 +1768,9 @@ BPF_CALL_2(bpf_get_local_storage, struct bpf_map *, map, u64, flags)
> >         ctx = container_of(current->bpf_ctx, struct bpf_cg_run_ctx, run_ctx);
> >         storage = ctx->prog_item->cgroup_storage[stype];
> >
> > +       if (unlikely(!storage))
> > +               return (unsigned long)NULL;
> > +
> >         if (stype == BPF_CGROUP_STORAGE_SHARED)
> >                 ptr = &READ_ONCE(storage->buf)->data[0];
> >
> >
> 
> Hi Liang,
> 
> I don't think we can do this here due to backward compatibility. The
> return type of the helper is RET_PTR_TO_MAP_VALUE. Your proposed fix
> would require adding a PTR_MAYBE_NULL and existing BPF programs would
> no longer pass the verifier.
> 
> Did you look into why the storage pointer is NULL in the first place?
> 
> BTW, there is also another similar report and a work-in-progress fix
> [1]. Do you think this is a separate issue from that?

Hi Amery,

Thanks for pointing this out.

Sorry, I initially missed your earlier WIP fix. Looking at it now, this
does seem to be addressing the same class of issues where
bpf_get_local_storage() can observe a NULL storage pointer.

I'm interested in this area and will take a closer look to see whether
your patch also covers the syzbot report.

Thanks,
Liang


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2025-12-31  7:31 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-12-31  0:27 [syzbot] [bpf?] general protection fault in bpf_get_local_storage (2) syzbot
2025-12-31  3:17 ` Liang Jie
2025-12-31  3:42   ` syzbot
2025-12-31  6:18   ` Amery Hung
2025-12-31  7:29     ` Liang Jie

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox