Messages in this thread | | | From | Dmitry Vyukov <> | Date | Thu, 16 Jan 2020 10:18:25 +0100 | Subject | Re: [RFC PATCH] UML: add support for KASAN under x86_64 |
| |
On Thu, Jan 16, 2020 at 9:03 AM Johannes Berg <johannes@sipsolutions.net> wrote: > > On Thu, 2020-01-16 at 08:57 +0100, Johannes Berg wrote: > > > > And if I remember from looking at KASAN, some of the constructors there > > depended on initializing after the KASAN data structures were set up (or > > at least allocated)? It may be that you solved that by allocating the > > shadow so very early though. > > Actually, no ... it's still after main(), and the constructors run > before. > > So I _think_ with the CONFIG_CONSTRUCTORS revert, this will no longer > work (but happy to be proven wrong!), if so then I guess we do have to > find a way to initialize the KASAN things from another (somehow > earlier?) constructor ... > > Or find a way to fix CONFIG_CONSTRUCTORS and not revert, but I looked at > it quite a bit and didn't.
Looking at this problem and at the number of KASAN_SANITIZE := n in Makefiles (some of which are pretty sad, e.g. ignoring string.c, kstrtox.c, vsprintf.c -- that's where the bugs are!), I think we initialize KASAN too late. I think we need to do roughly what we do in user-space asan (because it is user-space asan!). Constructors run before main and it's really good, we need to initialize KASAN from these constructors. Or if that's not enough in all cases, also add own constructor/.preinit array entry to initialize as early as possible. All we need to do is to call mmap syscall, there is really no dependencies on anything kernel-related. This should resolve the problem with constructors (after they initialize KASAN, they can proceed to do anything they need) and it should get rid of most KASAN_SANITIZE (in particular, all of lib/Makefile and kernel/Makefile) and should fix stack instrumentation (in case it does not work now). The only tiny bit we should not instrument is the path from constructor up to mmap call.
| |