Hello,
syzbot found the following issue on:
HEAD commit: 32fa4366cc4d net: phy: fix phy_read_poll_timeout argument ..
git tree: net
console+strace: https://syzkaller.appspot.com/x/log.txt?x=16f5d769180000
kernel config: https://syzkaller.appspot.com/x/.config?x=6fb1be60a193d440
dashboard link: https://syzkaller.appspot.com/bug?extid=9d95beb2a3c260622518
compiler: Debian clang version 15.0.6, GNU ld (GNU Binutils for Debian) 2.40
syz repro: https://syzkaller.appspot.com/x/repro.syz?x=14572985180000
C reproducer: https://syzkaller.appspot.com/x/repro.c?x=1676fc6e180000
Downloadable assets:
disk image: https://storage.googleapis.com/syzbot-assets/bb05871df8fc/disk-32fa4366.raw.xz
vmlinux: https://storage.googleapis.com/syzbot-assets/a774323fb6ec/vmlinux-32fa4366.xz
kernel image: https://storage.googleapis.com/syzbot-assets/1742ae20d76c/bzImage-32fa4366.xz
IMPORTANT: if you fix the issue, please add the following tag to the commit:
Reported-by: [email protected]
============================================
WARNING: possible recursive locking detected
6.8.0-syzkaller-05242-g32fa4366cc4d #0 Not tainted
--------------------------------------------
syz-executor217/5072 is trying to acquire lock:
ffff88802a0fd9f8 (&trie->lock){....}-{2:2}, at: trie_delete_elem+0x96/0x6a0 kernel/bpf/lpm_trie.c:451
but task is already holding lock:
ffff88802a0fc9f8 (&trie->lock){....}-{2:2}, at: trie_update_elem+0xcb/0xc10 kernel/bpf/lpm_trie.c:324
other info that might help us debug this:
Possible unsafe locking scenario:
CPU0
----
lock(&trie->lock);
lock(&trie->lock);
*** DEADLOCK ***
May be due to missing lock nesting notation
3 locks held by syz-executor217/5072:
#0: ffffffff8e131920 (rcu_read_lock){....}-{1:2}, at: rcu_lock_acquire include/linux/rcupdate.h:298 [inline]
#0: ffffffff8e131920 (rcu_read_lock){....}-{1:2}, at: rcu_read_lock include/linux/rcupdate.h:750 [inline]
#0: ffffffff8e131920 (rcu_read_lock){....}-{1:2}, at: bpf_map_update_value+0x3c4/0x540 kernel/bpf/syscall.c:202
#1: ffff88802a0fc9f8 (&trie->lock){....}-{2:2}, at: trie_update_elem+0xcb/0xc10 kernel/bpf/lpm_trie.c:324
#2: ffffffff8e131920 (rcu_read_lock){....}-{1:2}, at: rcu_lock_acquire include/linux/rcupdate.h:298 [inline]
#2: ffffffff8e131920 (rcu_read_lock){....}-{1:2}, at: rcu_read_lock include/linux/rcupdate.h:750 [inline]
#2: ffffffff8e131920 (rcu_read_lock){....}-{1:2}, at: __bpf_trace_run kernel/trace/bpf_trace.c:2380 [inline]
#2: ffffffff8e131920 (rcu_read_lock){....}-{1:2}, at: bpf_trace_run4+0x16e/0x490 kernel/trace/bpf_trace.c:2422
stack backtrace:
CPU: 0 PID: 5072 Comm: syz-executor217 Not tainted 6.8.0-syzkaller-05242-g32fa4366cc4d #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 02/29/2024
Call Trace:
<TASK>
__dump_stack lib/dump_stack.c:88 [inline]
dump_stack_lvl+0x1e7/0x2e0 lib/dump_stack.c:106
check_deadlock kernel/locking/lockdep.c:3062 [inline]
validate_chain+0x15c1/0x58e0 kernel/locking/lockdep.c:3856
__lock_acquire+0x1346/0x1fd0 kernel/locking/lockdep.c:5137
lock_acquire+0x1e4/0x530 kernel/locking/lockdep.c:5754
__raw_spin_lock_irqsave include/linux/spinlock_api_smp.h:110 [inline]
_raw_spin_lock_irqsave+0xd5/0x120 kernel/locking/spinlock.c:162
trie_delete_elem+0x96/0x6a0 kernel/bpf/lpm_trie.c:451
bpf_prog_2c29ac5cdc6b1842+0x42/0x46
bpf_dispatcher_nop_func include/linux/bpf.h:1234 [inline]
__bpf_prog_run include/linux/filter.h:657 [inline]
bpf_prog_run include/linux/filter.h:664 [inline]
__bpf_trace_run kernel/trace/bpf_trace.c:2381 [inline]
bpf_trace_run4+0x25a/0x490 kernel/trace/bpf_trace.c:2422
trace_mm_page_alloc include/trace/events/kmem.h:177 [inline]
__alloc_pages+0x657/0x680 mm/page_alloc.c:4591
__alloc_pages_node include/linux/gfp.h:238 [inline]
alloc_pages_node include/linux/gfp.h:261 [inline]
__kmalloc_large_node+0x91/0x1f0 mm/slub.c:3926
__do_kmalloc_node mm/slub.c:3969 [inline]
__kmalloc_node+0x33c/0x4e0 mm/slub.c:3988
kmalloc_node include/linux/slab.h:610 [inline]
bpf_map_kmalloc_node+0xd3/0x1c0 kernel/bpf/syscall.c:422
lpm_trie_node_alloc kernel/bpf/lpm_trie.c:291 [inline]
trie_update_elem+0x1d3/0xc10 kernel/bpf/lpm_trie.c:333
bpf_map_update_value+0x4d3/0x540 kernel/bpf/syscall.c:203
map_update_elem+0x53a/0x6f0 kernel/bpf/syscall.c:1641
__sys_bpf+0x76f/0x810 kernel/bpf/syscall.c:5619
__do_sys_bpf kernel/bpf/syscall.c:5738 [inline]
__se_sys_bpf kernel/bpf/syscall.c:5736 [inline]
__x64_sys_bpf+0x7c/0x90 kernel/bpf/syscall.c:5736
do_syscall_64+0xfb/0x240
entry_SYSCALL_64_after_hwframe+0x6d/0x75
RIP: 0033:0x7f933485e7a9
Code: 48 83 c4 28 c3 e8 37 17 00 00 0f 1f 80 00 00 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 b8 ff ff ff f7 d8 64 89 01 48
RSP: 002b:00007ffc8852b528 EFLAGS: 00000246 ORIG_RAX: 0000000000000141
RAX: ffffffffffffffda RBX:
---
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 [email protected].
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
On Wed, 20 Mar 2024 01:42:21 -0700
> syzbot found the following issue on:
>
> HEAD commit: 32fa4366cc4d net: phy: fix phy_read_poll_timeout argument ..
> git tree: net
> C reproducer: https://syzkaller.appspot.com/x/repro.c?x=1676fc6e180000
#syz test https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git 32fa4366cc4d
--- x/kernel/bpf/lpm_trie.c
+++ y/kernel/bpf/lpm_trie.c
@@ -321,7 +321,7 @@ static long trie_update_elem(struct bpf_
if (key->prefixlen > trie->max_prefixlen)
return -EINVAL;
- spin_lock_irqsave(&trie->lock, irq_flags);
+ spin_lock_irqsave_nested(&trie->lock, irq_flags, 1);
/* Allocate and fill a new node */
@@ -448,7 +448,7 @@ static long trie_delete_elem(struct bpf_
if (key->prefixlen > trie->max_prefixlen)
return -EINVAL;
- spin_lock_irqsave(&trie->lock, irq_flags);
+ spin_lock_irqsave_nested(&trie->lock, irq_flags, 2);
/* Walk the tree looking for an exact key/length match and keeping
* track of the path we traverse. We will need to know the node
--
syzbot has bisected this issue to:
commit a3c06ae158dd6fa8336157c31d9234689d068d02
Author: Parav Pandit <[email protected]>
Date: Tue Jan 5 10:32:03 2021 +0000
vdpa_sim_net: Add support for user supported devices
bisection log: https://syzkaller.appspot.com/x/bisect.txt?x=1626def1180000
start commit: f6e922365faf xsk: Don't assume metadata is always requeste..
git tree: bpf
final oops: https://syzkaller.appspot.com/x/report.txt?x=1526def1180000
console output: https://syzkaller.appspot.com/x/log.txt?x=1126def1180000
kernel config: https://syzkaller.appspot.com/x/.config?x=6fb1be60a193d440
dashboard link: https://syzkaller.appspot.com/bug?extid=9d95beb2a3c260622518
syz repro: https://syzkaller.appspot.com/x/repro.syz?x=14115c6e180000
C reproducer: https://syzkaller.appspot.com/x/repro.c?x=124fd231180000
Reported-by: [email protected]
Fixes: a3c06ae158dd ("vdpa_sim_net: Add support for user supported devices")
For information about bisection process see: https://goo.gl/tpsmEJ#bisection
Hello,
syzbot has tested the proposed patch and the reproducer did not trigger any issue:
Reported-and-tested-by: [email protected]
Tested on:
commit: 32fa4366 net: phy: fix phy_read_poll_timeout argument ..
git tree: https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git
console output: https://syzkaller.appspot.com/x/log.txt?x=174f8dc9180000
kernel config: https://syzkaller.appspot.com/x/.config?x=6fb1be60a193d440
dashboard link: https://syzkaller.appspot.com/bug?extid=9d95beb2a3c260622518
compiler: Debian clang version 15.0.6, GNU ld (GNU Binutils for Debian) 2.40
patch: https://syzkaller.appspot.com/x/patch.diff?x=1600783a180000
Note: testing is done by a robot and is best-effort only.
For archival purposes, forwarding an incoming command email to
[email protected], [email protected].
***
Subject: Re: [email protected]
Author: [email protected]
#syz test https://github.com/torvalds/linux.git e377d803b65ee4130213b3c041fc25fdfec1bd90
________________________________
From: syzbot <[email protected]>
Sent: Wednesday, June 5, 2024 09:15
To: Wojciech Gladysz <[email protected]>
Cc: Wojciech Gladysz <[email protected]>; [email protected] <[email protected]>; [email protected] <[email protected]>
Subject: Re: [email protected]
EXTERNAL: This message was sent from outside of Infogain. Please do not click links or open attachments unless you know the content is safe.
> #syz testhttps://github.com/torvalds/linux.gite377d803b65ee4130213b3c041fc25fdfec1bd90
unknown command "testhttps://github.com/torvalds/linux.gite377d803b65ee4130213b3c041fc25fdfec1bd90"
> ________________________________
> From: syzbot <[email protected]>
> Sent: Wednesday, June 5, 2024 09:06
> To: Wojciech Gladysz <[email protected]>
> Cc: Wojciech Gladysz <[email protected]>; [email protected] <[email protected]>; [email protected] <[email protected]>
> Subject: Re: [email protected]
>
> EXTERNAL: This message was sent from outside of Infogain. Please do not click links or open attachments unless you know the content is safe.
>
>> #syz test https://linux.googlesource.com/linux/kernel/git/torvalds/linux<https://linux.googlesource.com/linux/kernel/git/torvalds/linux<https://linux.googlesource.com/linux/kernel/git/torvalds/linux>> e377d803b65ee4130213b3c041fc25fdfec1bd90
>
> "https://linux.googlesource.com/linux/kernel/git/torvalds/linux<https://linux.googlesource.com/linux/kernel/git/torvalds/linux<https://linux.googlesource.com/linux/kernel/git/torvalds/linux>>" does not look like a valid git repo address.
>
>>
>> The information in this email is confidential and may be legally privileged. It is intended solely for the addressee and access to it by anyone else is unauthorized. If you are not the intended recipient, any disclosure, copying, distribution or any action taken or omitted to be taken based on it, is strictly prohibited and may be unlawful.
Hello,
syzbot tried to test the proposed patch but the build/boot failed:
failed to checkout kernel repo https://github.com/torvalds/linux.git on commit e377d803b65ee4130213b3c041fc25fdfec1bd90: failed to run ["git" "fetch" "--force" "--tags" "aa24f7914cebcc04de6104c814c089815e172c16" "e377d803b65ee4130213b3c041fc25fdfec1bd90"]: exit status 128
fatal: remote error: upload-pack: not our ref e377d803b65ee4130213b3c041fc25fdfec1bd90
Tested on:
commit: [unknown
git tree: https://github.com/torvalds/linux.git e377d803b65ee4130213b3c041fc25fdfec1bd90
kernel config: https://syzkaller.appspot.com/x/.config?x=9d7ea7de0cb32587
dashboard link: https://syzkaller.appspot.com/bug?extid=9d95beb2a3c260622518
compiler:
Note: no patches were applied.
For archival purposes, forwarding an incoming command email to
[email protected], [email protected].
***
Subject: Re: [syzbot] [bpf?] possible deadlock in trie_delete_elem
Author: [email protected]
#syz test https://linux.googlesource.com/linux/kernel/git/torvalds/linux e377d803b65ee4130213b3c041fc25fdfec1bd90
________________________________
From: syzbot <[email protected]>
Sent: Wednesday, June 5, 2024 09:17
To: [email protected] <[email protected]>; [email protected] <[email protected]>; Wojciech Gladysz <[email protected]>
Subject: Re: [syzbot] [bpf?] possible deadlock in trie_delete_elem
EXTERNAL: This message was sent from outside of Infogain. Please do not click links or open attachments unless you know the content is safe.
Hello,
syzbot tried to test the proposed patch but the build/boot failed:
failed to checkout kernel repo https://github.com/torvalds/linux.git on commit e377d803b65ee4130213b3c041fc25fdfec1bd90: failed to run ["git" "fetch" "--force" "--tags" "aa24f7914cebcc04de6104c814c089815e172c16" "e377d803b65ee4130213b3c041fc25fdfec1bd90"]: exit status 128
fatal: remote error: upload-pack: not our ref e377d803b65ee4130213b3c041fc25fdfec1bd90
Tested on:
commit: [unknown
git tree: https://github.com/torvalds/linux.git e377d803b65ee4130213b3c041fc25fdfec1bd90
kernel config: https://syzkaller.appspot.com/x/.config?x=9d7ea7de0cb32587
dashboard link: https://syzkaller.appspot.com/bug?extid=9d95beb2a3c260622518
compiler:
Note: no patches were applied.
The information in this email is confidential and may be legally privileged. It is intended solely for the addressee and access to it by anyone else is unauthorized. If you are not the intended recipient, any disclosure, copying, distribution or any action taken or omitted to be taken based on it, is strictly prohibited and may be unlawful.
Hello,
syzbot has tested the proposed patch but the reproducer is still triggering an issue:
possible deadlock in trie_delete_elem
============================================
WARNING: possible recursive locking detected
6.10.0-rc2-syzkaller-00001-ge377d803b65e #0 Not tainted
--------------------------------------------
udevd/5414 is trying to acquire lock:
ffff88807eff51f8 (&trie->lock){-.-.}-{2:2}, at: trie_delete_elem+0x96/0x6a0 kernel/bpf/lpm_trie.c:462
but task is already holding lock:
ffff88807eff59f8 (&trie->lock){-.-.}-{2:2}, at: trie_delete_elem+0x96/0x6a0 kernel/bpf/lpm_trie.c:462
other info that might help us debug this:
Possible unsafe locking scenario:
CPU0
----
lock(&trie->lock);
lock(&trie->lock);
*** DEADLOCK ***
May be due to missing lock nesting notation
5 locks held by udevd/5414:
#0: ffff88801f3e8f08 (kn->active#5){.+.+}-{0:0}, at: kernfs_fop_open+0x93/0xd10 fs/kernfs/file.c:601
#1: ffff8880162ecc38 (&kernfs_locks->open_file_mutex[count]){+.+.}-{3:3}, at: kernfs_open_file_mutex_lock fs/kernfs/file.c:56 [inline]
#1: ffff8880162ecc38 (&kernfs_locks->open_file_mutex[count]){+.+.}-{3:3}, at: kernfs_get_open_node fs/kernfs/file.c:520 [inline]
#1: ffff8880162ecc38 (&kernfs_locks->open_file_mutex[count]){+.+.}-{3:3}, at: kernfs_fop_open+0x74d/0xd10 fs/kernfs/file.c:700
#2: ffffffff8e333f60 (rcu_read_lock){....}-{1:2}, at: rcu_lock_acquire include/linux/rcupdate.h:329 [inline]
#2: ffffffff8e333f60 (rcu_read_lock){....}-{1:2}, at: rcu_read_lock include/linux/rcupdate.h:781 [inline]
#2: ffffffff8e333f60 (rcu_read_lock){....}-{1:2}, at: __bpf_trace_run kernel/trace/bpf_trace.c:2409 [inline]
#2: ffffffff8e333f60 (rcu_read_lock){....}-{1:2}, at: bpf_trace_run2+0x21f/0x570 kernel/trace/bpf_trace.c:2451
#3: ffff88807eff59f8 (&trie->lock){-.-.}-{2:2}, at: trie_delete_elem+0x96/0x6a0 kernel/bpf/lpm_trie.c:462
#4: ffffffff8e333f60 (rcu_read_lock){....}-{1:2}, at: rcu_lock_acquire include/linux/rcupdate.h:329 [inline]
#4: ffffffff8e333f60 (rcu_read_lock){....}-{1:2}, at: rcu_read_lock include/linux/rcupdate.h:781 [inline]
#4: ffffffff8e333f60 (rcu_read_lock){....}-{1:2}, at: __bpf_trace_run kernel/trace/bpf_trace.c:2409 [inline]
#4: ffffffff8e333f60 (rcu_read_lock){....}-{1:2}, at: bpf_trace_run2+0x21f/0x570 kernel/trace/bpf_trace.c:2451
stack backtrace:
CPU: 1 PID: 5414 Comm: udevd Not tainted 6.10.0-rc2-syzkaller-00001-ge377d803b65e #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 04/02/2024
Call Trace:
<TASK>
__dump_stack lib/dump_stack.c:88 [inline]
dump_stack_lvl+0x241/0x360 lib/dump_stack.c:114
check_deadlock kernel/locking/lockdep.c:3062 [inline]
validate_chain+0x15d3/0x5900 kernel/locking/lockdep.c:3856
__lock_acquire+0x1346/0x1fd0 kernel/locking/lockdep.c:5137
lock_acquire+0x1ed/0x550 kernel/locking/lockdep.c:5754
__raw_spin_lock_irqsave include/linux/spinlock_api_smp.h:110 [inline]
_raw_spin_lock_irqsave+0xd5/0x120 kernel/locking/spinlock.c:162
trie_delete_elem+0x96/0x6a0 kernel/bpf/lpm_trie.c:462
bpf_prog_1db1603a7cfa36fb+0x45/0x49
bpf_dispatcher_nop_func include/linux/bpf.h:1243 [inline]
__bpf_prog_run include/linux/filter.h:691 [inline]
bpf_prog_run include/linux/filter.h:698 [inline]
__bpf_trace_run kernel/trace/bpf_trace.c:2410 [inline]
bpf_trace_run2+0x30d/0x570 kernel/trace/bpf_trace.c:2451
__traceiter_contention_end+0x7b/0xb0 include/trace/events/lock.h:122
trace_contention_end+0x114/0x140 include/trace/events/lock.h:122
__pv_queued_spin_lock_slowpath+0xb81/0xdc0 kernel/locking/qspinlock.c:557
pv_queued_spin_lock_slowpath arch/x86/include/asm/paravirt.h:584 [inline]
queued_spin_lock_slowpath+0x42/0x50 arch/x86/include/asm/qspinlock.h:51
queued_spin_lock include/asm-generic/qspinlock.h:114 [inline]
do_raw_spin_lock+0x272/0x370 kernel/locking/spinlock_debug.c:116
__raw_spin_lock_irqsave include/linux/spinlock_api_smp.h:111 [inline]
_raw_spin_lock_irqsave+0xe1/0x120 kernel/locking/spinlock.c:162
trie_delete_elem+0x96/0x6a0 kernel/bpf/lpm_trie.c:462
bpf_prog_1db1603a7cfa36fb+0x45/0x49
bpf_dispatcher_nop_func include/linux/bpf.h:1243 [inline]
__bpf_prog_run include/linux/filter.h:691 [inline]
bpf_prog_run include/linux/filter.h:698 [inline]
__bpf_trace_run kernel/trace/bpf_trace.c:2410 [inline]
bpf_trace_run2+0x30d/0x570 kernel/trace/bpf_trace.c:2451
__traceiter_contention_end+0x7b/0xb0 include/trace/events/lock.h:122
trace_contention_end+0xf5/0x120 include/trace/events/lock.h:122
__mutex_lock_common kernel/locking/mutex.c:617 [inline]
__mutex_lock+0x2e5/0xd70 kernel/locking/mutex.c:752
kernfs_open_file_mutex_lock fs/kernfs/file.c:56 [inline]
kernfs_get_open_node fs/kernfs/file.c:520 [inline]
kernfs_fop_open+0x74d/0xd10 fs/kernfs/file.c:700
do_dentry_open+0x95a/0x1720 fs/open.c:955
do_open fs/namei.c:3650 [inline]
path_openat+0x289f/0x3280 fs/namei.c:3807
do_filp_open+0x235/0x490 fs/namei.c:3834
do_sys_openat2+0x13e/0x1d0 fs/open.c:1405
do_sys_open fs/open.c:1420 [inline]
__do_sys_openat fs/open.c:1436 [inline]
__se_sys_openat fs/open.c:1431 [inline]
__x64_sys_openat+0x247/0x2a0 fs/open.c:1431
do_syscall_x64 arch/x86/entry/common.c:52 [inline]
do_syscall_64+0xf3/0x230 arch/x86/entry/common.c:83
entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7f7f17b169a4
Code: 24 20 48 8d 44 24 30 48 89 44 24 28 64 8b 04 25 18 00 00 00 85 c0 75 2c 44 89 e2 48 89 ee bf 9c ff ff ff b8 01 01 00 00 0f 05 <48> 3d 00 f0 ff ff 76 60 48 8b 15 55 a4 0d 00 f7 d8 64 89 02 48 83
RSP: 002b:00007ffdf6fcc1a0 EFLAGS: 00000246 ORIG_RAX: 0000000000000101
RAX: ffffffffffffffda RBX: 0000000000000008 RCX: 00007f7f17b169a4
RDX: 0000000000080000 RSI: 00007ffdf6fcc2d8 RDI: 00000000ffffff9c
RBP: 00007ffdf6fcc2d8 R08: 0000000000000008 R09: 0000000000000001
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000080000
R13: 000056111e750b42 R14: 0000000000000001 R15: 000056111e76c160
</TASK>
Tested on:
commit: e377d803 kernel/trace: fix possible deadlock in trie_d..
git tree: https://linux.googlesource.com/linux/kernel/git/torvalds/linux
console output: https://syzkaller.appspot.com/x/log.txt?x=111a49bc980000
kernel config: https://syzkaller.appspot.com/x/.config?x=eb72437243175f22
dashboard link: https://syzkaller.appspot.com/bug?extid=9d95beb2a3c260622518
compiler: Debian clang version 15.0.6, GNU ld (GNU Binutils for Debian) 2.40
Note: no patches were applied.
For archival purposes, forwarding an incoming command email to
[email protected], [email protected].
***
Subject: Re: [email protected]
Author: [email protected]
#syz test https://linux.googlesource.com/linux/kernel/git/torvalds/linux e377d803b65ee4130213b3c041fc25fdfec1bd90
________________________________
From: syzbot <[email protected]>
Sent: Wednesday, June 5, 2024 09:15
To: Wojciech Gladysz <[email protected]>
Cc: Wojciech Gladysz <[email protected]>; [email protected] <[email protected]>; [email protected] <[email protected]>
Subject: Re: [email protected]
EXTERNAL: This message was sent from outside of Infogain. Please do not click links or open attachments unless you know the content is safe.
> #syz testhttps://github.com/torvalds/linux.gite377d803b65ee4130213b3c041fc25fdfec1bd90
unknown command "testhttps://github.com/torvalds/linux.gite377d803b65ee4130213b3c041fc25fdfec1bd90"
> ________________________________
> From: syzbot <[email protected]>
> Sent: Wednesday, June 5, 2024 09:06
> To: Wojciech Gladysz <[email protected]>
> Cc: Wojciech Gladysz <[email protected]>; [email protected] <[email protected]>; [email protected] <[email protected]>
> Subject: Re: [email protected]
>
> EXTERNAL: This message was sent from outside of Infogain. Please do not click links or open attachments unless you know the content is safe.
>
>> #syz test https://linux.googlesource.com/linux/kernel/git/torvalds/linux<https://linux.googlesource.com/linux/kernel/git/torvalds/linux<https://linux.googlesource.com/linux/kernel/git/torvalds/linux>> e377d803b65ee4130213b3c041fc25fdfec1bd90
>
> "https://linux.googlesource.com/linux/kernel/git/torvalds/linux<https://linux.googlesource.com/linux/kernel/git/torvalds/linux<https://linux.googlesource.com/linux/kernel/git/torvalds/linux>>" does not look like a valid git repo address.
>
>>
>> The information in this email is confidential and may be legally privileged. It is intended solely for the addressee and access to it by anyone else is unauthorized. If you are not the intended recipient, any disclosure, copying, distribution or any action taken or omitted to be taken based on it, is strictly prohibited and may be unlawful.
Hello,
syzbot has tested the proposed patch but the reproducer is still triggering an issue:
possible deadlock in trie_delete_elem
============================================
WARNING: possible recursive locking detected
6.10.0-rc2-syzkaller-00001-ge377d803b65e #0 Not tainted
--------------------------------------------
syz-executor.0/6233 is trying to acquire lock:
ffff88802e83a1f8 (&trie->lock){-.-.}-{2:2}, at: trie_delete_elem+0x96/0x6a0 kernel/bpf/lpm_trie.c:462
but task is already holding lock:
ffff8880696e91f8 (&trie->lock){-.-.}-{2:2}, at: trie_delete_elem+0x96/0x6a0 kernel/bpf/lpm_trie.c:462
other info that might help us debug this:
Possible unsafe locking scenario:
CPU0
----
lock(&trie->lock);
lock(&trie->lock);
*** DEADLOCK ***
May be due to missing lock nesting notation
4 locks held by syz-executor.0/6233:
#0: ffffffff8e3809a8 (tracepoints_mutex){+.+.}-{3:3}, at: tracepoint_probe_unregister+0x32/0x990 kernel/tracepoint.c:548
#1: ffffffff8e333f60 (rcu_read_lock){....}-{1:2}, at: rcu_lock_acquire include/linux/rcupdate.h:329 [inline]
#1: ffffffff8e333f60 (rcu_read_lock){....}-{1:2}, at: rcu_read_lock include/linux/rcupdate.h:781 [inline]
#1: ffffffff8e333f60 (rcu_read_lock){....}-{1:2}, at: __bpf_trace_run kernel/trace/bpf_trace.c:2409 [inline]
#1: ffffffff8e333f60 (rcu_read_lock){....}-{1:2}, at: bpf_trace_run2+0x21f/0x570 kernel/trace/bpf_trace.c:2451
#2: ffff8880696e91f8 (&trie->lock){-.-.}-{2:2}, at: trie_delete_elem+0x96/0x6a0 kernel/bpf/lpm_trie.c:462
#3: ffffffff8e333f60 (rcu_read_lock){....}-{1:2}, at: rcu_lock_acquire include/linux/rcupdate.h:329 [inline]
#3: ffffffff8e333f60 (rcu_read_lock){....}-{1:2}, at: rcu_read_lock include/linux/rcupdate.h:781 [inline]
#3: ffffffff8e333f60 (rcu_read_lock){....}-{1:2}, at: __bpf_trace_run kernel/trace/bpf_trace.c:2409 [inline]
#3: ffffffff8e333f60 (rcu_read_lock){....}-{1:2}, at: bpf_trace_run2+0x21f/0x570 kernel/trace/bpf_trace.c:2451
stack backtrace:
CPU: 0 PID: 6233 Comm: syz-executor.0 Not tainted 6.10.0-rc2-syzkaller-00001-ge377d803b65e #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 04/02/2024
Call Trace:
<TASK>
__dump_stack lib/dump_stack.c:88 [inline]
dump_stack_lvl+0x241/0x360 lib/dump_stack.c:114
check_deadlock kernel/locking/lockdep.c:3062 [inline]
validate_chain+0x15d3/0x5900 kernel/locking/lockdep.c:3856
__lock_acquire+0x1346/0x1fd0 kernel/locking/lockdep.c:5137
lock_acquire+0x1ed/0x550 kernel/locking/lockdep.c:5754
__raw_spin_lock_irqsave include/linux/spinlock_api_smp.h:110 [inline]
_raw_spin_lock_irqsave+0xd5/0x120 kernel/locking/spinlock.c:162
trie_delete_elem+0x96/0x6a0 kernel/bpf/lpm_trie.c:462
bpf_prog_1db1603a7cfa36fb+0x45/0x49
bpf_dispatcher_nop_func include/linux/bpf.h:1243 [inline]
__bpf_prog_run include/linux/filter.h:691 [inline]
bpf_prog_run include/linux/filter.h:698 [inline]
__bpf_trace_run kernel/trace/bpf_trace.c:2410 [inline]
bpf_trace_run2+0x30d/0x570 kernel/trace/bpf_trace.c:2451
__traceiter_contention_end+0x7b/0xb0 include/trace/events/lock.h:122
trace_contention_end+0x114/0x140 include/trace/events/lock.h:122
__pv_queued_spin_lock_slowpath+0xb81/0xdc0 kernel/locking/qspinlock.c:557
pv_queued_spin_lock_slowpath arch/x86/include/asm/paravirt.h:584 [inline]
queued_spin_lock_slowpath+0x42/0x50 arch/x86/include/asm/qspinlock.h:51
queued_spin_lock include/asm-generic/qspinlock.h:114 [inline]
do_raw_spin_lock+0x272/0x370 kernel/locking/spinlock_debug.c:116
__raw_spin_lock_irqsave include/linux/spinlock_api_smp.h:111 [inline]
_raw_spin_lock_irqsave+0xe1/0x120 kernel/locking/spinlock.c:162
trie_delete_elem+0x96/0x6a0 kernel/bpf/lpm_trie.c:462
bpf_prog_1db1603a7cfa36fb+0x45/0x49
bpf_dispatcher_nop_func include/linux/bpf.h:1243 [inline]
__bpf_prog_run include/linux/filter.h:691 [inline]
bpf_prog_run include/linux/filter.h:698 [inline]
__bpf_trace_run kernel/trace/bpf_trace.c:2410 [inline]
bpf_trace_run2+0x30d/0x570 kernel/trace/bpf_trace.c:2451
__traceiter_contention_end+0x7b/0xb0 include/trace/events/lock.h:122
trace_contention_end+0xf5/0x120 include/trace/events/lock.h:122
__mutex_lock_common kernel/locking/mutex.c:617 [inline]
__mutex_lock+0x2e5/0xd70 kernel/locking/mutex.c:752
tracepoint_probe_unregister+0x32/0x990 kernel/tracepoint.c:548
bpf_raw_tp_link_release+0x45/0x70 kernel/bpf/syscall.c:3519
bpf_link_free+0x10e/0x2d0 kernel/bpf/syscall.c:3065
bpf_link_put_direct kernel/bpf/syscall.c:3106 [inline]
bpf_link_release+0x7b/0x90 kernel/bpf/syscall.c:3113
__fput+0x406/0x8b0 fs/file_table.c:422
__do_sys_close fs/open.c:1555 [inline]
__se_sys_close fs/open.c:1540 [inline]
__x64_sys_close+0x7f/0x110 fs/open.c:1540
do_syscall_x64 arch/x86/entry/common.c:52 [inline]
do_syscall_64+0xf3/0x230 arch/x86/entry/common.c:83
entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7f7ed1e7cb9a
Code: 48 3d 00 f0 ff ff 77 48 c3 0f 1f 80 00 00 00 00 48 83 ec 18 89 7c 24 0c e8 03 7f 02 00 8b 7c 24 0c 89 c2 b8 03 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 36 89 d7 89 44 24 0c e8 63 7f 02 00 8b 44 24
RSP: 002b:00007ffead8b0970 EFLAGS: 00000293 ORIG_RAX: 0000000000000003
RAX: ffffffffffffffda RBX: 0000000000000007 RCX: 00007f7ed1e7cb9a
RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000006
RBP: 00007ffead8b0a48 R08: 00007f7ed1e00000 R09: 0000000000000001
R10: 0000000000000001 R11: 0000000000000293 R12: 000000000001abb1
R13: 00007f7ed1fabf8c R14: 00007f7ed1fabf80 R15: 0000000000000226
</TASK>
Tested on:
commit: e377d803 kernel/trace: fix possible deadlock in trie_d..
git tree: https://linux.googlesource.com/linux/kernel/git/torvalds/linux
console output: https://syzkaller.appspot.com/x/log.txt?x=12178036980000
kernel config: https://syzkaller.appspot.com/x/.config?x=eb72437243175f22
dashboard link: https://syzkaller.appspot.com/bug?extid=9d95beb2a3c260622518
compiler: Debian clang version 15.0.6, GNU ld (GNU Binutils for Debian) 2.40
Note: no patches were applied.
For archival purposes, forwarding an incoming command email to
[email protected], [email protected].
***
Subject: Re: [email protected]
Author: [email protected]
#syz test
________________________________
From: Wojciech Gladysz <[email protected]>
Sent: Wednesday, June 5, 2024 09:25
To: syzbot <[email protected]>
Subject: Re: [email protected]
#syz test https://linux.googlesource.com/linux/kernel/git/torvalds/linux e377d803b65ee4130213b3c041fc25fdfec1bd90
________________________________
From: syzbot <[email protected]>
Sent: Wednesday, June 5, 2024 09:15
To: Wojciech Gladysz <[email protected]>
Cc: Wojciech Gladysz <[email protected]>; [email protected] <[email protected]>; [email protected] <[email protected]>
Subject: Re: [email protected]
EXTERNAL: This message was sent from outside of Infogain. Please do not click links or open attachments unless you know the content is safe.
> #syz testhttps://github.com/torvalds/linux.gite377d803b65ee4130213b3c041fc25fdfec1bd90
unknown command "testhttps://github.com/torvalds/linux.gite377d803b65ee4130213b3c041fc25fdfec1bd90"
> ________________________________
> From: syzbot <[email protected]>
> Sent: Wednesday, June 5, 2024 09:06
> To: Wojciech Gladysz <[email protected]>
> Cc: Wojciech Gladysz <[email protected]>; [email protected] <[email protected]>; [email protected] <[email protected]>
> Subject: Re: [email protected]
>
> EXTERNAL: This message was sent from outside of Infogain. Please do not click links or open attachments unless you know the content is safe.
>
>> #syz test https://linux.googlesource.com/linux/kernel/git/torvalds/linux<https://linux.googlesource.com/linux/kernel/git/torvalds/linux<https://linux.googlesource.com/linux/kernel/git/torvalds/linux>> e377d803b65ee4130213b3c041fc25fdfec1bd90
>
> "https://linux.googlesource.com/linux/kernel/git/torvalds/linux<https://linux.googlesource.com/linux/kernel/git/torvalds/linux<https://linux.googlesource.com/linux/kernel/git/torvalds/linux>>" does not look like a valid git repo address.
>
>>
>> The information in this email is confidential and may be legally privileged. It is intended solely for the addressee and access to it by anyone else is unauthorized. If you are not the intended recipient, any disclosure, copying, distribution or any action taken or omitted to be taken based on it, is strictly prohibited and may be unlawful.
Hello,
syzbot has tested the proposed patch but the reproducer is still triggering an issue:
possible deadlock in trie_delete_elem
============================================
WARNING: possible recursive locking detected
6.10.0-rc2-syzkaller-00022-g32f88d65f01b #0 Not tainted
--------------------------------------------
syz-executor.1/6309 is trying to acquire lock:
ffff88802e40e1f8 (&trie->lock){-.-.}-{2:2}, at: trie_delete_elem+0x96/0x6a0 kernel/bpf/lpm_trie.c:462
but task is already holding lock:
ffff88802e40c1f8 (&trie->lock){-.-.}-{2:2}, at: trie_delete_elem+0x96/0x6a0 kernel/bpf/lpm_trie.c:462
other info that might help us debug this:
Possible unsafe locking scenario:
CPU0
----
lock(&trie->lock);
lock(&trie->lock);
*** DEADLOCK ***
May be due to missing lock nesting notation
4 locks held by syz-executor.1/6309:
#0: ffff88807ada5090 (&child->perf_event_mutex){+.+.}-{3:3}, at: perf_event_exit_task+0x9b/0xaa0 kernel/events/core.c:13184
#1: ffffffff8e333f60 (rcu_read_lock){....}-{1:2}, at: rcu_lock_acquire include/linux/rcupdate.h:329 [inline]
#1: ffffffff8e333f60 (rcu_read_lock){....}-{1:2}, at: rcu_read_lock include/linux/rcupdate.h:781 [inline]
#1: ffffffff8e333f60 (rcu_read_lock){....}-{1:2}, at: __bpf_trace_run kernel/trace/bpf_trace.c:2402 [inline]
#1: ffffffff8e333f60 (rcu_read_lock){....}-{1:2}, at: bpf_trace_run2+0x1fc/0x540 kernel/trace/bpf_trace.c:2444
#2: ffff88802e40c1f8 (&trie->lock){-.-.}-{2:2}, at: trie_delete_elem+0x96/0x6a0 kernel/bpf/lpm_trie.c:462
#3: ffffffff8e333f60 (rcu_read_lock){....}-{1:2}, at: rcu_lock_acquire include/linux/rcupdate.h:329 [inline]
#3: ffffffff8e333f60 (rcu_read_lock){....}-{1:2}, at: rcu_read_lock include/linux/rcupdate.h:781 [inline]
#3: ffffffff8e333f60 (rcu_read_lock){....}-{1:2}, at: __bpf_trace_run kernel/trace/bpf_trace.c:2402 [inline]
#3: ffffffff8e333f60 (rcu_read_lock){....}-{1:2}, at: bpf_trace_run2+0x1fc/0x540 kernel/trace/bpf_trace.c:2444
stack backtrace:
CPU: 1 PID: 6309 Comm: syz-executor.1 Not tainted 6.10.0-rc2-syzkaller-00022-g32f88d65f01b #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 04/02/2024
Call Trace:
<TASK>
__dump_stack lib/dump_stack.c:88 [inline]
dump_stack_lvl+0x241/0x360 lib/dump_stack.c:114
check_deadlock kernel/locking/lockdep.c:3062 [inline]
validate_chain+0x15d3/0x5900 kernel/locking/lockdep.c:3856
__lock_acquire+0x1346/0x1fd0 kernel/locking/lockdep.c:5137
lock_acquire+0x1ed/0x550 kernel/locking/lockdep.c:5754
__raw_spin_lock_irqsave include/linux/spinlock_api_smp.h:110 [inline]
_raw_spin_lock_irqsave+0xd5/0x120 kernel/locking/spinlock.c:162
trie_delete_elem+0x96/0x6a0 kernel/bpf/lpm_trie.c:462
bpf_prog_1db1603a7cfa36fb+0x45/0x49
bpf_dispatcher_nop_func include/linux/bpf.h:1243 [inline]
__bpf_prog_run include/linux/filter.h:691 [inline]
bpf_prog_run include/linux/filter.h:698 [inline]
__bpf_trace_run kernel/trace/bpf_trace.c:2403 [inline]
bpf_trace_run2+0x2ec/0x540 kernel/trace/bpf_trace.c:2444
__traceiter_contention_end+0x7b/0xb0 include/trace/events/lock.h:122
trace_contention_end+0x114/0x140 include/trace/events/lock.h:122
__pv_queued_spin_lock_slowpath+0xb81/0xdc0 kernel/locking/qspinlock.c:557
pv_queued_spin_lock_slowpath arch/x86/include/asm/paravirt.h:584 [inline]
queued_spin_lock_slowpath+0x42/0x50 arch/x86/include/asm/qspinlock.h:51
queued_spin_lock include/asm-generic/qspinlock.h:114 [inline]
do_raw_spin_lock+0x272/0x370 kernel/locking/spinlock_debug.c:116
__raw_spin_lock_irqsave include/linux/spinlock_api_smp.h:111 [inline]
_raw_spin_lock_irqsave+0xe1/0x120 kernel/locking/spinlock.c:162
trie_delete_elem+0x96/0x6a0 kernel/bpf/lpm_trie.c:462
bpf_prog_1db1603a7cfa36fb+0x45/0x49
bpf_dispatcher_nop_func include/linux/bpf.h:1243 [inline]
__bpf_prog_run include/linux/filter.h:691 [inline]
bpf_prog_run include/linux/filter.h:698 [inline]
__bpf_trace_run kernel/trace/bpf_trace.c:2403 [inline]
bpf_trace_run2+0x2ec/0x540 kernel/trace/bpf_trace.c:2444
__traceiter_contention_end+0x7b/0xb0 include/trace/events/lock.h:122
trace_contention_end+0xf5/0x120 include/trace/events/lock.h:122
__mutex_lock_common kernel/locking/mutex.c:617 [inline]
__mutex_lock+0x2e5/0xd70 kernel/locking/mutex.c:752
perf_event_exit_task+0x9b/0xaa0 kernel/events/core.c:13184
do_exit+0xa37/0x27e0 kernel/exit.c:883
do_group_exit+0x207/0x2c0 kernel/exit.c:1023
__do_sys_exit_group kernel/exit.c:1034 [inline]
__se_sys_exit_group kernel/exit.c:1032 [inline]
__x64_sys_exit_group+0x3f/0x40 kernel/exit.c:1032
do_syscall_x64 arch/x86/entry/common.c:52 [inline]
do_syscall_64+0xf3/0x230 arch/x86/entry/common.c:83
entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7f7af347dca9
Code: Unable to access opcode bytes at 0x7f7af347dc7f.
RSP: 002b:00007ffc344b9708 EFLAGS: 00000246 ORIG_RAX: 00000000000000e7
RAX: ffffffffffffffda RBX: 000000000000001e RCX: 00007f7af347dca9
RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000
RBP: 0000000000000001 R08: 0000000000000001 R09: 0000000000000000
R10: 00007f7af3400000 R11: 0000000000000246 R12: 0000000000000000
R13: 0000000000000000 R14: 0000000000000001 R15: 0000000000000000
</TASK>
Tested on:
commit: 32f88d65 Merge tag 'linux_kselftest-fixes-6.10-rc3' of..
git tree: upstream
console output: https://syzkaller.appspot.com/x/log.txt?x=162ace06980000
kernel config: https://syzkaller.appspot.com/x/.config?x=eb72437243175f22
dashboard link: https://syzkaller.appspot.com/bug?extid=9d95beb2a3c260622518
compiler: Debian clang version 15.0.6, GNU ld (GNU Binutils for Debian) 2.40
Note: no patches were applied.
For archival purposes, forwarding an incoming command email to
[email protected], [email protected].
***
Subject: Re: [email protected]
Author: [email protected]
#syz test https://linux.googlesource.com/linux/kernel/git/torvalds/linux e377d803b65ee4130213b3c041fc25fdfec1bd90
--- a/kernel/trace/bpf_trace.c
+++ b/kernel/trace/bpf_trace.c
@@ -2393,12 +2393,21 @@ void __bpf_trace_run(struct bpf_raw_tp_link *link, u64 *args)
     cant_sleep();
     // return if instrumentation disabled, see: bpf_disable_instrumentation
-     if (unlikely(__this_cpu_read(bpf_prog_active))) {
+     int instrumentation = unlikely(__this_cpu_read(bpf_prog_active));
+     if (instrumentation) {
+           printk("SKIP FOR INSTRUMENTATION: %s > %s > %p /%i ==============\n",
+                       prog->aux->name,
+                       link->btp->tp->name, prog, instrumentation);
           bpf_prog_inc_misses_counter(prog);
           return;
     }
-     if (unlikely(this_cpu_inc_return(*(prog->active)) != 1)) {
+     int active = this_cpu_inc_return(*(prog->active));
+     // printk("%s > %s > %p /%i\n", prog->aux->name, link->btp->tp->name, prog, active);
+     if (active != 1) {
+           printk("SKIP FOR ACTIVE: %s > %s > %p /%i =======================\n",
+                       prog->aux->name,
+                       link->btp->tp->name, prog, active);
           bpf_prog_inc_misses_counter(prog);
           goto out;
     }
--- a/kernel/tracepoint.c
+++ b/kernel/tracepoint.c
@@ -67,7 +67,7 @@ static void tp_rcu_cond_sync(enum tp_transition_sync sync)
}
/* Set to 1 to enable tracepoint debug output */
-static const int tracepoint_debug;
+static const int tracepoint_debug=1;
#ifdef CONFIG_MODULES
/*
@@ -298,6 +298,8 @@ static enum tp_func_state nr_func_state(const struct tracepoint_func *tp_funcs)
{
     if (!tp_funcs)
           return TP_FUNC_0;
+     if (!tp_funcs[0].func)
+           return TP_FUNC_0;
     if (!tp_funcs[1].func)
           return TP_FUNC_1;
     if (!tp_funcs[2].func)
The information in this email is confidential and may be legally privileged. It is intended solely for the addressee and access to it by anyone else is unauthorized. If you are not the intended recipient, any disclosure, copying, distribution or any action taken or omitted to be taken based on it, is strictly prohibited and may be unlawful.
Hello,
syzbot tried to test the proposed patch but the build/boot failed:
failed to apply patch:
checking file kernel/trace/bpf_trace.c
patch: **** malformed patch at line 7: @@ -67,7 +67,7 @@ static void tp_rcu_cond_sync(enum tp_transition_sync sync)
Tested on:
commit: e377d803 kernel/trace: fix possible deadlock in trie_d..
git tree: https://linux.googlesource.com/linux/kernel/git/torvalds/linux
kernel config: https://syzkaller.appspot.com/x/.config?x=9d7ea7de0cb32587
dashboard link: https://syzkaller.appspot.com/bug?extid=9d95beb2a3c260622518
compiler:
patch: https://syzkaller.appspot.com/x/patch.diff?x=13dfb85a980000
For archival purposes, forwarding an incoming command email to
[email protected], [email protected].
***
Subject: Re: [email protected]
Author: [email protected]
#syz test https://linux.googlesource.com/linux/kernel/git/torvalds/linux e377d803b65ee4130213b3c041fc25fdfec1bd90
diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c
index 2d29bc0f21cc..75fdb8e3abaa 100644
--- a/kernel/trace/bpf_trace.c
+++ b/kernel/trace/bpf_trace.c
@@ -2393,12 +2393,21 @@ void __bpf_trace_run(struct bpf_raw_tp_link *link, u64 *args)
     cant_sleep();
     // return if instrumentation disabled, see: bpf_disable_instrumentation
-     if (unlikely(__this_cpu_read(bpf_prog_active))) {
+     int instrumentation = unlikely(__this_cpu_read(bpf_prog_active));
+     if (instrumentation) {
+           printk("SKIP FOR INSTRUMENTATION: %s > %s > %p /%i ==============\n",
+                       prog->aux->name,
+                       link->btp->tp->name, prog, instrumentation);
           bpf_prog_inc_misses_counter(prog);
           return;
     }
-     if (unlikely(this_cpu_inc_return(*(prog->active)) != 1)) {
+     int active = this_cpu_inc_return(*(prog->active));
+     // printk("%s > %s > %p /%i\n", prog->aux->name, link->btp->tp->name, prog, active);
+     if (active != 1) {
+           printk("SKIP FOR ACTIVE: %s > %s > %p /%i =======================\n",
+                       prog->aux->name,
+                       link->btp->tp->name, prog, active);
           bpf_prog_inc_misses_counter(prog);
           goto out;
     }
diff --git a/kernel/tracepoint.c b/kernel/tracepoint.c
index 8d1507dd0724..e756262d8df7 100644
--- a/kernel/tracepoint.c
+++ b/kernel/tracepoint.c
@@ -168,12 +169,21 @@ static inline void release_probes(struct tracepoint_func *old)
static void debug_print_probes(struct tracepoint_func *funcs)
{
     int i;
+     struct bpf_raw_tp_link *link;
     if (!tracepoint_debug || !funcs)
           return;
-     for (i = 0; funcs[i].func; i++)
-           printk(KERN_DEBUG "Probe %d : %p\n", i, funcs[i].func);
+     for (i = 0; funcs[i].func; i++) {
+           link = funcs[i].data;
+           int active = this_cpu_read(*(link->link.prog->active));
+           printk("Probe %d : %p / %p: %s/%d / %i\n", i,
+                       funcs[i].func,
+                       link,
+                       link->link.prog->aux->name,
+                       active,
+                       funcs[i].prio);
+     }
}
static struct tracepoint_func *
@@ -298,6 +308,8 @@ static enum tp_func_state nr_func_state(const struct tracepoint_func *tp_funcs)
{
     if (!tp_funcs)
           return TP_FUNC_0;
+     if (!tp_funcs[0].func)
+           return TP_FUNC_0;
     if (!tp_funcs[1].func)
           return TP_FUNC_1;
     if (!tp_funcs[2].func)
The information in this email is confidential and may be legally privileged. It is intended solely for the addressee and access to it by anyone else is unauthorized. If you are not the intended recipient, any disclosure, copying, distribution or any action taken or omitted to be taken based on it, is strictly prohibited and may be unlawful.
Hello,
syzbot tried to test the proposed patch but the build/boot failed:
failed to apply patch:
checking file kernel/trace/bpf_trace.c
patch: **** malformed patch at line 7: diff --git a/kernel/tracepoint.c b/kernel/tracepoint.c
Tested on:
commit: e377d803 kernel/trace: fix possible deadlock in trie_d..
git tree: https://linux.googlesource.com/linux/kernel/git/torvalds/linux
kernel config: https://syzkaller.appspot.com/x/.config?x=9d7ea7de0cb32587
dashboard link: https://syzkaller.appspot.com/bug?extid=9d95beb2a3c260622518
compiler:
patch: https://syzkaller.appspot.com/x/patch.diff?x=119fb274980000
For archival purposes, forwarding an incoming command email to
[email protected], [email protected].
***
Subject: Re: [email protected]
Author: [email protected]
#syz test https://linux.googlesource.com/linux/kernel/git/torvalds/linux e377d803b65ee4130213b3c041fc25fdfec1bd90
--- a/kernel/trace/bpf_trace.c
+++ b/kernel/trace/bpf_trace.c
@@ -2393,12 +2393,21 @@ void __bpf_trace_run(struct
     cant_sleep();
     // return if instrumentation disabled, see: bpf_disable_instrumentation
-     if (unlikely(__this_cpu_read(bpf_prog_active))) {
+     int instrumentation = unlikely(__this_cpu_read(bpf_prog_active));
+     if (instrumentation) {
+           printk("SKIP FOR INSTRUMENTATION: %s > %s > %p /%i ==============\n",
+                       prog->aux->name,
+                       link->btp->tp->name, prog, instrumentation);
           bpf_prog_inc_misses_counter(prog);
           return;
     }
-     if (unlikely(this_cpu_inc_return(*(prog->active)) != 1)) {
+     int active = this_cpu_inc_return(*(prog->active));
+     // printk("%s > %s > %p /%i\n", prog->aux->name, link->btp->tp->name, prog, active);
+     if (active != 1) {
+           printk("SKIP FOR ACTIVE: %s > %s > %p /%i =======================\n",
+                       prog->aux->name,
+                       link->btp->tp->name, prog, active);
           bpf_prog_inc_misses_counter(prog);
           goto out;
     }
--- a/kernel/tracepoint.c
+++ b/kernel/tracepoint.c
@@ -298,6 +308,8 @@ static enum tp_func_state nr_func_state(const
{
     if (!tp_funcs)
           return TP_FUNC_0;
+     if (!tp_funcs[0].func)
+           return TP_FUNC_0;
     if (!tp_funcs[1].func)
           return TP_FUNC_1;
     if (!tp_funcs[2].func)
--
The information in this email is confidential and may be legally privileged. It is intended solely for the addressee and access to it by anyone else is unauthorized. If you are not the intended recipient, any disclosure, copying, distribution or any action taken or omitted to be taken based on it, is strictly prohibited and may be unlawful.
For archival purposes, forwarding an incoming command email to
[email protected], [email protected].
***
Subject: Re: [email protected]
Author: [email protected]
#syz test https://linux.googlesource.com/linux/kernel/git/torvalds/linux e377d803b65ee4130213b3c041fc25fdfec1bd90
--- a/kernel/trace/bpf_trace.c
+++ b/kernel/trace/bpf_trace.c
     cant_sleep();
     // return if instrumentation disabled, see: bpf_disable_instrumentation
-     if (unlikely(__this_cpu_read(bpf_prog_active))) {
+     int instrumentation = unlikely(__this_cpu_read(bpf_prog_active));
+     if (instrumentation) {
+           printk("SKIP FOR INSTRUMENTATION: %s > %s > %p /%i ==============\n",
+                       prog->aux->name,
+                       link->btp->tp->name, prog, instrumentation);
           bpf_prog_inc_misses_counter(prog);
           return;
     }
-     if (unlikely(this_cpu_inc_return(*(prog->active)) != 1)) {
+     int active = this_cpu_inc_return(*(prog->active));
+     // printk("%s > %s > %p /%i\n", prog->aux->name, link->btp->tp->name, prog, active);
+     if (active != 1) {
+           printk("SKIP FOR ACTIVE: %s > %s > %p /%i =======================\n",
+                       prog->aux->name,
+                       link->btp->tp->name, prog, active);
           bpf_prog_inc_misses_counter(prog);
           goto out;
     }
--- a/kernel/tracepoint.c
+++ b/kernel/tracepoint.c
{
     if (!tp_funcs)
           return TP_FUNC_0;
+     if (!tp_funcs[0].func)
+           return TP_FUNC_0;
     if (!tp_funcs[1].func)
           return TP_FUNC_1;
     if (!tp_funcs[2].func)
--
The information in this email is confidential and may be legally privileged. It is intended solely for the addressee and access to it by anyone else is unauthorized. If you are not the intended recipient, any disclosure, copying, distribution or any action taken or omitted to be taken based on it, is strictly prohibited and may be unlawful.
Hello,
syzbot tried to test the proposed patch but the build/boot failed:
failed to apply patch:
checking file kernel/trace/bpf_trace.c
patch: **** malformed patch at line 7: @@ -298,6 +308,8 @@ static enum tp_func_state nr_func_state(const
Tested on:
commit: e377d803 kernel/trace: fix possible deadlock in trie_d..
git tree: https://linux.googlesource.com/linux/kernel/git/torvalds/linux
kernel config: https://syzkaller.appspot.com/x/.config?x=9d7ea7de0cb32587
dashboard link: https://syzkaller.appspot.com/bug?extid=9d95beb2a3c260622518
compiler:
patch: https://syzkaller.appspot.com/x/patch.diff?x=109b9a16980000
Hello,
syzbot tried to test the proposed patch but the build/boot failed:
failed to apply patch:
patch: **** Only garbage was found in the patch input.
Tested on:
commit: e377d803 kernel/trace: fix possible deadlock in trie_d..
git tree: https://linux.googlesource.com/linux/kernel/git/torvalds/linux
kernel config: https://syzkaller.appspot.com/x/.config?x=9d7ea7de0cb32587
dashboard link: https://syzkaller.appspot.com/bug?extid=9d95beb2a3c260622518
compiler:
patch: https://syzkaller.appspot.com/x/patch.diff?x=1038e65a980000
For archival purposes, forwarding an incoming command email to
[email protected], [email protected].
***
Subject: Re: [email protected]
Author: [email protected]
#syz test: https://linux.googlesource.com/linux/kernel/git/torvalds/linux e377d803b65ee4130213b3c041fc25fdfec1bd90
diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c
index 2d29bc0f21cc..75fdb8e3abaa 100644
--- a/kernel/trace/bpf_trace.c
+++ b/kernel/trace/bpf_trace.c
@@ -2393,12 +2393,21 @@ void __bpf_trace_run(struct bpf_raw_tp_link *link, u64 *args)
cant_sleep();
// return if instrumentation disabled, see: bpf_disable_instrumentation
- if (unlikely(__this_cpu_read(bpf_prog_active))) {
+ int instrumentation = unlikely(__this_cpu_read(bpf_prog_active));
+ if (instrumentation) {
+ printk("SKIP FOR INSTRUMENTATION: %s > %s > %p /%i ==============\n",
+ prog->aux->name,
+ link->btp->tp->name, prog, instrumentation);
bpf_prog_inc_misses_counter(prog);
return;
}
- if (unlikely(this_cpu_inc_return(*(prog->active)) != 1)) {
+ int active = this_cpu_inc_return(*(prog->active));
+ // printk("%s > %s > %p /%i\n", prog->aux->name, link->btp->tp->name, prog, active);
+ if (active != 1) {
+ printk("SKIP FOR ACTIVE: %s > %s > %p /%i =======================\n",
+ prog->aux->name,
+ link->btp->tp->name, prog, active);
bpf_prog_inc_misses_counter(prog);
goto out;
}
diff --git a/kernel/tracepoint.c b/kernel/tracepoint.c
index 8d1507dd0724..e756262d8df7 100644
--- a/kernel/tracepoint.c
+++ b/kernel/tracepoint.c
@@ -298,6 +308,8 @@ static enum tp_func_state nr_func_state(const struct tracepoint_func *tp_funcs)
{
if (!tp_funcs)
return TP_FUNC_0;
+ if (!tp_funcs[0].func)
+ return TP_FUNC_0;
if (!tp_funcs[1].func)
return TP_FUNC_1;
if (!tp_funcs[2].func)
--
The information in this email is confidential and may be legally privileged. It is intended solely for the addressee and access to it by anyone else is unauthorized. If you are not the intended recipient, any disclosure, copying, distribution or any action taken or omitted to be taken based on it, is strictly prohibited and may be unlawful.
Hello,
syzbot tried to test the proposed patch but the build/boot failed:
failed to apply patch:
checking file kernel/trace/bpf_trace.c
patch: **** malformed patch at line 7: diff --git a/kernel/tracepoint.c b/kernel/tracepoint.c
Tested on:
commit: e377d803 kernel/trace: fix possible deadlock in trie_d..
git tree: https://linux.googlesource.com/linux/kernel/git/torvalds/linux
kernel config: https://syzkaller.appspot.com/x/.config?x=9d7ea7de0cb32587
dashboard link: https://syzkaller.appspot.com/bug?extid=9d95beb2a3c260622518
compiler:
patch: https://syzkaller.appspot.com/x/patch.diff?x=170e179a980000
Hello,
syzbot tried to test the proposed patch but the build/boot failed:
failed to apply patch:
checking file kernel/trace/bpf_trace.c
patch: **** malformed patch at line 7: diff --git a/kernel/tracepoint.c b/kernel/tracepoint.c
Tested on:
commit: e377d803 kernel/trace: fix possible deadlock in trie_d..
git tree: https://linux.googlesource.com/linux/kernel/git/torvalds/linux
kernel config: https://syzkaller.appspot.com/x/.config?x=9d7ea7de0cb32587
dashboard link: https://syzkaller.appspot.com/bug?extid=9d95beb2a3c260622518
compiler:
patch: https://syzkaller.appspot.com/x/patch.diff?x=14224362980000
For archival purposes, forwarding an incoming command email to
[email protected], [email protected].
***
Subject: Re: [email protected]
Author: [email protected]
#syz test: https://linux.googlesource.com/linux/kernel/git/torvalds/linux e377d803b65ee4130213b3c041fc25fdfec1bd90
diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c
index 2d29bc0f21cc..75fdb8e3abaa 100644
--- a/kernel/trace/bpf_trace.c
+++ b/kernel/trace/bpf_trace.c
@@ -2393,12 +2393,21 @@ void __bpf_trace_run(struct bpf_raw_tp_link *link, u64 *args)
cant_sleep();
// return if instrumentation disabled, see: bpf_disable_instrumentation
- if (unlikely(__this_cpu_read(bpf_prog_active))) {
+ int instrumentation = unlikely(__this_cpu_read(bpf_prog_active));
+ if (instrumentation) {
+ printk("SKIP FOR INSTRUMENTATION: %s > %s > %p /%i ==============\n",
+ prog->aux->name,
+ link->btp->tp->name, prog, instrumentation);
bpf_prog_inc_misses_counter(prog);
return;
}
- if (unlikely(this_cpu_inc_return(*(prog->active)) != 1)) {
+ int active = this_cpu_inc_return(*(prog->active));
+ // printk("%s > %s > %p /%i\n", prog->aux->name, link->btp->tp->name, prog, active);
+ if (active != 1) {
+ printk("SKIP FOR ACTIVE: %s > %s > %p /%i =======================\n",
+ prog->aux->name,
+ link->btp->tp->name, prog, active);
bpf_prog_inc_misses_counter(prog);
goto out;
}
diff --git a/kernel/tracepoint.c b/kernel/tracepoint.c
index 8d1507dd0724..e756262d8df7 100644
--- a/kernel/tracepoint.c
+++ b/kernel/tracepoint.c
@@ -298,6 +308,8 @@ static enum tp_func_state nr_func_state(const struct tracepoint_func *tp_funcs)
{
if (!tp_funcs)
return TP_FUNC_0;
+ if (!tp_funcs[0].func)
+ return TP_FUNC_0;
if (!tp_funcs[1].func)
return TP_FUNC_1;
if (!tp_funcs[2].func)
--
The information in this email is confidential and may be legally privileged. It is intended solely for the addressee and access to it by anyone else is unauthorized. If you are not the intended recipient, any disclosure, copying, distribution or any action taken or omitted to be taken based on it, is strictly prohibited and may be unlawful.
For archival purposes, forwarding an incoming command email to
[email protected], [email protected].
***
Subject: Re: [email protected]
Author: [email protected]
#syz test: https://linux.googlesource.com/linux/kernel/git/torvalds/linux e377d803b65ee4130213b3c041fc25fdfec1bd90
--- a/kernel/trace/bpf_trace.c
+++ b/kernel/trace/bpf_trace.c
@@ -2393,12 +2393,21 @@ void __bpf_trace_run(struct bpf_raw_tp_link *link, u64 *args)
cant_sleep();
// return if instrumentation disabled, see: bpf_disable_instrumentation
- if (unlikely(__this_cpu_read(bpf_prog_active))) {
+ int instrumentation = unlikely(__this_cpu_read(bpf_prog_active));
+ if (instrumentation) {
+ printk("SKIP FOR INSTRUMENTATION: %s > %s > %p /%i ==============\n",
+ prog->aux->name,
+ link->btp->tp->name, prog, instrumentation);
bpf_prog_inc_misses_counter(prog);
return;
}
- if (unlikely(this_cpu_inc_return(*(prog->active)) != 1)) {
+ int active = this_cpu_inc_return(*(prog->active));
+ printk("%s > %s > %p /%i\n", prog->aux->name, link->btp->tp->name, prog, active);
+ if (active != 1) {
+ printk("SKIP FOR ACTIVE: %s > %s > %p /%i =======================\n",
+ prog->aux->name,
+ link->btp->tp->name, prog, active);
bpf_prog_inc_misses_counter(prog);
goto out;
}
diff --git a/kernel/tracepoint.c b/kernel/tracepoint.c
index 8d1507dd0724..f852d7b86ff4 100644
--- a/kernel/tracepoint.c
+++ b/kernel/tracepoint.c
@@ -298,6 +308,8 @@ static enum tp_func_state nr_func_state(const struct tracepoint_func *tp_funcs)
{
if (!tp_funcs)
return TP_FUNC_0;
+ if (!tp_funcs[0].func)
+ return TP_FUNC_0;
if (!tp_funcs[1].func)
return TP_FUNC_1;
if (!tp_funcs[2].func)
--
The information in this email is confidential and may be legally privileged. It is intended solely for the addressee and access to it by anyone else is unauthorized. If you are not the intended recipient, any disclosure, copying, distribution or any action taken or omitted to be taken based on it, is strictly prohibited and may be unlawful.
For archival purposes, forwarding an incoming command email to
[email protected], [email protected].
***
Subject: possible deadlock in trie_delete_elem
Author: [email protected]
#syz test https://linux.googlesource.com/linux/kernel/git/torvalds/linux e377d803b65ee4130213b3c041fc25fdfec1bd90
diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c
index 2d29bc0f21cc..75fdb8e3abaa 100644
--- a/kernel/trace/bpf_trace.c
+++ b/kernel/trace/bpf_trace.c
@@ -2393,12 +2393,21 @@ void __bpf_trace_run(struct bpf_raw_tp_link *link, u64 *args)
cant_sleep();
// return if instrumentation disabled, see: bpf_disable_instrumentation
- if (unlikely(__this_cpu_read(bpf_prog_active))) {
+ int instrumentation = unlikely(__this_cpu_read(bpf_prog_active));
+ if (instrumentation) {
+ printk("SKIP FOR INSTRUMENTATION: %s > %s > %p /%i ==============\n",
+ prog->aux->name,
+ link->btp->tp->name, prog, instrumentation);
bpf_prog_inc_misses_counter(prog);
return;
}
- if (unlikely(this_cpu_inc_return(*(prog->active)) != 1)) {
+ int active = this_cpu_inc_return(*(prog->active));
+ // printk("%s > %s > %p /%i\n", prog->aux->name, link->btp->tp->name, prog, active);
+ if (active != 1) {
+ printk("SKIP FOR ACTIVE: %s > %s > %p /%i =======================\n",
+ prog->aux->name,
+ link->btp->tp->name, prog, active);
bpf_prog_inc_misses_counter(prog);
goto out;
}
diff --git a/kernel/tracepoint.c b/kernel/tracepoint.c
index 8d1507dd0724..e756262d8df7 100644
--- a/kernel/tracepoint.c
+++ b/kernel/tracepoint.c
@@ -168,12 +169,21 @@ static inline void release_probes(struct tracepoint_func *old)
static void debug_print_probes(struct tracepoint_func *funcs)
{
int i;
+ struct bpf_raw_tp_link *link;
if (!tracepoint_debug || !funcs)
return;
- for (i = 0; funcs[i].func; i++)
- printk(KERN_DEBUG "Probe %d : %p\n", i, funcs[i].func);
+ for (i = 0; funcs[i].func; i++) {
+ link = funcs[i].data;
+ int active = this_cpu_read(*(link->link.prog->active));
+ printk("Probe %d : %p / %p: %s/%d / %i\n", i,
+ funcs[i].func,
+ link,
+ link->link.prog->aux->name,
+ active,
+ funcs[i].prio);
+ }
}
static struct tracepoint_func *
@@ -298,6 +308,8 @@ static enum tp_func_state nr_func_state(const struct tracepoint_func *tp_funcs)
{
if (!tp_funcs)
return TP_FUNC_0;
+ if (!tp_funcs[0].func)
+ return TP_FUNC_0;
if (!tp_funcs[1].func)
return TP_FUNC_1;
if (!tp_funcs[2].func)
The information in this email is confidential and may be legally privileged. It is intended solely for the addressee and access to it by anyone else is unauthorized. If you are not the intended recipient, any disclosure, copying, distribution or any action taken or omitted to be taken based on it, is strictly prohibited and may be unlawful.
Hello,
syzbot tried to test the proposed patch but the build/boot failed:
failed to apply patch:
checking file kernel/trace/bpf_trace.c
patch: **** malformed patch at line 7: diff --git a/kernel/tracepoint.c b/kernel/tracepoint.c
Tested on:
commit: e377d803 kernel/trace: fix possible deadlock in trie_d..
git tree: https://linux.googlesource.com/linux/kernel/git/torvalds/linux
kernel config: https://syzkaller.appspot.com/x/.config?x=9d7ea7de0cb32587
dashboard link: https://syzkaller.appspot.com/bug?extid=9d95beb2a3c260622518
compiler:
patch: https://syzkaller.appspot.com/x/patch.diff?x=10d9f026980000
For archival purposes, forwarding an incoming command email to
[email protected], [email protected].
***
Subject: possible deadlock in trie_delete_elem
Author: [email protected]
#syz test: https://linux.googlesource.com/linux/kernel/git/torvalds/linux e377d803b65ee4130213b3c041fc25fdfec1bd90
diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c
index 2d29bc0f21cc..75fdb8e3abaa 100644
--- a/kernel/trace/bpf_trace.c
+++ b/kernel/trace/bpf_trace.c
@@ -2393,12 +2393,21 @@ void __bpf_trace_run(struct bpf_raw_tp_link *link, u64 *args)
cant_sleep();
// return if instrumentation disabled, see: bpf_disable_instrumentation
- if (unlikely(__this_cpu_read(bpf_prog_active))) {
+ int instrumentation = unlikely(__this_cpu_read(bpf_prog_active));
+ if (instrumentation) {
+ printk("SKIP FOR INSTRUMENTATION: %s > %s > %p /%i ==============\n",
+ prog->aux->name,
+ link->btp->tp->name, prog, instrumentation);
bpf_prog_inc_misses_counter(prog);
return;
}
- if (unlikely(this_cpu_inc_return(*(prog->active)) != 1)) {
+ int active = this_cpu_inc_return(*(prog->active));
+ // printk("%s > %s > %p /%i\n", prog->aux->name, link->btp->tp->name, prog, active);
+ if (active != 1) {
+ printk("SKIP FOR ACTIVE: %s > %s > %p /%i =======================\n",
+ prog->aux->name,
+ link->btp->tp->name, prog, active);
bpf_prog_inc_misses_counter(prog);
goto out;
}
diff --git a/kernel/tracepoint.c b/kernel/tracepoint.c
index 8d1507dd0724..e756262d8df7 100644
--- a/kernel/tracepoint.c
+++ b/kernel/tracepoint.c
@@ -168,12 +169,21 @@ static inline void release_probes(struct tracepoint_func *old)
static void debug_print_probes(struct tracepoint_func *funcs)
{
int i;
+ struct bpf_raw_tp_link *link;
if (!tracepoint_debug || !funcs)
return;
- for (i = 0; funcs[i].func; i++)
- printk(KERN_DEBUG "Probe %d : %p\n", i, funcs[i].func);
+ for (i = 0; funcs[i].func; i++) {
+ link = funcs[i].data;
+ int active = this_cpu_read(*(link->link.prog->active));
+ printk("Probe %d : %p / %p: %s/%d / %i\n", i,
+ funcs[i].func,
+ link,
+ link->link.prog->aux->name,
+ active,
+ funcs[i].prio);
+ }
}
static struct tracepoint_func *
@@ -298,6 +308,8 @@ static enum tp_func_state nr_func_state(const struct tracepoint_func *tp_funcs)
{
if (!tp_funcs)
return TP_FUNC_0;
+ if (!tp_funcs[0].func)
+ return TP_FUNC_0;
if (!tp_funcs[1].func)
return TP_FUNC_1;
if (!tp_funcs[2].func)
Hello,
syzbot tried to test the proposed patch but the build/boot failed:
failed to apply patch:
checking file kernel/trace/bpf_trace.c
patch: **** malformed patch at line 5: diff --git a/kernel/tracepoint.c b/kernel/tracepoint.c
Tested on:
commit: e377d803 kernel/trace: fix possible deadlock in trie_d..
git tree: https://linux.googlesource.com/linux/kernel/git/torvalds/linux
kernel config: https://syzkaller.appspot.com/x/.config?x=9d7ea7de0cb32587
dashboard link: https://syzkaller.appspot.com/bug?extid=9d95beb2a3c260622518
compiler:
patch: https://syzkaller.appspot.com/x/patch.diff?x=13052b4a980000
For archival purposes, forwarding an incoming command email to
[email protected], [email protected].
***
Subject: possible deadlock in trie_delete_elem
Author: [email protected]
#syz test: https://linux.googlesource.com/linux/kernel/git/torvalds/linux e377d803b65ee4130213b3c041fc25fdfec1bd90
---
kernel/trace/bpf_trace.c | 13 +++++++++++--
kernel/tracepoint.c | 15 +++++++++++++--
2 files changed, 24 insertions(+), 4 deletions(-)
diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c
index 2d29bc0f21cc..75fdb8e3abaa 100644
--- a/kernel/trace/bpf_trace.c
+++ b/kernel/trace/bpf_trace.c
@@ -2393,12 +2393,21 @@ void __bpf_trace_run(struct bpf_raw_tp_link *link, u64 *args)
cant_sleep();
// return if instrumentation disabled, see: bpf_disable_instrumentation
- if (unlikely(__this_cpu_read(bpf_prog_active))) {
+ int instrumentation = unlikely(__this_cpu_read(bpf_prog_active));
+ if (instrumentation) {
+ printk("SKIP FOR INSTRUMENTATION: %s > %s > %p /%i ==============\n",
+ prog->aux->name,
+ link->btp->tp->name, prog, instrumentation);
bpf_prog_inc_misses_counter(prog);
return;
}
- if (unlikely(this_cpu_inc_return(*(prog->active)) != 1)) {
+ int active = this_cpu_inc_return(*(prog->active));
+ // printk("%s > %s > %p /%i\n", prog->aux->name, link->btp->tp->name, prog, active);
+ if (active != 1) {
+ printk("SKIP FOR ACTIVE: %s > %s > %p /%i =======================\n",
+ prog->aux->name,
+ link->btp->tp->name, prog, active);
bpf_prog_inc_misses_counter(prog);
goto out;
}
diff --git a/kernel/tracepoint.c b/kernel/tracepoint.c
index 8d1507dd0724..a0a0d8b16b41 100644
--- a/kernel/tracepoint.c
+++ b/kernel/tracepoint.c
@@ -168,12 +168,21 @@ static inline void release_probes(struct tracepoint_func *old)
static void debug_print_probes(struct tracepoint_func *funcs)
{
int i;
+ struct bpf_raw_tp_link *link;
if (!tracepoint_debug || !funcs)
return;
- for (i = 0; funcs[i].func; i++)
- printk(KERN_DEBUG "Probe %d : %p\n", i, funcs[i].func);
+ for (i = 0; funcs[i].func; i++) {
+ link = funcs[i].data;
+ int active = this_cpu_read(*(link->link.prog->active));
+ printk("Probe %d : %p / %p: %s/%d / %i\n", i,
+ funcs[i].func,
+ link,
+ link->link.prog->aux->name,
+ active,
+ funcs[i].prio);
+ }
}
static struct tracepoint_func *
@@ -298,6 +307,8 @@ static enum tp_func_state nr_func_state(const struct tracepoint_func *tp_funcs)
{
if (!tp_funcs)
return TP_FUNC_0;
+ if (!tp_funcs[0].func)
+ return TP_FUNC_0;
if (!tp_funcs[1].func)
return TP_FUNC_1;
if (!tp_funcs[2].func)
--
2.34.1
Hello,
syzbot tried to test the proposed patch but the build/boot failed:
failed to apply patch:
checking file kernel/trace/bpf_trace.c
patch: **** malformed patch at line 7: diff --git a/kernel/tracepoint.c b/kernel/tracepoint.c
Tested on:
commit: e377d803 kernel/trace: fix possible deadlock in trie_d..
git tree: https://linux.googlesource.com/linux/kernel/git/torvalds/linux
kernel config: https://syzkaller.appspot.com/x/.config?x=9d7ea7de0cb32587
dashboard link: https://syzkaller.appspot.com/bug?extid=9d95beb2a3c260622518
compiler:
patch: https://syzkaller.appspot.com/x/patch.diff?x=150d9422980000
For archival purposes, forwarding an incoming command email to
[email protected], [email protected].
***
Subject: possible deadlock in trie_delete_elem
Author: [email protected]
#syz test: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git c3f38fa61af77b49866b006939479069cd451173
Signed-off-by: Norbert Kamiński <[email protected]>
---
kernel/trace/bpf_trace.c | 18 +++++++++++++++++-
kernel/tracepoint.c | 15 +++++++++++++--
2 files changed, 30 insertions(+), 3 deletions(-)
diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c
index 6249dac61701..75fdb8e3abaa 100644
--- a/kernel/trace/bpf_trace.c
+++ b/kernel/trace/bpf_trace.c
@@ -2391,7 +2391,23 @@ void __bpf_trace_run(struct bpf_raw_tp_link *link, u64 *args)
struct bpf_trace_run_ctx run_ctx;
cant_sleep();
- if (unlikely(this_cpu_inc_return(*(prog->active)) != 1)) {
+
+ // return if instrumentation disabled, see: bpf_disable_instrumentation
+ int instrumentation = unlikely(__this_cpu_read(bpf_prog_active));
+ if (instrumentation) {
+ printk("SKIP FOR INSTRUMENTATION: %s > %s > %p /%i ==============\n",
+ prog->aux->name,
+ link->btp->tp->name, prog, instrumentation);
+ bpf_prog_inc_misses_counter(prog);
+ return;
+ }
+
+ int active = this_cpu_inc_return(*(prog->active));
+ // printk("%s > %s > %p /%i\n", prog->aux->name, link->btp->tp->name, prog, active);
+ if (active != 1) {
+ printk("SKIP FOR ACTIVE: %s > %s > %p /%i =======================\n",
+ prog->aux->name,
+ link->btp->tp->name, prog, active);
bpf_prog_inc_misses_counter(prog);
goto out;
}
diff --git a/kernel/tracepoint.c b/kernel/tracepoint.c
index 8d1507dd0724..a0a0d8b16b41 100644
--- a/kernel/tracepoint.c
+++ b/kernel/tracepoint.c
@@ -168,12 +168,21 @@ static inline void release_probes(struct tracepoint_func *old)
static void debug_print_probes(struct tracepoint_func *funcs)
{
int i;
+ struct bpf_raw_tp_link *link;
if (!tracepoint_debug || !funcs)
return;
- for (i = 0; funcs[i].func; i++)
- printk(KERN_DEBUG "Probe %d : %p\n", i, funcs[i].func);
+ for (i = 0; funcs[i].func; i++) {
+ link = funcs[i].data;
+ int active = this_cpu_read(*(link->link.prog->active));
+ printk("Probe %d : %p / %p: %s/%d / %i\n", i,
+ funcs[i].func,
+ link,
+ link->link.prog->aux->name,
+ active,
+ funcs[i].prio);
+ }
}
static struct tracepoint_func *
@@ -298,6 +307,8 @@ static enum tp_func_state nr_func_state(const struct tracepoint_func *tp_funcs)
{
if (!tp_funcs)
return TP_FUNC_0;
+ if (!tp_funcs[0].func)
+ return TP_FUNC_0;
if (!tp_funcs[1].func)
return TP_FUNC_1;
if (!tp_funcs[2].func)
--
2.34.1
Hello,
syzbot tried to test the proposed patch but the build/boot failed:
failed to apply patch:
checking file kernel/trace/bpf_trace.c
patch: **** malformed patch at line 7: diff --git a/kernel/tracepoint.c b/kernel/tracepoint.c
Tested on:
commit: e377d803 kernel/trace: fix possible deadlock in trie_d..
git tree: https://linux.googlesource.com/linux/kernel/git/torvalds/linux
kernel config: https://syzkaller.appspot.com/x/.config?x=9d7ea7de0cb32587
dashboard link: https://syzkaller.appspot.com/bug?extid=9d95beb2a3c260622518
compiler:
patch: https://syzkaller.appspot.com/x/patch.diff?x=10fb9a16980000
Hello,
syzbot tried to test the proposed patch but the build/boot failed:
kernel/tracepoint.c:178:36: error: incomplete definition of type 'struct bpf_raw_tp_link'
kernel/tracepoint.c:182:9: error: incomplete definition of type 'struct bpf_raw_tp_link'
Tested on:
commit: c3f38fa6 Linux 6.10-rc2
git tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel config: https://syzkaller.appspot.com/x/.config?x=9d7ea7de0cb32587
dashboard link: https://syzkaller.appspot.com/bug?extid=9d95beb2a3c260622518
compiler: Debian clang version 15.0.6, GNU ld (GNU Binutils for Debian) 2.40
patch: https://syzkaller.appspot.com/x/patch.diff?x=15bfdbc2980000
Hi syzbot,
kernel test robot noticed the following build errors:
[auto build test ERROR on bpf-next/master]
[also build test ERROR on bpf/master linus/master v6.10-rc2 next-20240606]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/syzbot/possible-deadlock-in-trie_delete_elem/20240606-230435
base: https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git master
patch link: https://lore.kernel.org/r/000000000000277099061a394d13%40google.com
patch subject: possible deadlock in trie_delete_elem
config: sh-defconfig (https://download.01.org/0day-ci/archive/20240607/[email protected]/config)
compiler: sh4-linux-gcc (GCC) 13.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240607/[email protected]/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 <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
All errors (new ones prefixed by >>):
In file included from include/asm-generic/percpu.h:7,
from ./arch/sh/include/generated/asm/percpu.h:1,
from include/linux/irqflags.h:19,
from include/asm-generic/cmpxchg-local.h:6,
from arch/sh/include/asm/cmpxchg.h:74,
from arch/sh/include/asm/atomic.h:19,
from include/linux/atomic.h:7,
from include/asm-generic/bitops/lock.h:5,
from arch/sh/include/asm/bitops.h:63,
from include/linux/bitops.h:63,
from include/linux/log2.h:12,
from include/asm-generic/div64.h:55,
from ./arch/sh/include/generated/asm/div64.h:1,
from include/linux/math.h:6,
from include/linux/math64.h:6,
from include/linux/time.h:6,
from include/linux/stat.h:19,
from include/linux/module.h:13,
from kernel/tracepoint.c:5:
kernel/tracepoint.c: In function 'debug_print_probes':
>> kernel/tracepoint.c:178:50: error: invalid use of undefined type 'struct bpf_raw_tp_link'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ^~
include/linux/percpu-defs.h:318:16: note: in definition of macro '__pcpu_size_call_return'
318 | typeof(variable) pscr_ret__; \
| ^~~~~~~~
kernel/tracepoint.c:178:30: note: in expansion of macro 'this_cpu_read'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ^~~~~~~~~~~~~
>> kernel/tracepoint.c:178:50: error: invalid use of undefined type 'struct bpf_raw_tp_link'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ^~
include/linux/percpu-defs.h:219:54: note: in definition of macro '__verify_pcpu_ptr'
219 | const void __percpu *__vpp_verify = (typeof((ptr) + 0))NULL; \
| ^~~
include/linux/percpu-defs.h:489:41: note: in expansion of macro '__pcpu_size_call_return'
489 | #define this_cpu_read(pcp) __pcpu_size_call_return(this_cpu_read_, pcp)
| ^~~~~~~~~~~~~~~~~~~~~~~
kernel/tracepoint.c:178:30: note: in expansion of macro 'this_cpu_read'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ^~~~~~~~~~~~~
>> kernel/tracepoint.c:178:50: error: invalid use of undefined type 'struct bpf_raw_tp_link'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ^~
include/linux/percpu-defs.h:320:23: note: in definition of macro '__pcpu_size_call_return'
320 | switch(sizeof(variable)) { \
| ^~~~~~~~
kernel/tracepoint.c:178:30: note: in expansion of macro 'this_cpu_read'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ^~~~~~~~~~~~~
>> kernel/tracepoint.c:178:50: error: invalid use of undefined type 'struct bpf_raw_tp_link'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ^~
include/asm-generic/percpu.h:144:16: note: in definition of macro 'this_cpu_generic_read'
144 | typeof(pcp) __ret; \
| ^~~
include/linux/percpu-defs.h:321:30: note: in expansion of macro 'this_cpu_read_1'
321 | case 1: pscr_ret__ = stem##1(variable); break; \
| ^~~~
include/linux/percpu-defs.h:489:41: note: in expansion of macro '__pcpu_size_call_return'
489 | #define this_cpu_read(pcp) __pcpu_size_call_return(this_cpu_read_, pcp)
| ^~~~~~~~~~~~~~~~~~~~~~~
kernel/tracepoint.c:178:30: note: in expansion of macro 'this_cpu_read'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ^~~~~~~~~~~~~
In file included from <command-line>:
>> kernel/tracepoint.c:178:50: error: invalid use of undefined type 'struct bpf_raw_tp_link'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ^~
include/linux/compiler_types.h:454:17: note: in definition of macro '__native_word'
454 | (sizeof(t) == sizeof(char) || sizeof(t) == sizeof(short) || \
| ^
include/asm-generic/percpu.h:375:41: note: in expansion of macro 'this_cpu_generic_read'
375 | #define this_cpu_read_1(pcp) this_cpu_generic_read(pcp)
| ^~~~~~~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:321:30: note: in expansion of macro 'this_cpu_read_1'
321 | case 1: pscr_ret__ = stem##1(variable); break; \
| ^~~~
include/linux/percpu-defs.h:489:41: note: in expansion of macro '__pcpu_size_call_return'
489 | #define this_cpu_read(pcp) __pcpu_size_call_return(this_cpu_read_, pcp)
| ^~~~~~~~~~~~~~~~~~~~~~~
kernel/tracepoint.c:178:30: note: in expansion of macro 'this_cpu_read'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ^~~~~~~~~~~~~
>> kernel/tracepoint.c:178:50: error: invalid use of undefined type 'struct bpf_raw_tp_link'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ^~
include/linux/compiler_types.h:454:46: note: in definition of macro '__native_word'
454 | (sizeof(t) == sizeof(char) || sizeof(t) == sizeof(short) || \
| ^
include/asm-generic/percpu.h:375:41: note: in expansion of macro 'this_cpu_generic_read'
375 | #define this_cpu_read_1(pcp) this_cpu_generic_read(pcp)
| ^~~~~~~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:321:30: note: in expansion of macro 'this_cpu_read_1'
321 | case 1: pscr_ret__ = stem##1(variable); break; \
| ^~~~
include/linux/percpu-defs.h:489:41: note: in expansion of macro '__pcpu_size_call_return'
489 | #define this_cpu_read(pcp) __pcpu_size_call_return(this_cpu_read_, pcp)
| ^~~~~~~~~~~~~~~~~~~~~~~
kernel/tracepoint.c:178:30: note: in expansion of macro 'this_cpu_read'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ^~~~~~~~~~~~~
>> kernel/tracepoint.c:178:50: error: invalid use of undefined type 'struct bpf_raw_tp_link'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ^~
include/linux/compiler_types.h:455:17: note: in definition of macro '__native_word'
455 | sizeof(t) == sizeof(int) || sizeof(t) == sizeof(long))
| ^
include/asm-generic/percpu.h:375:41: note: in expansion of macro 'this_cpu_generic_read'
375 | #define this_cpu_read_1(pcp) this_cpu_generic_read(pcp)
| ^~~~~~~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:321:30: note: in expansion of macro 'this_cpu_read_1'
321 | case 1: pscr_ret__ = stem##1(variable); break; \
| ^~~~
include/linux/percpu-defs.h:489:41: note: in expansion of macro '__pcpu_size_call_return'
489 | #define this_cpu_read(pcp) __pcpu_size_call_return(this_cpu_read_, pcp)
| ^~~~~~~~~~~~~~~~~~~~~~~
kernel/tracepoint.c:178:30: note: in expansion of macro 'this_cpu_read'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ^~~~~~~~~~~~~
>> kernel/tracepoint.c:178:50: error: invalid use of undefined type 'struct bpf_raw_tp_link'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ^~
include/linux/compiler_types.h:455:45: note: in definition of macro '__native_word'
455 | sizeof(t) == sizeof(int) || sizeof(t) == sizeof(long))
| ^
include/asm-generic/percpu.h:375:41: note: in expansion of macro 'this_cpu_generic_read'
375 | #define this_cpu_read_1(pcp) this_cpu_generic_read(pcp)
| ^~~~~~~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:321:30: note: in expansion of macro 'this_cpu_read_1'
321 | case 1: pscr_ret__ = stem##1(variable); break; \
| ^~~~
include/linux/percpu-defs.h:489:41: note: in expansion of macro '__pcpu_size_call_return'
489 | #define this_cpu_read(pcp) __pcpu_size_call_return(this_cpu_read_, pcp)
| ^~~~~~~~~~~~~~~~~~~~~~~
kernel/tracepoint.c:178:30: note: in expansion of macro 'this_cpu_read'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ^~~~~~~~~~~~~
>> kernel/tracepoint.c:178:50: error: invalid use of undefined type 'struct bpf_raw_tp_link'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ^~
include/asm-generic/percpu.h:125:16: note: in definition of macro '__this_cpu_generic_read_nopreempt'
125 | typeof(pcp) ___ret; \
| ^~~
include/asm-generic/percpu.h:375:41: note: in expansion of macro 'this_cpu_generic_read'
375 | #define this_cpu_read_1(pcp) this_cpu_generic_read(pcp)
| ^~~~~~~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:321:30: note: in expansion of macro 'this_cpu_read_1'
321 | case 1: pscr_ret__ = stem##1(variable); break; \
| ^~~~
include/linux/percpu-defs.h:489:41: note: in expansion of macro '__pcpu_size_call_return'
489 | #define this_cpu_read(pcp) __pcpu_size_call_return(this_cpu_read_, pcp)
| ^~~~~~~~~~~~~~~~~~~~~~~
kernel/tracepoint.c:178:30: note: in expansion of macro 'this_cpu_read'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ^~~~~~~~~~~~~
>> kernel/tracepoint.c:178:50: error: invalid use of undefined type 'struct bpf_raw_tp_link'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ^~
include/linux/compiler_types.h:467:23: note: in definition of macro '__compiletime_assert'
467 | if (!(condition)) \
| ^~~~~~~~~
include/linux/compiler_types.h:487:9: note: in expansion of macro '_compiletime_assert'
487 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
| ^~~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:9: note: in expansion of macro 'compiletime_assert'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:28: note: in expansion of macro '__native_word'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~
include/asm-generic/rwonce.h:49:9: note: in expansion of macro 'compiletime_assert_rwonce_type'
49 | compiletime_assert_rwonce_type(x); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/asm-generic/percpu.h:127:18: note: in expansion of macro 'READ_ONCE'
127 | ___ret = READ_ONCE(*raw_cpu_ptr(&(pcp))); \
| ^~~~~~~~~
include/linux/percpu-defs.h:241:9: note: in expansion of macro '__verify_pcpu_ptr'
241 | __verify_pcpu_ptr(ptr); \
| ^~~~~~~~~~~~~~~~~
include/asm-generic/percpu.h:127:29: note: in expansion of macro 'raw_cpu_ptr'
127 | ___ret = READ_ONCE(*raw_cpu_ptr(&(pcp))); \
| ^~~~~~~~~~~
include/asm-generic/percpu.h:146:25: note: in expansion of macro '__this_cpu_generic_read_nopreempt'
146 | __ret = __this_cpu_generic_read_nopreempt(pcp); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/asm-generic/percpu.h:375:41: note: in expansion of macro 'this_cpu_generic_read'
375 | #define this_cpu_read_1(pcp) this_cpu_generic_read(pcp)
| ^~~~~~~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:321:30: note: in expansion of macro 'this_cpu_read_1'
321 | case 1: pscr_ret__ = stem##1(variable); break; \
| ^~~~
include/linux/percpu-defs.h:489:41: note: in expansion of macro '__pcpu_size_call_return'
489 | #define this_cpu_read(pcp) __pcpu_size_call_return(this_cpu_read_, pcp)
| ^~~~~~~~~~~~~~~~~~~~~~~
kernel/tracepoint.c:178:30: note: in expansion of macro 'this_cpu_read'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ^~~~~~~~~~~~~
>> kernel/tracepoint.c:178:50: error: invalid use of undefined type 'struct bpf_raw_tp_link'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ^~
include/linux/compiler_types.h:467:23: note: in definition of macro '__compiletime_assert'
467 | if (!(condition)) \
| ^~~~~~~~~
include/linux/compiler_types.h:487:9: note: in expansion of macro '_compiletime_assert'
487 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
| ^~~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:9: note: in expansion of macro 'compiletime_assert'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:28: note: in expansion of macro '__native_word'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~
include/asm-generic/rwonce.h:49:9: note: in expansion of macro 'compiletime_assert_rwonce_type'
49 | compiletime_assert_rwonce_type(x); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/asm-generic/percpu.h:127:18: note: in expansion of macro 'READ_ONCE'
127 | ___ret = READ_ONCE(*raw_cpu_ptr(&(pcp))); \
| ^~~~~~~~~
include/linux/percpu-defs.h:231:9: note: in expansion of macro 'RELOC_HIDE'
231 | RELOC_HIDE((typeof(*(__p)) __kernel __force *)(__p), (__offset))
| ^~~~~~~~~~
include/asm-generic/percpu.h:44:31: note: in expansion of macro 'SHIFT_PERCPU_PTR'
44 | #define arch_raw_cpu_ptr(ptr) SHIFT_PERCPU_PTR(ptr, __my_cpu_offset)
| ^~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:242:9: note: in expansion of macro 'arch_raw_cpu_ptr'
242 | arch_raw_cpu_ptr(ptr); \
| ^~~~~~~~~~~~~~~~
include/asm-generic/percpu.h:127:29: note: in expansion of macro 'raw_cpu_ptr'
127 | ___ret = READ_ONCE(*raw_cpu_ptr(&(pcp))); \
| ^~~~~~~~~~~
include/asm-generic/percpu.h:146:25: note: in expansion of macro '__this_cpu_generic_read_nopreempt'
146 | __ret = __this_cpu_generic_read_nopreempt(pcp); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/asm-generic/percpu.h:375:41: note: in expansion of macro 'this_cpu_generic_read'
375 | #define this_cpu_read_1(pcp) this_cpu_generic_read(pcp)
| ^~~~~~~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:321:30: note: in expansion of macro 'this_cpu_read_1'
321 | case 1: pscr_ret__ = stem##1(variable); break; \
| ^~~~
include/linux/percpu-defs.h:489:41: note: in expansion of macro '__pcpu_size_call_return'
489 | #define this_cpu_read(pcp) __pcpu_size_call_return(this_cpu_read_, pcp)
| ^~~~~~~~~~~~~~~~~~~~~~~
kernel/tracepoint.c:178:30: note: in expansion of macro 'this_cpu_read'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ^~~~~~~~~~~~~
>> kernel/tracepoint.c:178:50: error: invalid use of undefined type 'struct bpf_raw_tp_link'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ^~
include/linux/compiler_types.h:467:23: note: in definition of macro '__compiletime_assert'
467 | if (!(condition)) \
| ^~~~~~~~~
include/linux/compiler_types.h:487:9: note: in expansion of macro '_compiletime_assert'
487 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
| ^~~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:9: note: in expansion of macro 'compiletime_assert'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:28: note: in expansion of macro '__native_word'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~
include/asm-generic/rwonce.h:49:9: note: in expansion of macro 'compiletime_assert_rwonce_type'
49 | compiletime_assert_rwonce_type(x); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/asm-generic/percpu.h:127:18: note: in expansion of macro 'READ_ONCE'
127 | ___ret = READ_ONCE(*raw_cpu_ptr(&(pcp))); \
| ^~~~~~~~~
include/linux/percpu-defs.h:231:9: note: in expansion of macro 'RELOC_HIDE'
231 | RELOC_HIDE((typeof(*(__p)) __kernel __force *)(__p), (__offset))
| ^~~~~~~~~~
include/asm-generic/percpu.h:44:31: note: in expansion of macro 'SHIFT_PERCPU_PTR'
44 | #define arch_raw_cpu_ptr(ptr) SHIFT_PERCPU_PTR(ptr, __my_cpu_offset)
| ^~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:242:9: note: in expansion of macro 'arch_raw_cpu_ptr'
242 | arch_raw_cpu_ptr(ptr); \
| ^~~~~~~~~~~~~~~~
include/asm-generic/percpu.h:127:29: note: in expansion of macro 'raw_cpu_ptr'
127 | ___ret = READ_ONCE(*raw_cpu_ptr(&(pcp))); \
| ^~~~~~~~~~~
include/asm-generic/percpu.h:146:25: note: in expansion of macro '__this_cpu_generic_read_nopreempt'
146 | __ret = __this_cpu_generic_read_nopreempt(pcp); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/asm-generic/percpu.h:375:41: note: in expansion of macro 'this_cpu_generic_read'
375 | #define this_cpu_read_1(pcp) this_cpu_generic_read(pcp)
| ^~~~~~~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:321:30: note: in expansion of macro 'this_cpu_read_1'
321 | case 1: pscr_ret__ = stem##1(variable); break; \
| ^~~~
include/linux/percpu-defs.h:489:41: note: in expansion of macro '__pcpu_size_call_return'
489 | #define this_cpu_read(pcp) __pcpu_size_call_return(this_cpu_read_, pcp)
| ^~~~~~~~~~~~~~~~~~~~~~~
kernel/tracepoint.c:178:30: note: in expansion of macro 'this_cpu_read'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ^~~~~~~~~~~~~
>> kernel/tracepoint.c:178:50: error: invalid use of undefined type 'struct bpf_raw_tp_link'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ^~
include/linux/compiler_types.h:467:23: note: in definition of macro '__compiletime_assert'
467 | if (!(condition)) \
| ^~~~~~~~~
include/linux/compiler_types.h:487:9: note: in expansion of macro '_compiletime_assert'
487 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
| ^~~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:9: note: in expansion of macro 'compiletime_assert'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:28: note: in expansion of macro '__native_word'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~
include/asm-generic/rwonce.h:49:9: note: in expansion of macro 'compiletime_assert_rwonce_type'
49 | compiletime_assert_rwonce_type(x); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/asm-generic/percpu.h:127:18: note: in expansion of macro 'READ_ONCE'
127 | ___ret = READ_ONCE(*raw_cpu_ptr(&(pcp))); \
| ^~~~~~~~~
include/linux/percpu-defs.h:231:9: note: in expansion of macro 'RELOC_HIDE'
231 | RELOC_HIDE((typeof(*(__p)) __kernel __force *)(__p), (__offset))
| ^~~~~~~~~~
include/asm-generic/percpu.h:44:31: note: in expansion of macro 'SHIFT_PERCPU_PTR'
44 | #define arch_raw_cpu_ptr(ptr) SHIFT_PERCPU_PTR(ptr, __my_cpu_offset)
| ^~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:242:9: note: in expansion of macro 'arch_raw_cpu_ptr'
242 | arch_raw_cpu_ptr(ptr); \
| ^~~~~~~~~~~~~~~~
include/asm-generic/percpu.h:127:29: note: in expansion of macro 'raw_cpu_ptr'
127 | ___ret = READ_ONCE(*raw_cpu_ptr(&(pcp))); \
| ^~~~~~~~~~~
include/asm-generic/percpu.h:146:25: note: in expansion of macro '__this_cpu_generic_read_nopreempt'
146 | __ret = __this_cpu_generic_read_nopreempt(pcp); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/asm-generic/percpu.h:375:41: note: in expansion of macro 'this_cpu_generic_read'
375 | #define this_cpu_read_1(pcp) this_cpu_generic_read(pcp)
| ^~~~~~~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:321:30: note: in expansion of macro 'this_cpu_read_1'
321 | case 1: pscr_ret__ = stem##1(variable); break; \
| ^~~~
include/linux/percpu-defs.h:489:41: note: in expansion of macro '__pcpu_size_call_return'
489 | #define this_cpu_read(pcp) __pcpu_size_call_return(this_cpu_read_, pcp)
| ^~~~~~~~~~~~~~~~~~~~~~~
kernel/tracepoint.c:178:30: note: in expansion of macro 'this_cpu_read'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ^~~~~~~~~~~~~
>> kernel/tracepoint.c:178:50: error: invalid use of undefined type 'struct bpf_raw_tp_link'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ^~
include/linux/compiler_types.h:467:23: note: in definition of macro '__compiletime_assert'
467 | if (!(condition)) \
| ^~~~~~~~~
include/linux/compiler_types.h:487:9: note: in expansion of macro '_compiletime_assert'
487 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
| ^~~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:9: note: in expansion of macro 'compiletime_assert'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:28: note: in expansion of macro '__native_word'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~
include/asm-generic/rwonce.h:49:9: note: in expansion of macro 'compiletime_assert_rwonce_type'
49 | compiletime_assert_rwonce_type(x); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/asm-generic/percpu.h:127:18: note: in expansion of macro 'READ_ONCE'
127 | ___ret = READ_ONCE(*raw_cpu_ptr(&(pcp))); \
| ^~~~~~~~~
include/linux/percpu-defs.h:231:9: note: in expansion of macro 'RELOC_HIDE'
231 | RELOC_HIDE((typeof(*(__p)) __kernel __force *)(__p), (__offset))
| ^~~~~~~~~~
include/asm-generic/percpu.h:44:31: note: in expansion of macro 'SHIFT_PERCPU_PTR'
44 | #define arch_raw_cpu_ptr(ptr) SHIFT_PERCPU_PTR(ptr, __my_cpu_offset)
| ^~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:242:9: note: in expansion of macro 'arch_raw_cpu_ptr'
242 | arch_raw_cpu_ptr(ptr); \
| ^~~~~~~~~~~~~~~~
include/asm-generic/percpu.h:127:29: note: in expansion of macro 'raw_cpu_ptr'
127 | ___ret = READ_ONCE(*raw_cpu_ptr(&(pcp))); \
| ^~~~~~~~~~~
include/asm-generic/percpu.h:146:25: note: in expansion of macro '__this_cpu_generic_read_nopreempt'
146 | __ret = __this_cpu_generic_read_nopreempt(pcp); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/asm-generic/percpu.h:375:41: note: in expansion of macro 'this_cpu_generic_read'
375 | #define this_cpu_read_1(pcp) this_cpu_generic_read(pcp)
| ^~~~~~~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:321:30: note: in expansion of macro 'this_cpu_read_1'
321 | case 1: pscr_ret__ = stem##1(variable); break; \
| ^~~~
include/linux/percpu-defs.h:489:41: note: in expansion of macro '__pcpu_size_call_return'
489 | #define this_cpu_read(pcp) __pcpu_size_call_return(this_cpu_read_, pcp)
| ^~~~~~~~~~~~~~~~~~~~~~~
kernel/tracepoint.c:178:30: note: in expansion of macro 'this_cpu_read'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ^~~~~~~~~~~~~
>> kernel/tracepoint.c:178:50: error: invalid use of undefined type 'struct bpf_raw_tp_link'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ^~
include/linux/compiler_types.h:467:23: note: in definition of macro '__compiletime_assert'
467 | if (!(condition)) \
| ^~~~~~~~~
include/linux/compiler_types.h:487:9: note: in expansion of macro '_compiletime_assert'
487 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
| ^~~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:9: note: in expansion of macro 'compiletime_assert'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:28: note: in expansion of macro '__native_word'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~
include/asm-generic/rwonce.h:49:9: note: in expansion of macro 'compiletime_assert_rwonce_type'
49 | compiletime_assert_rwonce_type(x); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/asm-generic/percpu.h:127:18: note: in expansion of macro 'READ_ONCE'
127 | ___ret = READ_ONCE(*raw_cpu_ptr(&(pcp))); \
| ^~~~~~~~~
include/linux/percpu-defs.h:241:9: note: in expansion of macro '__verify_pcpu_ptr'
241 | __verify_pcpu_ptr(ptr); \
| ^~~~~~~~~~~~~~~~~
include/asm-generic/percpu.h:127:29: note: in expansion of macro 'raw_cpu_ptr'
127 | ___ret = READ_ONCE(*raw_cpu_ptr(&(pcp))); \
| ^~~~~~~~~~~
include/asm-generic/percpu.h:146:25: note: in expansion of macro '__this_cpu_generic_read_nopreempt'
146 | __ret = __this_cpu_generic_read_nopreempt(pcp); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/asm-generic/percpu.h:375:41: note: in expansion of macro 'this_cpu_generic_read'
375 | #define this_cpu_read_1(pcp) this_cpu_generic_read(pcp)
| ^~~~~~~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:321:30: note: in expansion of macro 'this_cpu_read_1'
321 | case 1: pscr_ret__ = stem##1(variable); break; \
| ^~~~
include/linux/percpu-defs.h:489:41: note: in expansion of macro '__pcpu_size_call_return'
489 | #define this_cpu_read(pcp) __pcpu_size_call_return(this_cpu_read_, pcp)
| ^~~~~~~~~~~~~~~~~~~~~~~
kernel/tracepoint.c:178:30: note: in expansion of macro 'this_cpu_read'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ^~~~~~~~~~~~~
>> kernel/tracepoint.c:178:50: error: invalid use of undefined type 'struct bpf_raw_tp_link'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ^~
include/linux/compiler_types.h:467:23: note: in definition of macro '__compiletime_assert'
467 | if (!(condition)) \
| ^~~~~~~~~
include/linux/compiler_types.h:487:9: note: in expansion of macro '_compiletime_assert'
487 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
| ^~~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:9: note: in expansion of macro 'compiletime_assert'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:28: note: in expansion of macro '__native_word'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~
include/asm-generic/rwonce.h:49:9: note: in expansion of macro 'compiletime_assert_rwonce_type'
49 | compiletime_assert_rwonce_type(x); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/asm-generic/percpu.h:127:18: note: in expansion of macro 'READ_ONCE'
127 | ___ret = READ_ONCE(*raw_cpu_ptr(&(pcp))); \
| ^~~~~~~~~
include/linux/percpu-defs.h:231:9: note: in expansion of macro 'RELOC_HIDE'
231 | RELOC_HIDE((typeof(*(__p)) __kernel __force *)(__p), (__offset))
| ^~~~~~~~~~
include/asm-generic/percpu.h:44:31: note: in expansion of macro 'SHIFT_PERCPU_PTR'
44 | #define arch_raw_cpu_ptr(ptr) SHIFT_PERCPU_PTR(ptr, __my_cpu_offset)
| ^~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:242:9: note: in expansion of macro 'arch_raw_cpu_ptr'
242 | arch_raw_cpu_ptr(ptr); \
| ^~~~~~~~~~~~~~~~
include/asm-generic/percpu.h:127:29: note: in expansion of macro 'raw_cpu_ptr'
127 | ___ret = READ_ONCE(*raw_cpu_ptr(&(pcp))); \
| ^~~~~~~~~~~
include/asm-generic/percpu.h:146:25: note: in expansion of macro '__this_cpu_generic_read_nopreempt'
146 | __ret = __this_cpu_generic_read_nopreempt(pcp); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/asm-generic/percpu.h:375:41: note: in expansion of macro 'this_cpu_generic_read'
375 | #define this_cpu_read_1(pcp) this_cpu_generic_read(pcp)
| ^~~~~~~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:321:30: note: in expansion of macro 'this_cpu_read_1'
321 | case 1: pscr_ret__ = stem##1(variable); break; \
| ^~~~
include/linux/percpu-defs.h:489:41: note: in expansion of macro '__pcpu_size_call_return'
489 | #define this_cpu_read(pcp) __pcpu_size_call_return(this_cpu_read_, pcp)
| ^~~~~~~~~~~~~~~~~~~~~~~
kernel/tracepoint.c:178:30: note: in expansion of macro 'this_cpu_read'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ^~~~~~~~~~~~~
>> kernel/tracepoint.c:178:50: error: invalid use of undefined type 'struct bpf_raw_tp_link'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ^~
include/linux/compiler_types.h:467:23: note: in definition of macro '__compiletime_assert'
467 | if (!(condition)) \
| ^~~~~~~~~
include/linux/compiler_types.h:487:9: note: in expansion of macro '_compiletime_assert'
487 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
| ^~~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:9: note: in expansion of macro 'compiletime_assert'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:28: note: in expansion of macro '__native_word'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~
include/asm-generic/rwonce.h:49:9: note: in expansion of macro 'compiletime_assert_rwonce_type'
49 | compiletime_assert_rwonce_type(x); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/asm-generic/percpu.h:127:18: note: in expansion of macro 'READ_ONCE'
127 | ___ret = READ_ONCE(*raw_cpu_ptr(&(pcp))); \
| ^~~~~~~~~
include/linux/percpu-defs.h:231:9: note: in expansion of macro 'RELOC_HIDE'
231 | RELOC_HIDE((typeof(*(__p)) __kernel __force *)(__p), (__offset))
| ^~~~~~~~~~
include/asm-generic/percpu.h:44:31: note: in expansion of macro 'SHIFT_PERCPU_PTR'
44 | #define arch_raw_cpu_ptr(ptr) SHIFT_PERCPU_PTR(ptr, __my_cpu_offset)
| ^~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:242:9: note: in expansion of macro 'arch_raw_cpu_ptr'
242 | arch_raw_cpu_ptr(ptr); \
| ^~~~~~~~~~~~~~~~
include/asm-generic/percpu.h:127:29: note: in expansion of macro 'raw_cpu_ptr'
127 | ___ret = READ_ONCE(*raw_cpu_ptr(&(pcp))); \
| ^~~~~~~~~~~
include/asm-generic/percpu.h:146:25: note: in expansion of macro '__this_cpu_generic_read_nopreempt'
146 | __ret = __this_cpu_generic_read_nopreempt(pcp); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/asm-generic/percpu.h:375:41: note: in expansion of macro 'this_cpu_generic_read'
375 | #define this_cpu_read_1(pcp) this_cpu_generic_read(pcp)
| ^~~~~~~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:321:30: note: in expansion of macro 'this_cpu_read_1'
321 | case 1: pscr_ret__ = stem##1(variable); break; \
| ^~~~
include/linux/percpu-defs.h:489:41: note: in expansion of macro '__pcpu_size_call_return'
489 | #define this_cpu_read(pcp) __pcpu_size_call_return(this_cpu_read_, pcp)
| ^~~~~~~~~~~~~~~~~~~~~~~
kernel/tracepoint.c:178:30: note: in expansion of macro 'this_cpu_read'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ^~~~~~~~~~~~~
>> kernel/tracepoint.c:178:50: error: invalid use of undefined type 'struct bpf_raw_tp_link'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ^~
include/linux/compiler_types.h:467:23: note: in definition of macro '__compiletime_assert'
467 | if (!(condition)) \
| ^~~~~~~~~
include/linux/compiler_types.h:487:9: note: in expansion of macro '_compiletime_assert'
487 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
| ^~~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:9: note: in expansion of macro 'compiletime_assert'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:28: note: in expansion of macro '__native_word'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~
include/asm-generic/rwonce.h:49:9: note: in expansion of macro 'compiletime_assert_rwonce_type'
49 | compiletime_assert_rwonce_type(x); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/asm-generic/percpu.h:127:18: note: in expansion of macro 'READ_ONCE'
127 | ___ret = READ_ONCE(*raw_cpu_ptr(&(pcp))); \
| ^~~~~~~~~
include/linux/percpu-defs.h:231:9: note: in expansion of macro 'RELOC_HIDE'
231 | RELOC_HIDE((typeof(*(__p)) __kernel __force *)(__p), (__offset))
| ^~~~~~~~~~
include/asm-generic/percpu.h:44:31: note: in expansion of macro 'SHIFT_PERCPU_PTR'
44 | #define arch_raw_cpu_ptr(ptr) SHIFT_PERCPU_PTR(ptr, __my_cpu_offset)
| ^~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:242:9: note: in expansion of macro 'arch_raw_cpu_ptr'
242 | arch_raw_cpu_ptr(ptr); \
| ^~~~~~~~~~~~~~~~
include/asm-generic/percpu.h:127:29: note: in expansion of macro 'raw_cpu_ptr'
127 | ___ret = READ_ONCE(*raw_cpu_ptr(&(pcp))); \
| ^~~~~~~~~~~
include/asm-generic/percpu.h:146:25: note: in expansion of macro '__this_cpu_generic_read_nopreempt'
146 | __ret = __this_cpu_generic_read_nopreempt(pcp); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/asm-generic/percpu.h:375:41: note: in expansion of macro 'this_cpu_generic_read'
375 | #define this_cpu_read_1(pcp) this_cpu_generic_read(pcp)
| ^~~~~~~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:321:30: note: in expansion of macro 'this_cpu_read_1'
321 | case 1: pscr_ret__ = stem##1(variable); break; \
| ^~~~
include/linux/percpu-defs.h:489:41: note: in expansion of macro '__pcpu_size_call_return'
489 | #define this_cpu_read(pcp) __pcpu_size_call_return(this_cpu_read_, pcp)
| ^~~~~~~~~~~~~~~~~~~~~~~
kernel/tracepoint.c:178:30: note: in expansion of macro 'this_cpu_read'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ^~~~~~~~~~~~~
>> kernel/tracepoint.c:178:50: error: invalid use of undefined type 'struct bpf_raw_tp_link'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ^~
include/linux/compiler_types.h:467:23: note: in definition of macro '__compiletime_assert'
467 | if (!(condition)) \
| ^~~~~~~~~
include/linux/compiler_types.h:487:9: note: in expansion of macro '_compiletime_assert'
487 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
| ^~~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:9: note: in expansion of macro 'compiletime_assert'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:28: note: in expansion of macro '__native_word'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~
include/asm-generic/rwonce.h:49:9: note: in expansion of macro 'compiletime_assert_rwonce_type'
49 | compiletime_assert_rwonce_type(x); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/asm-generic/percpu.h:127:18: note: in expansion of macro 'READ_ONCE'
127 | ___ret = READ_ONCE(*raw_cpu_ptr(&(pcp))); \
| ^~~~~~~~~
include/linux/percpu-defs.h:231:9: note: in expansion of macro 'RELOC_HIDE'
231 | RELOC_HIDE((typeof(*(__p)) __kernel __force *)(__p), (__offset))
| ^~~~~~~~~~
include/asm-generic/percpu.h:44:31: note: in expansion of macro 'SHIFT_PERCPU_PTR'
44 | #define arch_raw_cpu_ptr(ptr) SHIFT_PERCPU_PTR(ptr, __my_cpu_offset)
| ^~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:242:9: note: in expansion of macro 'arch_raw_cpu_ptr'
242 | arch_raw_cpu_ptr(ptr); \
| ^~~~~~~~~~~~~~~~
include/asm-generic/percpu.h:127:29: note: in expansion of macro 'raw_cpu_ptr'
127 | ___ret = READ_ONCE(*raw_cpu_ptr(&(pcp))); \
| ^~~~~~~~~~~
include/asm-generic/percpu.h:146:25: note: in expansion of macro '__this_cpu_generic_read_nopreempt'
146 | __ret = __this_cpu_generic_read_nopreempt(pcp); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/asm-generic/percpu.h:375:41: note: in expansion of macro 'this_cpu_generic_read'
375 | #define this_cpu_read_1(pcp) this_cpu_generic_read(pcp)
| ^~~~~~~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:321:30: note: in expansion of macro 'this_cpu_read_1'
321 | case 1: pscr_ret__ = stem##1(variable); break; \
| ^~~~
include/linux/percpu-defs.h:489:41: note: in expansion of macro '__pcpu_size_call_return'
489 | #define this_cpu_read(pcp) __pcpu_size_call_return(this_cpu_read_, pcp)
| ^~~~~~~~~~~~~~~~~~~~~~~
kernel/tracepoint.c:178:30: note: in expansion of macro 'this_cpu_read'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ^~~~~~~~~~~~~
>> kernel/tracepoint.c:178:50: error: invalid use of undefined type 'struct bpf_raw_tp_link'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ^~
include/linux/compiler_types.h:467:23: note: in definition of macro '__compiletime_assert'
467 | if (!(condition)) \
| ^~~~~~~~~
include/linux/compiler_types.h:487:9: note: in expansion of macro '_compiletime_assert'
487 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
| ^~~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:9: note: in expansion of macro 'compiletime_assert'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:28: note: in expansion of macro '__native_word'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~
include/asm-generic/rwonce.h:49:9: note: in expansion of macro 'compiletime_assert_rwonce_type'
49 | compiletime_assert_rwonce_type(x); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/asm-generic/percpu.h:127:18: note: in expansion of macro 'READ_ONCE'
127 | ___ret = READ_ONCE(*raw_cpu_ptr(&(pcp))); \
| ^~~~~~~~~
include/linux/percpu-defs.h:241:9: note: in expansion of macro '__verify_pcpu_ptr'
241 | __verify_pcpu_ptr(ptr); \
| ^~~~~~~~~~~~~~~~~
include/asm-generic/percpu.h:127:29: note: in expansion of macro 'raw_cpu_ptr'
127 | ___ret = READ_ONCE(*raw_cpu_ptr(&(pcp))); \
| ^~~~~~~~~~~
include/asm-generic/percpu.h:146:25: note: in expansion of macro '__this_cpu_generic_read_nopreempt'
146 | __ret = __this_cpu_generic_read_nopreempt(pcp); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/asm-generic/percpu.h:375:41: note: in expansion of macro 'this_cpu_generic_read'
375 | #define this_cpu_read_1(pcp) this_cpu_generic_read(pcp)
| ^~~~~~~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:321:30: note: in expansion of macro 'this_cpu_read_1'
321 | case 1: pscr_ret__ = stem##1(variable); break; \
| ^~~~
include/linux/percpu-defs.h:489:41: note: in expansion of macro '__pcpu_size_call_return'
489 | #define this_cpu_read(pcp) __pcpu_size_call_return(this_cpu_read_, pcp)
| ^~~~~~~~~~~~~~~~~~~~~~~
kernel/tracepoint.c:178:30: note: in expansion of macro 'this_cpu_read'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ^~~~~~~~~~~~~
kernel/tracepoint.c:178:50: error: invalid use of undefined type 'struct bpf_raw_tp_link'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ^~
include/linux/compiler_types.h:467:23: note: in definition of macro '__compiletime_assert'
467 | if (!(condition)) \
| ^~~~~~~~~
include/linux/compiler_types.h:487:9: note: in expansion of macro '_compiletime_assert'
487 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
| ^~~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:9: note: in expansion of macro 'compiletime_assert'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:28: note: in expansion of macro '__native_word'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~
include/asm-generic/rwonce.h:49:9: note: in expansion of macro 'compiletime_assert_rwonce_type'
49 | compiletime_assert_rwonce_type(x); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/asm-generic/percpu.h:127:18: note: in expansion of macro 'READ_ONCE'
127 | ___ret = READ_ONCE(*raw_cpu_ptr(&(pcp))); \
| ^~~~~~~~~
include/linux/percpu-defs.h:231:9: note: in expansion of macro 'RELOC_HIDE'
231 | RELOC_HIDE((typeof(*(__p)) __kernel __force *)(__p), (__offset))
| ^~~~~~~~~~
include/asm-generic/percpu.h:44:31: note: in expansion of macro 'SHIFT_PERCPU_PTR'
44 | #define arch_raw_cpu_ptr(ptr) SHIFT_PERCPU_PTR(ptr, __my_cpu_offset)
| ^~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:242:9: note: in expansion of macro 'arch_raw_cpu_ptr'
242 | arch_raw_cpu_ptr(ptr); \
| ^~~~~~~~~~~~~~~~
include/asm-generic/percpu.h:127:29: note: in expansion of macro 'raw_cpu_ptr'
127 | ___ret = READ_ONCE(*raw_cpu_ptr(&(pcp))); \
| ^~~~~~~~~~~
include/asm-generic/percpu.h:146:25: note: in expansion of macro '__this_cpu_generic_read_nopreempt'
146 | __ret = __this_cpu_generic_read_nopreempt(pcp); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/asm-generic/percpu.h:375:41: note: in expansion of macro 'this_cpu_generic_read'
375 | #define this_cpu_read_1(pcp) this_cpu_generic_read(pcp)
| ^~~~~~~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:321:30: note: in expansion of macro 'this_cpu_read_1'
321 | case 1: pscr_ret__ = stem##1(variable); break; \
| ^~~~
include/linux/percpu-defs.h:489:41: note: in expansion of macro '__pcpu_size_call_return'
489 | #define this_cpu_read(pcp) __pcpu_size_call_return(this_cpu_read_, pcp)
| ^~~~~~~~~~~~~~~~~~~~~~~
kernel/tracepoint.c:178:30: note: in expansion of macro 'this_cpu_read'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ^~~~~~~~~~~~~
kernel/tracepoint.c:178:50: error: invalid use of undefined type 'struct bpf_raw_tp_link'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ^~
include/linux/compiler_types.h:467:23: note: in definition of macro '__compiletime_assert'
467 | if (!(condition)) \
| ^~~~~~~~~
include/linux/compiler_types.h:487:9: note: in expansion of macro '_compiletime_assert'
487 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
| ^~~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:9: note: in expansion of macro 'compiletime_assert'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
vim +178 kernel/tracepoint.c
> 5 #include <linux/module.h>
6 #include <linux/mutex.h>
7 #include <linux/types.h>
8 #include <linux/jhash.h>
9 #include <linux/list.h>
10 #include <linux/rcupdate.h>
11 #include <linux/tracepoint.h>
12 #include <linux/err.h>
13 #include <linux/slab.h>
14 #include <linux/sched/signal.h>
15 #include <linux/sched/task.h>
16 #include <linux/static_key.h>
17
18 enum tp_func_state {
19 TP_FUNC_0,
20 TP_FUNC_1,
21 TP_FUNC_2,
22 TP_FUNC_N,
23 };
24
25 extern tracepoint_ptr_t __start___tracepoints_ptrs[];
26 extern tracepoint_ptr_t __stop___tracepoints_ptrs[];
27
28 DEFINE_SRCU(tracepoint_srcu);
29 EXPORT_SYMBOL_GPL(tracepoint_srcu);
30
31 enum tp_transition_sync {
32 TP_TRANSITION_SYNC_1_0_1,
33 TP_TRANSITION_SYNC_N_2_1,
34
35 _NR_TP_TRANSITION_SYNC,
36 };
37
38 struct tp_transition_snapshot {
39 unsigned long rcu;
40 unsigned long srcu;
41 bool ongoing;
42 };
43
44 /* Protected by tracepoints_mutex */
45 static struct tp_transition_snapshot tp_transition_snapshot[_NR_TP_TRANSITION_SYNC];
46
47 static void tp_rcu_get_state(enum tp_transition_sync sync)
48 {
49 struct tp_transition_snapshot *snapshot = &tp_transition_snapshot[sync];
50
51 /* Keep the latest get_state snapshot. */
52 snapshot->rcu = get_state_synchronize_rcu();
53 snapshot->srcu = start_poll_synchronize_srcu(&tracepoint_srcu);
54 snapshot->ongoing = true;
55 }
56
57 static void tp_rcu_cond_sync(enum tp_transition_sync sync)
58 {
59 struct tp_transition_snapshot *snapshot = &tp_transition_snapshot[sync];
60
61 if (!snapshot->ongoing)
62 return;
63 cond_synchronize_rcu(snapshot->rcu);
64 if (!poll_state_synchronize_srcu(&tracepoint_srcu, snapshot->srcu))
65 synchronize_srcu(&tracepoint_srcu);
66 snapshot->ongoing = false;
67 }
68
69 /* Set to 1 to enable tracepoint debug output */
70 static const int tracepoint_debug;
71
72 #ifdef CONFIG_MODULES
73 /*
74 * Tracepoint module list mutex protects the local module list.
75 */
76 static DEFINE_MUTEX(tracepoint_module_list_mutex);
77
78 /* Local list of struct tp_module */
79 static LIST_HEAD(tracepoint_module_list);
80 #endif /* CONFIG_MODULES */
81
82 /*
83 * tracepoints_mutex protects the builtin and module tracepoints.
84 * tracepoints_mutex nests inside tracepoint_module_list_mutex.
85 */
86 static DEFINE_MUTEX(tracepoints_mutex);
87
88 static struct rcu_head *early_probes;
89 static bool ok_to_free_tracepoints;
90
91 /*
92 * Note about RCU :
93 * It is used to delay the free of multiple probes array until a quiescent
94 * state is reached.
95 */
96 struct tp_probes {
97 struct rcu_head rcu;
98 struct tracepoint_func probes[];
99 };
100
101 /* Called in removal of a func but failed to allocate a new tp_funcs */
102 static void tp_stub_func(void)
103 {
104 return;
105 }
106
107 static inline void *allocate_probes(int count)
108 {
109 struct tp_probes *p = kmalloc(struct_size(p, probes, count),
110 GFP_KERNEL);
111 return p == NULL ? NULL : p->probes;
112 }
113
114 static void srcu_free_old_probes(struct rcu_head *head)
115 {
116 kfree(container_of(head, struct tp_probes, rcu));
117 }
118
119 static void rcu_free_old_probes(struct rcu_head *head)
120 {
121 call_srcu(&tracepoint_srcu, head, srcu_free_old_probes);
122 }
123
124 static __init int release_early_probes(void)
125 {
126 struct rcu_head *tmp;
127
128 ok_to_free_tracepoints = true;
129
130 while (early_probes) {
131 tmp = early_probes;
132 early_probes = tmp->next;
133 call_rcu(tmp, rcu_free_old_probes);
134 }
135
136 return 0;
137 }
138
139 /* SRCU is initialized at core_initcall */
140 postcore_initcall(release_early_probes);
141
142 static inline void release_probes(struct tracepoint_func *old)
143 {
144 if (old) {
145 struct tp_probes *tp_probes = container_of(old,
146 struct tp_probes, probes[0]);
147
148 /*
149 * We can't free probes if SRCU is not initialized yet.
150 * Postpone the freeing till after SRCU is initialized.
151 */
152 if (unlikely(!ok_to_free_tracepoints)) {
153 tp_probes->rcu.next = early_probes;
154 early_probes = &tp_probes->rcu;
155 return;
156 }
157
158 /*
159 * Tracepoint probes are protected by both sched RCU and SRCU,
160 * by calling the SRCU callback in the sched RCU callback we
161 * cover both cases. So let us chain the SRCU and sched RCU
162 * callbacks to wait for both grace periods.
163 */
164 call_rcu(&tp_probes->rcu, rcu_free_old_probes);
165 }
166 }
167
168 static void debug_print_probes(struct tracepoint_func *funcs)
169 {
170 int i;
171 struct bpf_raw_tp_link *link;
172
173 if (!tracepoint_debug || !funcs)
174 return;
175
176 for (i = 0; funcs[i].func; i++) {
177 link = funcs[i].data;
> 178 int active = this_cpu_read(*(link->link.prog->active));
179 printk("Probe %d : %p / %p: %s/%d / %i\n", i,
180 funcs[i].func,
181 link,
182 link->link.prog->aux->name,
183 active,
184 funcs[i].prio);
185 }
186 }
187
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Hi syzbot,
kernel test robot noticed the following build errors:
[auto build test ERROR on bpf-next/master]
[also build test ERROR on bpf/master linus/master v6.10-rc2 next-20240606]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/syzbot/possible-deadlock-in-trie_delete_elem/20240606-230435
base: https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git master
patch link: https://lore.kernel.org/r/000000000000277099061a394d13%40google.com
patch subject: possible deadlock in trie_delete_elem
config: s390-defconfig (https://download.01.org/0day-ci/archive/20240607/[email protected]/config)
compiler: clang version 19.0.0git (https://github.com/llvm/llvm-project d7d2d4f53fc79b4b58e8d8d08151b577c3699d4a)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240607/[email protected]/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 <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
All errors (new ones prefixed by >>):
In file included from kernel/tracepoint.c:5:
In file included from include/linux/module.h:19:
In file included from include/linux/elf.h:6:
In file included from arch/s390/include/asm/elf.h:173:
In file included from arch/s390/include/asm/mmu_context.h:11:
In file included from arch/s390/include/asm/pgalloc.h:18:
In file included from include/linux/mm.h:2253:
include/linux/vmstat.h:500:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
500 | return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
| ~~~~~~~~~~~~~~~~~~~~~ ^
501 | item];
| ~~~~
include/linux/vmstat.h:507:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
507 | return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
| ~~~~~~~~~~~~~~~~~~~~~ ^
508 | NR_VM_NUMA_EVENT_ITEMS +
| ~~~~~~~~~~~~~~~~~~~~~~
include/linux/vmstat.h:514:36: warning: arithmetic between different enumeration types ('enum node_stat_item' and 'enum lru_list') [-Wenum-enum-conversion]
514 | return node_stat_name(NR_LRU_BASE + lru) + 3; // skip "nr_"
| ~~~~~~~~~~~ ^ ~~~
include/linux/vmstat.h:519:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
519 | return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
| ~~~~~~~~~~~~~~~~~~~~~ ^
520 | NR_VM_NUMA_EVENT_ITEMS +
| ~~~~~~~~~~~~~~~~~~~~~~
include/linux/vmstat.h:528:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
528 | return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
| ~~~~~~~~~~~~~~~~~~~~~ ^
529 | NR_VM_NUMA_EVENT_ITEMS +
| ~~~~~~~~~~~~~~~~~~~~~~
>> kernel/tracepoint.c:178:36: error: incomplete definition of type 'struct bpf_raw_tp_link'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ~~~~^
include/linux/percpu-defs.h:489:69: note: expanded from macro 'this_cpu_read'
489 | #define this_cpu_read(pcp) __pcpu_size_call_return(this_cpu_read_, pcp)
| ^~~
include/linux/percpu-defs.h:318:9: note: expanded from macro '__pcpu_size_call_return'
318 | typeof(variable) pscr_ret__; \
| ^~~~~~~~
kernel/tracepoint.c:171:9: note: forward declaration of 'struct bpf_raw_tp_link'
171 | struct bpf_raw_tp_link *link;
| ^
>> kernel/tracepoint.c:178:36: error: incomplete definition of type 'struct bpf_raw_tp_link'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ~~~~^
include/linux/percpu-defs.h:489:69: note: expanded from macro 'this_cpu_read'
489 | #define this_cpu_read(pcp) __pcpu_size_call_return(this_cpu_read_, pcp)
| ^~~
include/linux/percpu-defs.h:319:22: note: expanded from macro '__pcpu_size_call_return'
319 | __verify_pcpu_ptr(&(variable)); \
| ^~~~~~~~
include/linux/percpu-defs.h:219:47: note: expanded from macro '__verify_pcpu_ptr'
219 | const void __percpu *__vpp_verify = (typeof((ptr) + 0))NULL; \
| ^~~
kernel/tracepoint.c:171:9: note: forward declaration of 'struct bpf_raw_tp_link'
171 | struct bpf_raw_tp_link *link;
| ^
>> kernel/tracepoint.c:178:36: error: incomplete definition of type 'struct bpf_raw_tp_link'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ~~~~^
include/linux/percpu-defs.h:489:69: note: expanded from macro 'this_cpu_read'
489 | #define this_cpu_read(pcp) __pcpu_size_call_return(this_cpu_read_, pcp)
| ^~~
include/linux/percpu-defs.h:320:16: note: expanded from macro '__pcpu_size_call_return'
320 | switch(sizeof(variable)) { \
| ^~~~~~~~
kernel/tracepoint.c:171:9: note: forward declaration of 'struct bpf_raw_tp_link'
171 | struct bpf_raw_tp_link *link;
| ^
>> kernel/tracepoint.c:178:36: error: incomplete definition of type 'struct bpf_raw_tp_link'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ~~~~^
include/linux/percpu-defs.h:489:69: note: expanded from macro 'this_cpu_read'
489 | #define this_cpu_read(pcp) __pcpu_size_call_return(this_cpu_read_, pcp)
| ^~~
include/linux/percpu-defs.h:321:31: note: expanded from macro '__pcpu_size_call_return'
321 | case 1: pscr_ret__ = stem##1(variable); break; \
| ^~~~~~~~
include/asm-generic/percpu.h:375:53: note: expanded from macro 'this_cpu_read_1'
375 | #define this_cpu_read_1(pcp) this_cpu_generic_read(pcp)
| ^~~
include/asm-generic/percpu.h:144:9: note: expanded from macro 'this_cpu_generic_read'
144 | typeof(pcp) __ret; \
| ^~~
kernel/tracepoint.c:171:9: note: forward declaration of 'struct bpf_raw_tp_link'
171 | struct bpf_raw_tp_link *link;
| ^
>> kernel/tracepoint.c:178:36: error: incomplete definition of type 'struct bpf_raw_tp_link'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ~~~~^
include/linux/percpu-defs.h:489:69: note: expanded from macro 'this_cpu_read'
489 | #define this_cpu_read(pcp) __pcpu_size_call_return(this_cpu_read_, pcp)
| ^~~
include/linux/percpu-defs.h:321:31: note: expanded from macro '__pcpu_size_call_return'
321 | case 1: pscr_ret__ = stem##1(variable); break; \
| ^~~~~~~~
include/asm-generic/percpu.h:375:53: note: expanded from macro 'this_cpu_read_1'
375 | #define this_cpu_read_1(pcp) this_cpu_generic_read(pcp)
| ^~~
include/asm-generic/percpu.h:145:20: note: expanded from macro 'this_cpu_generic_read'
145 | if (__native_word(pcp)) \
| ^~~
include/linux/compiler_types.h:454:10: note: expanded from macro '__native_word'
454 | (sizeof(t) == sizeof(char) || sizeof(t) == sizeof(short) || \
| ^
kernel/tracepoint.c:171:9: note: forward declaration of 'struct bpf_raw_tp_link'
171 | struct bpf_raw_tp_link *link;
| ^
>> kernel/tracepoint.c:178:36: error: incomplete definition of type 'struct bpf_raw_tp_link'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ~~~~^
include/linux/percpu-defs.h:489:69: note: expanded from macro 'this_cpu_read'
489 | #define this_cpu_read(pcp) __pcpu_size_call_return(this_cpu_read_, pcp)
| ^~~
include/linux/percpu-defs.h:321:31: note: expanded from macro '__pcpu_size_call_return'
321 | case 1: pscr_ret__ = stem##1(variable); break; \
| ^~~~~~~~
include/asm-generic/percpu.h:375:53: note: expanded from macro 'this_cpu_read_1'
375 | #define this_cpu_read_1(pcp) this_cpu_generic_read(pcp)
| ^~~
include/asm-generic/percpu.h:145:20: note: expanded from macro 'this_cpu_generic_read'
145 | if (__native_word(pcp)) \
| ^~~
include/linux/compiler_types.h:454:39: note: expanded from macro '__native_word'
454 | (sizeof(t) == sizeof(char) || sizeof(t) == sizeof(short) || \
| ^
kernel/tracepoint.c:171:9: note: forward declaration of 'struct bpf_raw_tp_link'
171 | struct bpf_raw_tp_link *link;
| ^
>> kernel/tracepoint.c:178:36: error: incomplete definition of type 'struct bpf_raw_tp_link'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ~~~~^
include/linux/percpu-defs.h:489:69: note: expanded from macro 'this_cpu_read'
489 | #define this_cpu_read(pcp) __pcpu_size_call_return(this_cpu_read_, pcp)
| ^~~
include/linux/percpu-defs.h:321:31: note: expanded from macro '__pcpu_size_call_return'
321 | case 1: pscr_ret__ = stem##1(variable); break; \
| ^~~~~~~~
include/asm-generic/percpu.h:375:53: note: expanded from macro 'this_cpu_read_1'
375 | #define this_cpu_read_1(pcp) this_cpu_generic_read(pcp)
| ^~~
include/asm-generic/percpu.h:145:20: note: expanded from macro 'this_cpu_generic_read'
145 | if (__native_word(pcp)) \
| ^~~
include/linux/compiler_types.h:455:10: note: expanded from macro '__native_word'
455 | sizeof(t) == sizeof(int) || sizeof(t) == sizeof(long))
| ^
kernel/tracepoint.c:171:9: note: forward declaration of 'struct bpf_raw_tp_link'
171 | struct bpf_raw_tp_link *link;
| ^
>> kernel/tracepoint.c:178:36: error: incomplete definition of type 'struct bpf_raw_tp_link'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ~~~~^
include/linux/percpu-defs.h:489:69: note: expanded from macro 'this_cpu_read'
489 | #define this_cpu_read(pcp) __pcpu_size_call_return(this_cpu_read_, pcp)
| ^~~
include/linux/percpu-defs.h:321:31: note: expanded from macro '__pcpu_size_call_return'
321 | case 1: pscr_ret__ = stem##1(variable); break; \
| ^~~~~~~~
include/asm-generic/percpu.h:375:53: note: expanded from macro 'this_cpu_read_1'
375 | #define this_cpu_read_1(pcp) this_cpu_generic_read(pcp)
| ^~~
include/asm-generic/percpu.h:145:20: note: expanded from macro 'this_cpu_generic_read'
145 | if (__native_word(pcp)) \
| ^~~
include/linux/compiler_types.h:455:38: note: expanded from macro '__native_word'
455 | sizeof(t) == sizeof(int) || sizeof(t) == sizeof(long))
| ^
kernel/tracepoint.c:171:9: note: forward declaration of 'struct bpf_raw_tp_link'
171 | struct bpf_raw_tp_link *link;
| ^
>> kernel/tracepoint.c:178:36: error: incomplete definition of type 'struct bpf_raw_tp_link'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ~~~~^
include/linux/percpu-defs.h:489:69: note: expanded from macro 'this_cpu_read'
489 | #define this_cpu_read(pcp) __pcpu_size_call_return(this_cpu_read_, pcp)
| ^~~
include/linux/percpu-defs.h:321:31: note: expanded from macro '__pcpu_size_call_return'
321 | case 1: pscr_ret__ = stem##1(variable); break; \
| ^~~~~~~~
include/asm-generic/percpu.h:375:53: note: expanded from macro 'this_cpu_read_1'
375 | #define this_cpu_read_1(pcp) this_cpu_generic_read(pcp)
| ^~~
include/asm-generic/percpu.h:146:45: note: expanded from macro 'this_cpu_generic_read'
146 | __ret = __this_cpu_generic_read_nopreempt(pcp); \
| ^~~
include/asm-generic/percpu.h:125:9: note: expanded from macro '__this_cpu_generic_read_nopreempt'
125 | typeof(pcp) ___ret; \
| ^~~
kernel/tracepoint.c:171:9: note: forward declaration of 'struct bpf_raw_tp_link'
171 | struct bpf_raw_tp_link *link;
| ^
>> kernel/tracepoint.c:178:36: error: incomplete definition of type 'struct bpf_raw_tp_link'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ~~~~^
include/linux/percpu-defs.h:489:69: note: expanded from macro 'this_cpu_read'
489 | #define this_cpu_read(pcp) __pcpu_size_call_return(this_cpu_read_, pcp)
| ^~~
include/linux/percpu-defs.h:321:31: note: expanded from macro '__pcpu_size_call_return'
321 | case 1: pscr_ret__ = stem##1(variable); break; \
| ^~~~~~~~
include/asm-generic/percpu.h:375:53: note: expanded from macro 'this_cpu_read_1'
375 | #define this_cpu_read_1(pcp) this_cpu_generic_read(pcp)
| ^~~
note: (skipping 7 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)
include/linux/compiler_types.h:487:22: note: expanded from macro 'compiletime_assert'
487 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
| ^~~~~~~~~
include/linux/compiler_types.h:475:23: note: expanded from macro '_compiletime_assert'
475 | __compiletime_assert(condition, msg, prefix, suffix)
| ^~~~~~~~~
include/linux/compiler_types.h:467:9: note: expanded from macro '__compiletime_assert'
467 | if (!(condition)) \
| ^~~~~~~~~
kernel/tracepoint.c:171:9: note: forward declaration of 'struct bpf_raw_tp_link'
171 | struct bpf_raw_tp_link *link;
| ^
>> kernel/tracepoint.c:178:36: error: incomplete definition of type 'struct bpf_raw_tp_link'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ~~~~^
include/linux/percpu-defs.h:489:69: note: expanded from macro 'this_cpu_read'
489 | #define this_cpu_read(pcp) __pcpu_size_call_return(this_cpu_read_, pcp)
| ^~~
include/linux/percpu-defs.h:321:31: note: expanded from macro '__pcpu_size_call_return'
321 | case 1: pscr_ret__ = stem##1(variable); break; \
| ^~~~~~~~
include/asm-generic/percpu.h:375:53: note: expanded from macro 'this_cpu_read_1'
375 | #define this_cpu_read_1(pcp) this_cpu_generic_read(pcp)
| ^~~
note: (skipping 9 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)
include/linux/compiler_types.h:487:22: note: expanded from macro 'compiletime_assert'
487 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
| ^~~~~~~~~
include/linux/compiler_types.h:475:23: note: expanded from macro '_compiletime_assert'
475 | __compiletime_assert(condition, msg, prefix, suffix)
| ^~~~~~~~~
include/linux/compiler_types.h:467:9: note: expanded from macro '__compiletime_assert'
467 | if (!(condition)) \
| ^~~~~~~~~
kernel/tracepoint.c:171:9: note: forward declaration of 'struct bpf_raw_tp_link'
171 | struct bpf_raw_tp_link *link;
| ^
>> kernel/tracepoint.c:178:36: error: incomplete definition of type 'struct bpf_raw_tp_link'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ~~~~^
include/linux/percpu-defs.h:489:69: note: expanded from macro 'this_cpu_read'
489 | #define this_cpu_read(pcp) __pcpu_size_call_return(this_cpu_read_, pcp)
| ^~~
include/linux/percpu-defs.h:321:31: note: expanded from macro '__pcpu_size_call_return'
321 | case 1: pscr_ret__ = stem##1(variable); break; \
| ^~~~~~~~
include/asm-generic/percpu.h:375:53: note: expanded from macro 'this_cpu_read_1'
375 | #define this_cpu_read_1(pcp) this_cpu_generic_read(pcp)
| ^~~
note: (skipping 9 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)
include/linux/compiler_types.h:487:22: note: expanded from macro 'compiletime_assert'
487 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
| ^~~~~~~~~
include/linux/compiler_types.h:475:23: note: expanded from macro '_compiletime_assert'
475 | __compiletime_assert(condition, msg, prefix, suffix)
| ^~~~~~~~~
include/linux/compiler_types.h:467:9: note: expanded from macro '__compiletime_assert'
467 | if (!(condition)) \
| ^~~~~~~~~
kernel/tracepoint.c:171:9: note: forward declaration of 'struct bpf_raw_tp_link'
171 | struct bpf_raw_tp_link *link;
| ^
>> kernel/tracepoint.c:178:36: error: incomplete definition of type 'struct bpf_raw_tp_link'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ~~~~^
include/linux/percpu-defs.h:489:69: note: expanded from macro 'this_cpu_read'
489 | #define this_cpu_read(pcp) __pcpu_size_call_return(this_cpu_read_, pcp)
| ^~~
include/linux/percpu-defs.h:321:31: note: expanded from macro '__pcpu_size_call_return'
321 | case 1: pscr_ret__ = stem##1(variable); break; \
| ^~~~~~~~
include/asm-generic/percpu.h:375:53: note: expanded from macro 'this_cpu_read_1'
375 | #define this_cpu_read_1(pcp) this_cpu_generic_read(pcp)
| ^~~
note: (skipping 9 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)
include/linux/compiler_types.h:487:22: note: expanded from macro 'compiletime_assert'
487 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
| ^~~~~~~~~
include/linux/compiler_types.h:475:23: note: expanded from macro '_compiletime_assert'
475 | __compiletime_assert(condition, msg, prefix, suffix)
| ^~~~~~~~~
include/linux/compiler_types.h:467:9: note: expanded from macro '__compiletime_assert'
467 | if (!(condition)) \
| ^~~~~~~~~
kernel/tracepoint.c:171:9: note: forward declaration of 'struct bpf_raw_tp_link'
171 | struct bpf_raw_tp_link *link;
| ^
>> kernel/tracepoint.c:178:36: error: incomplete definition of type 'struct bpf_raw_tp_link'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ~~~~^
include/linux/percpu-defs.h:489:69: note: expanded from macro 'this_cpu_read'
489 | #define this_cpu_read(pcp) __pcpu_size_call_return(this_cpu_read_, pcp)
| ^~~
include/linux/percpu-defs.h:321:31: note: expanded from macro '__pcpu_size_call_return'
321 | case 1: pscr_ret__ = stem##1(variable); break; \
| ^~~~~~~~
include/asm-generic/percpu.h:375:53: note: expanded from macro 'this_cpu_read_1'
375 | #define this_cpu_read_1(pcp) this_cpu_generic_read(pcp)
| ^~~
note: (skipping 9 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)
include/linux/compiler_types.h:487:22: note: expanded from macro 'compiletime_assert'
487 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
| ^~~~~~~~~
include/linux/compiler_types.h:475:23: note: expanded from macro '_compiletime_assert'
475 | __compiletime_assert(condition, msg, prefix, suffix)
| ^~~~~~~~~
include/linux/compiler_types.h:467:9: note: expanded from macro '__compiletime_assert'
467 | if (!(condition)) \
| ^~~~~~~~~
kernel/tracepoint.c:171:9: note: forward declaration of 'struct bpf_raw_tp_link'
171 | struct bpf_raw_tp_link *link;
| ^
>> kernel/tracepoint.c:178:16: error: indirection requires pointer operand ('void' invalid)
178 | int active = this_cpu_read(*(link->link.prog->active));
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:489:29: note: expanded from macro 'this_cpu_read'
489 | #define this_cpu_read(pcp) __pcpu_size_call_return(this_cpu_read_, pcp)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:321:23: note: expanded from macro '__pcpu_size_call_return'
321 | case 1: pscr_ret__ = stem##1(variable); break; \
| ^~~~~~~~~~~~~~~~~
<scratch space>:68:1: note: expanded from here
68 | this_cpu_read_1
| ^
note: (skipping 6 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)
include/linux/compiler_types.h:487:22: note: expanded from macro 'compiletime_assert'
487 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
| ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/compiler_types.h:475:23: note: expanded from macro '_compiletime_assert'
475 | __compiletime_assert(condition, msg, prefix, suffix)
| ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/compiler_types.h:467:9: note: expanded from macro '__compiletime_assert'
467 | if (!(condition)) \
| ^~~~~~~~~
>> kernel/tracepoint.c:178:36: error: incomplete definition of type 'struct bpf_raw_tp_link'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ~~~~^
include/linux/percpu-defs.h:489:69: note: expanded from macro 'this_cpu_read'
489 | #define this_cpu_read(pcp) __pcpu_size_call_return(this_cpu_read_, pcp)
| ^~~
include/linux/percpu-defs.h:321:31: note: expanded from macro '__pcpu_size_call_return'
321 | case 1: pscr_ret__ = stem##1(variable); break; \
| ^~~~~~~~
include/asm-generic/percpu.h:375:53: note: expanded from macro 'this_cpu_read_1'
375 | #define this_cpu_read_1(pcp) this_cpu_generic_read(pcp)
| ^~~
note: (skipping 7 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)
include/linux/compiler_types.h:487:22: note: expanded from macro 'compiletime_assert'
487 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
| ^~~~~~~~~
include/linux/compiler_types.h:475:23: note: expanded from macro '_compiletime_assert'
475 | __compiletime_assert(condition, msg, prefix, suffix)
| ^~~~~~~~~
include/linux/compiler_types.h:467:9: note: expanded from macro '__compiletime_assert'
467 | if (!(condition)) \
| ^~~~~~~~~
kernel/tracepoint.c:171:9: note: forward declaration of 'struct bpf_raw_tp_link'
171 | struct bpf_raw_tp_link *link;
| ^
>> kernel/tracepoint.c:178:36: error: incomplete definition of type 'struct bpf_raw_tp_link'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ~~~~^
include/linux/percpu-defs.h:489:69: note: expanded from macro 'this_cpu_read'
489 | #define this_cpu_read(pcp) __pcpu_size_call_return(this_cpu_read_, pcp)
| ^~~
include/linux/percpu-defs.h:321:31: note: expanded from macro '__pcpu_size_call_return'
321 | case 1: pscr_ret__ = stem##1(variable); break; \
| ^~~~~~~~
include/asm-generic/percpu.h:375:53: note: expanded from macro 'this_cpu_read_1'
375 | #define this_cpu_read_1(pcp) this_cpu_generic_read(pcp)
| ^~~
note: (skipping 9 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)
include/linux/compiler_types.h:487:22: note: expanded from macro 'compiletime_assert'
487 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
| ^~~~~~~~~
include/linux/compiler_types.h:475:23: note: expanded from macro '_compiletime_assert'
475 | __compiletime_assert(condition, msg, prefix, suffix)
| ^~~~~~~~~
include/linux/compiler_types.h:467:9: note: expanded from macro '__compiletime_assert'
467 | if (!(condition)) \
| ^~~~~~~~~
kernel/tracepoint.c:171:9: note: forward declaration of 'struct bpf_raw_tp_link'
171 | struct bpf_raw_tp_link *link;
| ^
>> kernel/tracepoint.c:178:36: error: incomplete definition of type 'struct bpf_raw_tp_link'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ~~~~^
include/linux/percpu-defs.h:489:69: note: expanded from macro 'this_cpu_read'
489 | #define this_cpu_read(pcp) __pcpu_size_call_return(this_cpu_read_, pcp)
| ^~~
include/linux/percpu-defs.h:321:31: note: expanded from macro '__pcpu_size_call_return'
321 | case 1: pscr_ret__ = stem##1(variable); break; \
| ^~~~~~~~
include/asm-generic/percpu.h:375:53: note: expanded from macro 'this_cpu_read_1'
375 | #define this_cpu_read_1(pcp) this_cpu_generic_read(pcp)
| ^~~
note: (skipping 9 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)
include/linux/compiler_types.h:487:22: note: expanded from macro 'compiletime_assert'
487 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
| ^~~~~~~~~
include/linux/compiler_types.h:475:23: note: expanded from macro '_compiletime_assert'
475 | __compiletime_assert(condition, msg, prefix, suffix)
| ^~~~~~~~~
include/linux/compiler_types.h:467:9: note: expanded from macro '__compiletime_assert'
467 | if (!(condition)) \
| ^~~~~~~~~
kernel/tracepoint.c:171:9: note: forward declaration of 'struct bpf_raw_tp_link'
171 | struct bpf_raw_tp_link *link;
| ^
>> kernel/tracepoint.c:178:36: error: incomplete definition of type 'struct bpf_raw_tp_link'
178 | int active = this_cpu_read(*(link->link.prog->active));
| ~~~~^
include/linux/percpu-defs.h:489:69: note: expanded from macro 'this_cpu_read'
489 | #define this_cpu_read(pcp) __pcpu_size_call_return(this_cpu_read_, pcp)
| ^~~
include/linux/percpu-defs.h:321:31: note: expanded from macro '__pcpu_size_call_return'
321 | case 1: pscr_ret__ = stem##1(variable); break; \
| ^~~~~~~~
include/asm-generic/percpu.h:375:53: note: expanded from macro 'this_cpu_read_1'
375 | #define this_cpu_read_1(pcp) this_cpu_generic_read(pcp)
| ^~~
note: (skipping 9 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)
include/linux/compiler_types.h:487:22: note: expanded from macro 'compiletime_assert'
487 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
| ^~~~~~~~~
include/linux/compiler_types.h:475:23: note: expanded from macro '_compiletime_assert'
475 | __compiletime_assert(condition, msg, prefix, suffix)
| ^~~~~~~~~
include/linux/compiler_types.h:467:9: note: expanded from macro '__compiletime_assert'
467 | if (!(condition)) \
| ^~~~~~~~~
kernel/tracepoint.c:171:9: note: forward declaration of 'struct bpf_raw_tp_link'
171 | struct bpf_raw_tp_link *link;
| ^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
5 warnings and 20 errors generated.
vim +178 kernel/tracepoint.c
167
168 static void debug_print_probes(struct tracepoint_func *funcs)
169 {
170 int i;
171 struct bpf_raw_tp_link *link;
172
173 if (!tracepoint_debug || !funcs)
174 return;
175
176 for (i = 0; funcs[i].func; i++) {
177 link = funcs[i].data;
> 178 int active = this_cpu_read(*(link->link.prog->active));
179 printk("Probe %d : %p / %p: %s/%d / %i\n", i,
180 funcs[i].func,
181 link,
182 link->link.prog->aux->name,
183 active,
184 funcs[i].prio);
185 }
186 }
187
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
For archival purposes, forwarding an incoming command email to
[email protected], [email protected].
***
Subject: Re: [email protected]
Author: [email protected]
#syz test: https://linux.googlesource.com/linux/kernel/git/torvalds/linux 58fa9471b2c0e2ad0efdc2d36b643dc312020cba
The information in this email is confidential and may be legally privileged. It is intended solely for the addressee and access to it by anyone else is unauthorized. If you are not the intended recipient, any disclosure, copying, distribution or any action taken or omitted to be taken based on it, is strictly prohibited and may be unlawful.
Hello,
syzbot has tested the proposed patch and the reproducer did not trigger any issue:
Reported-and-tested-by: [email protected]
Tested on:
commit: 58fa9471 kernel/trace: fix possible deadlock in trie_d..
git tree: https://linux.googlesource.com/linux/kernel/git/torvalds/linux
console output: https://syzkaller.appspot.com/x/log.txt?x=10e2e6f6980000
kernel config: https://syzkaller.appspot.com/x/.config?x=eb72437243175f22
dashboard link: https://syzkaller.appspot.com/bug?extid=9d95beb2a3c260622518
compiler: Debian clang version 15.0.6, GNU ld (GNU Binutils for Debian) 2.40
Note: no patches were applied.
Note: testing is done by a robot and is best-effort only.