]> git.baikalelectronics.ru Git - kernel.git/commit
x86/mm/kmmio: Fix mmiotrace for page unaligned addresses
authorKarol Herbst <kherbst@redhat.com>
Mon, 27 Nov 2017 07:51:39 +0000 (08:51 +0100)
committerIngo Molnar <mingo@kernel.org>
Mon, 11 Dec 2017 14:35:18 +0000 (15:35 +0100)
commit55ae94297ca64d621c0c4f679a87bd484fda46f2
tree3a7947b4194a2bdcb74eb37a7258bde3a69d19ba
parent519d7e2e84090ca6b5ae3165a8d4509e325e747e
x86/mm/kmmio: Fix mmiotrace for page unaligned addresses

If something calls ioremap() with an address not aligned to PAGE_SIZE, the
returned address might be not aligned as well. This led to a probe
registered on exactly the returned address, but the entire page was armed
for mmiotracing.

On calling iounmap() the address passed to unregister_kmmio_probe() was
PAGE_SIZE aligned by the caller leading to a complete freeze of the
machine.

We should always page align addresses while (un)registerung mappings,
because the mmiotracer works on top of pages, not mappings. We still keep
track of the probes based on their real addresses and lengths though,
because the mmiotrace still needs to know what are mapped memory regions.

Also move the call to mmiotrace_iounmap() prior page aligning the address,
so that all probes are unregistered properly, otherwise the kernel ends up
failing memory allocations randomly after disabling the mmiotracer.

Tested-by: Lyude <lyude@redhat.com>
Signed-off-by: Karol Herbst <kherbst@redhat.com>
Acked-by: Pekka Paalanen <ppaalanen@gmail.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: nouveau@lists.freedesktop.org
Link: http://lkml.kernel.org/r/20171127075139.4928-1-kherbst@redhat.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
arch/x86/mm/ioremap.c
arch/x86/mm/kmmio.c