Re: [syzbot] [netfilter?] WARNING: ODEBUG bug in ip_set_free

Jozsef Kadlecsik
2024-02-14T08:58:19Z

Hi,

It seems this is an old bug uncovered now: the bitmap type of sets still
use del_timer_sync() to cancel the garbage collecors. However
del_timer_sync() does not prevent rearming, which is triggered by syzbot.
The proper way to solve the issue is a one-liner:

diff --git a/net/netfilter/ipset/ip_set_bitmap_gen.h b/net/netfilter/ipset/ip_set_bitmap_gen.h
index cb48a2b9cb9f..60f5e29ac8fd 100644
--- a/net/netfilter/ipset/ip_set_bitmap_gen.h
+++ b/net/netfilter/ipset/ip_set_bitmap_gen.h
@@ -294,7 +294,7 @@ mtype_cancel_gc(struct ip_set *set)
struct mtype *map = set->data;

if (SET_WITH_TIMEOUT(set))
- del_timer_sync(&map->gc);
+ timer_shutdown_sync(&map->gc);
}

static const struct ip_set_type_variant mtype = {

(There are no other set types in ipset where del_timer_sync() is used.)

I'll need time for testing then if it fixes the bug, then I'll submit the
patch.

Best regards,
Jozsef

On Tue, 13 Feb 2024, syzbot wrote:

> Hello,
>
> syzbot found the following issue on:
>
> HEAD commit: f735966ee23c Merge branches 'for-next/reorg-va-space' and ..
> git tree: git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux.git for-kernelci
> console output: https://syzkaller.appspot.com/x/log.txt?x=168b6592180000
> kernel config: https://syzkaller.appspot.com/x/.config?x=d47605a39da2cf06
> dashboard link: https://syzkaller.appspot.com/bug?extid=ebbab3e04c88fa141e6b
> compiler: Debian clang version 15.0.6, GNU ld (GNU Binutils for Debian) 2.40
> userspace arch: arm64
> syz repro: https://syzkaller.appspot.com/x/repro.syz?x=1000ede0180000
> C reproducer: https://syzkaller.appspot.com/x/repro.c?x=161a6ba2180000
>
> Downloadable assets:
> disk image: https://storage.googleapis.com/syzbot-assets/bdea2316c4db/disk-f735966e.raw.xz
> vmlinux: https://storage.googleapis.com/syzbot-assets/75ba7806a91c/vmlinux-f735966e.xz
> kernel image: https://storage.googleapis.com/syzbot-assets/208f119d45ed/Image-f735966e.gz.xz
>
> IMPORTANT: if you fix the issue, please add the following tag to the commit:
> Reported-by: syzbot+ebbab3e04c88fa141e6b@syzkaller.appspotmail.com
>
> ------------[ cut here ]------------
> ODEBUG: free active (active state 0) object: 00000000310f7442 object type: timer_list hint: bitmap_port_gc+0x0/0x4dc net/netfilter/ipset/ip_set_bitmap_port.c:282
> WARNING: CPU: 1 PID: 6165 at lib/debugobjects.c:517 debug_print_object lib/debugobjects.c:514 [inline]
> WARNING: CPU: 1 PID: 6165 at lib/debugobjects.c:517 __debug_check_no_obj_freed lib/debugobjects.c:989 [inline]
> WARNING: CPU: 1 PID: 6165 at lib/debugobjects.c:517 debug_check_no_obj_freed+0x398/0x47c lib/debugobjects.c:1019
> Modules linked in:
> CPU: 1 PID: 6165 Comm: syz-executor468 Not tainted 6.8.0-rc3-syzkaller-gf735966ee23c #0
> Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 11/17/2023
> pstate: 60400005 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
> pc : debug_print_object lib/debugobjects.c:514 [inline]
> pc : __debug_check_no_obj_freed lib/debugobjects.c:989 [inline]
> pc : debug_check_no_obj_freed+0x398/0x47c lib/debugobjects.c:1019
> lr : debug_print_object lib/debugobjects.c:514 [inline]
> lr : __debug_check_no_obj_freed lib/debugobjects.c:989 [inline]
> lr : debug_check_no_obj_freed+0x398/0x47c lib/debugobjects.c:1019
> sp : ffff800097886950
> x29: ffff800097886990 x28: 0000000000000000 x27: ffff80008aeec3c0
> x26: ffff0000d051c718 x25: dfff800000000000 x24: 0000000000000000
> x23: ffff80009365bb10 x22: ffff0000d051c000 x21: 0000000000000000
> x20: ffff8000894dfe30 x19: ffff0000d051c700 x18: ffff800097885e20
> x17: 626f203234343766 x16: ffff80008aca1180 x15: 0000000000000001
> x14: 1ffff00012f10c44 x13: 0000000000000000 x12: 0000000000000000
> x11: 0000000000000002 x10: 0000000000ff0100 x9 : f70d4eacec590700
> x8 : f70d4eacec590700 x7 : 0000000000000001 x6 : 0000000000000001
> x5 : ffff800097886238 x4 : ffff80008ed517e0 x3 : ffff80008036df60
> x2 : 0000000000000001 x1 : 0000000100000000 x0 : 0000000000000000
> Call trace:
> debug_print_object lib/debugobjects.c:514 [inline]
> __debug_check_no_obj_freed lib/debugobjects.c:989 [inline]
> debug_check_no_obj_freed+0x398/0x47c lib/debugobjects.c:1019
> slab_free_hook mm/slub.c:2093 [inline]
> slab_free mm/slub.c:4299 [inline]
> kfree+0x114/0x3cc mm/slub.c:4409
> kvfree+0x40/0x50 mm/util.c:663
> ip_set_free+0x28/0x7c net/netfilter/ipset/ip_set_core.c:264
> bitmap_port_destroy+0xe4/0x324 net/netfilter/ipset/ip_set_bitmap_gen.h:66
> ip_set_create+0x904/0xf48 net/netfilter/ipset/ip_set_core.c:1157
> nfnetlink_rcv_msg+0xa78/0xf80 net/netfilter/nfnetlink.c:302
> netlink_rcv_skb+0x214/0x3c4 net/netlink/af_netlink.c:2543
> nfnetlink_rcv+0x21c/0x1ed0 net/netfilter/nfnetlink.c:659
> netlink_unicast_kernel net/netlink/af_netlink.c:1341 [inline]
> netlink_unicast+0x65c/0x898 net/netlink/af_netlink.c:1367
> netlink_sendmsg+0x83c/0xb20 net/netlink/af_netlink.c:1908
> sock_sendmsg_nosec net/socket.c:730 [inline]
> __sock_sendmsg net/socket.c:745 [inline]
> ____sys_sendmsg+0x56c/0x840 net/socket.c:2584
> ___sys_sendmsg net/socket.c:2638 [inline]
> __sys_sendmsg+0x26c/0x33c net/socket.c:2667
> __do_sys_sendmsg net/socket.c:2676 [inline]
> __se_sys_sendmsg net/socket.c:2674 [inline]
> __arm64_sys_sendmsg+0x80/0x94 net/socket.c:2674
> __invoke_syscall arch/arm64/kernel/syscall.c:37 [inline]
> invoke_syscall+0x98/0x2b8 arch/arm64/kernel/syscall.c:51
> el0_svc_common+0x130/0x23c arch/arm64/kernel/syscall.c:136
> do_el0_svc+0x48/0x58 arch/arm64/kernel/syscall.c:155
> el0_svc+0x54/0x158 arch/arm64/kernel/entry-common.c:678
> el0t_64_sync_handler+0x84/0xfc arch/arm64/kernel/entry-common.c:696
> el0t_64_sync+0x190/0x194 arch/arm64/kernel/entry.S:598
> irq event stamp: 524
> hardirqs last enabled at (523): [<ffff80008035f104>] __up_console_sem kernel/printk/printk.c:341 [inline]
> hardirqs last enabled at (523): [<ffff80008035f104>] __console_unlock kernel/printk/printk.c:2706 [inline]
> hardirqs last enabled at (523): [<ffff80008035f104>] console_unlock+0x17c/0x3d4 kernel/printk/printk.c:3038
> hardirqs last disabled at (524): [<ffff80008ad60eac>] el1_dbg+0x24/0x80 arch/arm64/kernel/entry-common.c:436
> softirqs last enabled at (518): [<ffff80008002189c>] softirq_handle_end kernel/softirq.c:399 [inline]
> softirqs last enabled at (518): [<ffff80008002189c>] __do_softirq+0xac8/0xce4 kernel/softirq.c:582
> softirqs last disabled at (507): [<ffff80008002ab48>] ____do_softirq+0x14/0x20 arch/arm64/kernel/irq.c:81
> ---[ end trace 0000000000000000 ]---
>
>
> ---
> This report is generated by a bot. It may contain errors.
> See https://goo.gl/tpsmEJ for more information about syzbot.
> syzbot engineers can be reached at syzkaller@googlegroups.com.
>
> syzbot will keep track of this issue. See:
> https://goo.gl/tpsmEJ#status for how to communicate with syzbot.
>
> If the report is already addressed, let syzbot know by replying with:
> #syz fix: exact-commit-title
>
> If you want syzbot to run the reproducer, reply with:
> #syz test: git://repo/address.git branch-or-commit-hash
> If you attach or paste a git patch, syzbot will apply it before testing.
>
> If you want to overwrite report's subsystems, reply with:
> #syz set subsystems: new-subsystem
> (See the list of subsystem names on the web dashboard)
>
> If the report is a duplicate of another one, reply with:
> #syz dup: exact-subject-of-another-report
>
> If you want to undo deduplication, reply with:
> #syz undup
>
>

--
E-mail : kadlec@blackhole.kfki.hu, kadlecsik.jozsef@wigner.hu
PGP key : https://wigner.hu/~kadlec/pgp_public_key.txt
Address : Wigner Research Centre for Physics
H-1525 Budapest 114, POB. 49, Hungary