On Sat, Jun 17, 2017 at 11:15:31AM +0200, Dmitry Vyukov wrote: > Currently kasan_check_read/write() accept 'const void*', make them > accept 'const volatile void*'. This is required for instrumentation > of atomic operations and there is just no reason to not allow that. > > Signed-off-by: Dmitry Vyukov <[email protected]> > Cc: Mark Rutland <[email protected]> > Cc: Andrey Ryabinin <[email protected]> > Cc: Thomas Gleixner <[email protected]> > Cc: "H. Peter Anvin" <[email protected]> > Cc: Peter Zijlstra <[email protected]> > Cc: Andrew Morton <[email protected]> > Cc: [email protected] > Cc: [email protected] > Cc: [email protected] > Cc: [email protected]
Looks sane to me, and I can confirm this doesn't advervsely affect arm64. FWIW: Acked-by: Mark Rutland <[email protected]> Mark. > --- > include/linux/kasan-checks.h | 10 ++++++---- > mm/kasan/kasan.c | 4 ++-- > 2 files changed, 8 insertions(+), 6 deletions(-) > > diff --git a/include/linux/kasan-checks.h b/include/linux/kasan-checks.h > index b7f8aced7870..41960fecf783 100644 > --- a/include/linux/kasan-checks.h > +++ b/include/linux/kasan-checks.h > @@ -2,11 +2,13 @@ > #define _LINUX_KASAN_CHECKS_H > > #ifdef CONFIG_KASAN > -void kasan_check_read(const void *p, unsigned int size); > -void kasan_check_write(const void *p, unsigned int size); > +void kasan_check_read(const volatile void *p, unsigned int size); > +void kasan_check_write(const volatile void *p, unsigned int size); > #else > -static inline void kasan_check_read(const void *p, unsigned int size) { } > -static inline void kasan_check_write(const void *p, unsigned int size) { } > +static inline void kasan_check_read(const volatile void *p, unsigned int > size) > +{ } > +static inline void kasan_check_write(const volatile void *p, unsigned int > size) > +{ } > #endif > > #endif > diff --git a/mm/kasan/kasan.c b/mm/kasan/kasan.c > index c81549d5c833..edacd161c0e5 100644 > --- a/mm/kasan/kasan.c > +++ b/mm/kasan/kasan.c > @@ -333,13 +333,13 @@ static void check_memory_region(unsigned long addr, > check_memory_region_inline(addr, size, write, ret_ip); > } > > -void kasan_check_read(const void *p, unsigned int size) > +void kasan_check_read(const volatile void *p, unsigned int size) > { > check_memory_region((unsigned long)p, size, false, _RET_IP_); > } > EXPORT_SYMBOL(kasan_check_read); > > -void kasan_check_write(const void *p, unsigned int size) > +void kasan_check_write(const volatile void *p, unsigned int size) > { > check_memory_region((unsigned long)p, size, true, _RET_IP_); > } > -- > 2.13.1.518.g3df882009-goog >

