From: Dmitry Vyukov <email@example.com> To: Kees Cook <firstname.lastname@example.org> Cc: Andrew Morton <email@example.com>, Andrey Ryabinin <firstname.lastname@example.org>, Elena Petrova <email@example.com>, Alexander Potapenko <firstname.lastname@example.org>, Linus Torvalds <email@example.com>, Dan Carpenter <firstname.lastname@example.org>, "Gustavo A. R. Silva" <email@example.com>, Arnd Bergmann <firstname.lastname@example.org>, Ard Biesheuvel <email@example.com>, kasan-dev <firstname.lastname@example.org>, LKML <email@example.com>, firstname.lastname@example.org, syzkaller <email@example.com> Subject: Re: [PATCH v2 0/3] ubsan: Split out bounds checker Date: Thu, 28 Nov 2019 11:38:50 +0100 Message-ID: <CACT4Y+a-0ZqGj0hQhOW=aUcjeQpf_487ASnnzdm_M2N7+z17Lg@mail.gmail.com> (raw) In-Reply-To: <201911270952.D66CD15AEC@keescook> On Wed, Nov 27, 2019 at 6:59 PM Kees Cook <firstname.lastname@example.org> wrote: > > > > > > v2: > > > > > > - clarify Kconfig help text (aryabinin) > > > > > > - add reviewed-by > > > > > > - aim series at akpm, which seems to be where ubsan goes through? > > > > > > v1: https://email@example.com > > > > > > > > > > > > This splits out the bounds checker so it can be individually used. This > > > > > > is expected to be enabled in Android and hopefully for syzbot. Includes > > > > > > LKDTM tests for behavioral corner-cases (beyond just the bounds checker). > > > > > > > > > > > > -Kees > > > > > > > > > > +syzkaller mailing list > > > > > > > > > > This is great! > > > > > > > > BTW, can I consider this your Acked-by for these patches? :) > > > > > > > > > I wanted to enable UBSAN on syzbot for a long time. And it's > > > > > _probably_ not lots of work. But it was stuck on somebody actually > > > > > dedicating some time specifically for it. > > > > > > > > Do you have a general mechanism to test that syzkaller will actually > > > > pick up the kernel log splat of a new check? > > > > > > Yes. That's one of the most important and critical parts of syzkaller :) > > > The tests for different types of bugs are here: > > > https://github.com/google/syzkaller/tree/master/pkg/report/testdata/linux/report > > > > > > But have 3 for UBSAN, but they may be old and it would be useful to > > > have 1 example crash per bug type: > > > > > > syzkaller$ grep UBSAN pkg/report/testdata/linux/report/* > > > pkg/report/testdata/linux/report/40:TITLE: UBSAN: Undefined behaviour > > > in drivers/usb/core/devio.c:LINE > > > pkg/report/testdata/linux/report/40:[ 4.556972] UBSAN: Undefined > > > behaviour in drivers/usb/core/devio.c:1517:25 > > > pkg/report/testdata/linux/report/41:TITLE: UBSAN: Undefined behaviour > > > in ./arch/x86/include/asm/atomic.h:LINE > > > pkg/report/testdata/linux/report/41:[ 3.805453] UBSAN: Undefined > > > behaviour in ./arch/x86/include/asm/atomic.h:156:2 > > > pkg/report/testdata/linux/report/42:TITLE: UBSAN: Undefined behaviour > > > in kernel/time/hrtimer.c:LINE > > > pkg/report/testdata/linux/report/42:[ 50.583499] UBSAN: Undefined > > > behaviour in kernel/time/hrtimer.c:310:16 > > > > > > One of them is incomplete and is parsed as "corrupted kernel output" > > > (won't be reported): > > > https://github.com/google/syzkaller/blob/master/pkg/report/testdata/linux/report/42 > > > > > > Also I see that report parsing just takes the first line, which > > > includes file name, which is suboptimal (too long, can't report 2 bugs > > > in the same file). We seem to converge on "bug-type in function-name" > > > format. > > > The thing about bug titles is that it's harder to change them later. > > > If syzbot already reported 100 bugs and we change titles, it will > > > start re-reporting the old one after new names and the old ones will > > > look stale, yet they still relevant, just detected under different > > > name. > > > So we also need to get this part right before enabling. > > It Sounds like instead of "UBSAN: Undefined behaviour in $file", UBSAN > should report something like "UBSAN: $behavior in $file"? > > e.g. > 40: UBSAN: bad shift in drivers/usb/core/devio.c:1517:25" > 41: UBSAN: signed integer overflow in ./arch/x86/include/asm/atomic.h:156:2 If you mean make them such that kernel testing systems could simply take the first line as "crash identity", then most likely we need function name there instead of file:line:column. At least this seems to be working the best based on our experience. > I'll add one for the bounds checker. > > How are these reports used? There are test inputs, each also contains expected parsing output (title at minimum, but can also contain crash type, corrupted mark, extracted "report") and that's verified against actual parsing result. > (And is there a way to check a live kernel > crash? i.e. to tell syzkaller "echo ARRAY_BOUNDS >/.../lkdtm..." and > generate a report? Unfortunately all of kernel tooling is completely untested at the moment. We would very much like to have all sanitizers tested in a meaningful way, e.g.: https://github.com/llvm-mirror/compiler-rt/blob/master/test/asan/TestCases/global-overflow.cpp#L15-L18 But also LOCKDEP, KMEMLEAK, ODEBUG, FAULT_INJECTS, etc, all untested too. Nobody knows what they produce, and if they even still detect bugs, report false positives, etc. But that's the kernel testing story... No, syzbot does not do kernels unit-testing. And there are no such tests anyways... > > > > I noticed a few things > > > > about the ubsan handlers: they don't use any of the common "warn" > > > > infrastructure (neither does kasan from what I can see), and was missing > > > > a check for panic_on_warn (kasan has this, but does it incorrectly). > > > > > > Yes, panic_on_warn we also need. > > > > > > I will look at the patches again for Acked-by. > > > > > > Acked-by: Dmitry Vyukov <firstname.lastname@example.org> > > for the series. > > Thanks! > > > > > I see you extended the test module, do you have samples of all UBSAN > > report types that are triggered by these functions? Is so, please add > > them to: > > https://github.com/google/syzkaller/tree/master/pkg/report/testdata/linux/report > > Okay, cool. > > > with whatever titles they are detected now. Improving titles will then > > be the next step, but much simpler with a good collection of tests. > > > > Will you send the panic_on_want patch as well? > > Yes; I wanted to make sure it was needed first (which you've confirmed > now). I'll likely not send it until next week. > > -- > Kees Cook > > -- > You received this message because you are subscribed to the Google Groups "syzkaller" group. > To unsubscribe from this group and stop receiving emails from it, send an email to email@example.com. > To view this discussion on the web visit https://groups.google.com/d/msgid/syzkaller/201911270952.D66CD15AEC%40keescook.
next prev parent reply index Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-11-21 18:15 Kees Cook 2019-11-21 18:15 ` [PATCH v2 1/3] ubsan: Add trap instrumentation option Kees Cook 2019-11-21 18:15 ` [PATCH v2 2/3] ubsan: Split "bounds" checker from other options Kees Cook 2019-11-21 18:15 ` [PATCH v2 3/3] lkdtm/bugs: Add arithmetic overflow and array bounds checks Kees Cook 2019-11-22 9:07 ` [PATCH v2 0/3] ubsan: Split out bounds checker Dmitry Vyukov 2019-11-22 16:52 ` Kees Cook 2019-11-27 5:42 ` Kees Cook 2019-11-27 6:54 ` Dmitry Vyukov 2019-11-27 9:34 ` Dmitry Vyukov 2019-11-27 17:59 ` Kees Cook 2019-11-28 10:38 ` Dmitry Vyukov [this message] 2019-11-28 16:14 ` Qian Cai 2019-11-28 13:10 ` Dmitry Vyukov
Reply instructions: You may reply publically to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to='CACT4Y+a-0ZqGj0hQhOW=aUcjeQpf_487ASnnzdm_M2N7+z17Lg@mail.gmail.com' \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Kernel-hardening archive on lore.kernel.org Archives are clonable: git clone --mirror https://lore.kernel.org/kernel-hardening/0 kernel-hardening/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 kernel-hardening kernel-hardening/ https://lore.kernel.org/kernel-hardening \ email@example.com public-inbox-index kernel-hardening Example config snippet for mirrors Newsgroup available over NNTP: nntp://nntp.lore.kernel.org/com.openwall.lists.kernel-hardening AGPL code for this site: git clone https://public-inbox.org/public-inbox.git