From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753828AbdFSNLo (ORCPT ); Mon, 19 Jun 2017 09:11:44 -0400 Received: from mail-oi0-f50.google.com ([209.85.218.50]:35576 "EHLO mail-oi0-f50.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751030AbdFSNLn (ORCPT ); Mon, 19 Jun 2017 09:11:43 -0400 MIME-Version: 1.0 In-Reply-To: <20170619105008.GD10246@leverpostej> References: <20170619105008.GD10246@leverpostej> From: Dmitry Vyukov Date: Mon, 19 Jun 2017 15:11:21 +0200 Message-ID: Subject: Re: [PATCH v4 5/7] kasan: allow kasan_check_read/write() to accept pointers to volatiles To: Mark Rutland Cc: Peter Zijlstra , Ingo Molnar , Will Deacon , "H. Peter Anvin" , Andrey Ryabinin , kasan-dev , "x86@kernel.org" , LKML , Thomas Gleixner , Andrew Morton , "linux-mm@kvack.org" Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Jun 19, 2017 at 12:50 PM, Mark Rutland wrote: > 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. Great! Thanks for testing. Ingo, what are your thoughts? Are you taking this to locking tree? When? >> --- >> 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 >>