Re: WARNING in format_decode (2)

From: Alexei Starovoitov
Date: Tue Aug 28 2018 - 00:06:04 EST


On Mon, Aug 27, 2018 at 01:46:26PM -0400, Steven Rostedt wrote:
> On Mon, 27 Aug 2018 10:10:04 -0700
> syzbot <syzbot+1ec5c5ec949c4adaa0c4@xxxxxxxxxxxxxxxxxxxxxxxxx> wrote:
>
> > Hello,
> >
> > syzbot found the following crash on:
> >
> > HEAD commit: 2ad0d5269970 Merge git://git.kernel.org/pub/scm/linux/kern..
> > git tree: net-next
> > console output: https://syzkaller.appspot.com/x/log.txt?x=15b8efba400000
> > kernel config: https://syzkaller.appspot.com/x/.config?x=79e695838ce7a210
> > dashboard link: https://syzkaller.appspot.com/bug?extid=1ec5c5ec949c4adaa0c4
> > compiler: gcc (GCC) 8.0.1 20180413 (experimental)
> > syz repro: https://syzkaller.appspot.com/x/repro.syz?x=1626f761400000
> >
> > IMPORTANT: if you fix the bug, please add the following tag to the commit:
> > Reported-by: syzbot+1ec5c5ec949c4adaa0c4@xxxxxxxxxxxxxxxxxxxxxxxxx
> >
> > ** **
> > ** NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE **
> > **********************************************************
> > ------------[ cut here ]------------
> > Please remove unsupported %WARNING: CPU: 0 PID: 6453 at lib/vsprintf.c:2149 format_decode+0x8fc/0xaf0
> > lib/vsprintf.c:2149
> > Kernel panic - not syncing: panic_on_warn set ...
> >
> > CPU: 0 PID: 6453 Comm: syz-executor7 Not tainted 4.18.0+ #190
> > Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS
> > Google 01/01/2011
> > Call Trace:
> > __dump_stack lib/dump_stack.c:77 [inline]
> > dump_stack+0x1c9/0x2b4 lib/dump_stack.c:113
> > panic+0x238/0x4e7 kernel/panic.c:184
> > __warn.cold.8+0x163/0x1ba kernel/panic.c:536
> > report_bug+0x252/0x2d0 lib/bug.c:186
> > fixup_bug arch/x86/kernel/traps.c:178 [inline]
> > do_error_trap+0x1fc/0x4d0 arch/x86/kernel/traps.c:296
> > do_invalid_op+0x1b/0x20 arch/x86/kernel/traps.c:316
> > invalid_op+0x14/0x20 arch/x86/entry/entry_64.S:993
> > RIP: 0010:format_decode+0x8fc/0xaf0 lib/vsprintf.c:2149
> > Code: e8 59 59 c9 fa 41 c6 04 24 12 e9 94 fd ff ff e8 4a 59 c9 fa 0f be f3
> > 48 c7 c7 60 bc 89 87 c6 05 28 aa d2 01 01 e8 e4 e9 93 fa <0f> 0b 4d 8b 7d
> > c0 e9 56 fe ff ff 48 8b bd 68 ff ff ff e8 cd 4f 08
> > RSP: 0018:ffff8801b6b27688 EFLAGS: 00010282
> > RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000000
> > RDX: 0000000000000000 RSI: ffffffff816422b1 RDI: ffff8801b6b27378
> > RBP: ffff8801b6b27730 R08: ffff8801b69a0040 R09: 0000000000000006
> > R10: 0000000000000000 R11: 0000000000000000 R12: ffff8801b6b277a8
> > R13: ffff8801b6b27708 R14: 0000000000000000 R15: ffff8801b6b27b04
> > vsnprintf+0x185/0x1b60 lib/vsprintf.c:2245
> > vscnprintf+0x2d/0x80 lib/vsprintf.c:2396
> > __trace_array_vprintk.part.60+0xc7/0x330 kernel/trace/trace.c:2990
> > __trace_array_vprintk kernel/trace/trace.c:3021 [inline]
> > trace_array_vprintk kernel/trace/trace.c:3021 [inline]
> > trace_vprintk+0x5f/0x90 kernel/trace/trace.c:3059
> > __trace_printk+0xce/0x120 kernel/trace/trace_printk.c:237
> > ____bpf_trace_printk kernel/trace/bpf_trace.c:274 [inline]
>
> Looks like a bug in the bpf trace printk code.

yes. looks like %p% slipped past bpf_trace_printk() runtime checks.