From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753969AbdFSKu7 (ORCPT ); Mon, 19 Jun 2017 06:50:59 -0400 Received: from foss.arm.com ([217.140.101.70]:48464 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753711AbdFSKu6 (ORCPT ); Mon, 19 Jun 2017 06:50:58 -0400 Date: Mon, 19 Jun 2017 11:50:08 +0100 From: Mark Rutland To: Dmitry Vyukov Cc: peterz@infradead.org, mingo@redhat.com, will.deacon@arm.com, hpa@zytor.com, aryabinin@virtuozzo.com, kasan-dev@googlegroups.com, x86@kernel.org, linux-kernel@vger.kernel.org, Thomas Gleixner , Andrew Morton , linux-mm@kvack.org Subject: Re: [PATCH v4 5/7] kasan: allow kasan_check_read/write() to accept pointers to volatiles Message-ID: <20170619105008.GD10246@leverpostej> References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 > Cc: Mark Rutland > Cc: Andrey Ryabinin > Cc: Thomas Gleixner > Cc: "H. Peter Anvin" > Cc: Peter Zijlstra > Cc: Andrew Morton > Cc: linux-kernel@vger.kernel.org > Cc: x86@kernel.org > Cc: linux-mm@kvack.org > Cc: kasan-dev@googlegroups.com Looks sane to me, and I can confirm this doesn't advervsely affect arm64. FWIW: Acked-by: Mark Rutland 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 >