| From: Alexander Potapenko <glider@google.com> |
| Subject: asm-generic: instrument usercopy in cacheflush.h |
| Date: Thu, 15 Sep 2022 17:03:39 +0200 |
| |
| Notify memory tools about usercopy events in copy_to_user_page() and |
| copy_from_user_page(). |
| |
| Link: https://lkml.kernel.org/r/20220915150417.722975-6-glider@google.com |
| Signed-off-by: Alexander Potapenko <glider@google.com> |
| Reviewed-by: Marco Elver <elver@google.com> |
| Cc: Alexander Viro <viro@zeniv.linux.org.uk> |
| Cc: Alexei Starovoitov <ast@kernel.org> |
| Cc: Andrey Konovalov <andreyknvl@gmail.com> |
| Cc: Andrey Konovalov <andreyknvl@google.com> |
| Cc: Andy Lutomirski <luto@kernel.org> |
| Cc: Arnd Bergmann <arnd@arndb.de> |
| Cc: Borislav Petkov <bp@alien8.de> |
| Cc: Christoph Hellwig <hch@lst.de> |
| Cc: Christoph Lameter <cl@linux.com> |
| Cc: David Rientjes <rientjes@google.com> |
| Cc: Dmitry Vyukov <dvyukov@google.com> |
| Cc: Eric Biggers <ebiggers@google.com> |
| Cc: Eric Biggers <ebiggers@kernel.org> |
| Cc: Eric Dumazet <edumazet@google.com> |
| Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Cc: Herbert Xu <herbert@gondor.apana.org.au> |
| Cc: Ilya Leoshkevich <iii@linux.ibm.com> |
| Cc: Ingo Molnar <mingo@redhat.com> |
| Cc: Jens Axboe <axboe@kernel.dk> |
| Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com> |
| Cc: Kees Cook <keescook@chromium.org> |
| Cc: Mark Rutland <mark.rutland@arm.com> |
| Cc: Matthew Wilcox <willy@infradead.org> |
| Cc: Michael S. Tsirkin <mst@redhat.com> |
| Cc: Pekka Enberg <penberg@kernel.org> |
| Cc: Peter Zijlstra <peterz@infradead.org> |
| Cc: Petr Mladek <pmladek@suse.com> |
| Cc: Stephen Rothwell <sfr@canb.auug.org.au> |
| Cc: Steven Rostedt <rostedt@goodmis.org> |
| Cc: Thomas Gleixner <tglx@linutronix.de> |
| Cc: Vasily Gorbik <gor@linux.ibm.com> |
| Cc: Vegard Nossum <vegard.nossum@oracle.com> |
| Cc: Vlastimil Babka <vbabka@suse.cz> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| --- |
| |
| include/asm-generic/cacheflush.h | 14 ++++++++++++-- |
| 1 file changed, 12 insertions(+), 2 deletions(-) |
| |
| --- a/include/asm-generic/cacheflush.h~asm-generic-instrument-usercopy-in-cacheflushh |
| +++ a/include/asm-generic/cacheflush.h |
| @@ -2,6 +2,8 @@ |
| #ifndef _ASM_GENERIC_CACHEFLUSH_H |
| #define _ASM_GENERIC_CACHEFLUSH_H |
| |
| +#include <linux/instrumented.h> |
| + |
| struct mm_struct; |
| struct vm_area_struct; |
| struct page; |
| @@ -105,14 +107,22 @@ static inline void flush_cache_vunmap(un |
| #ifndef copy_to_user_page |
| #define copy_to_user_page(vma, page, vaddr, dst, src, len) \ |
| do { \ |
| + instrument_copy_to_user((void __user *)dst, src, len); \ |
| memcpy(dst, src, len); \ |
| flush_icache_user_page(vma, page, vaddr, len); \ |
| } while (0) |
| #endif |
| |
| + |
| #ifndef copy_from_user_page |
| -#define copy_from_user_page(vma, page, vaddr, dst, src, len) \ |
| - memcpy(dst, src, len) |
| +#define copy_from_user_page(vma, page, vaddr, dst, src, len) \ |
| + do { \ |
| + instrument_copy_from_user_before(dst, (void __user *)src, \ |
| + len); \ |
| + memcpy(dst, src, len); \ |
| + instrument_copy_from_user_after(dst, (void __user *)src, len, \ |
| + 0); \ |
| + } while (0) |
| #endif |
| |
| #endif /* _ASM_GENERIC_CACHEFLUSH_H */ |
| _ |