From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-it0-f70.google.com (mail-it0-f70.google.com [209.85.214.70]) by kanga.kvack.org (Postfix) with ESMTP id EC56F8E0001 for ; Tue, 18 Sep 2018 13:36:37 -0400 (EDT) Received: by mail-it0-f70.google.com with SMTP id z72-v6so3967531itc.8 for ; Tue, 18 Sep 2018 10:36:37 -0700 (PDT) Received: from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65]) by mx.google.com with SMTPS id 15-v6sor4669148itk.111.2018.09.18.10.36.36 for (Google Transport Security); Tue, 18 Sep 2018 10:36:36 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: References: From: Andrey Konovalov Date: Tue, 18 Sep 2018 19:36:35 +0200 Message-ID: Subject: Re: [PATCH v6 13/18] khwasan: add bug reporting routines Content-Type: text/plain; charset="UTF-8" Sender: owner-linux-mm@kvack.org List-ID: To: Dmitry Vyukov Cc: Andrey Ryabinin , Alexander Potapenko , Catalin Marinas , Will Deacon , Christoph Lameter , Andrew Morton , Mark Rutland , Nick Desaulniers , Marc Zyngier , Dave Martin , Ard Biesheuvel , "Eric W . Biederman" , Ingo Molnar , Paul Lawrence , Geert Uytterhoeven , Arnd Bergmann , "Kirill A . Shutemov" , Greg Kroah-Hartman , Kate Stewart , Mike Rapoport , kasan-dev , "open list:DOCUMENTATION" , LKML , Linux ARM , linux-sparse@vger.kernel.org, Linux-MM , "open list:KERNEL BUILD + fi..." , Kostya Serebryany , Evgeniy Stepanov , Lee Smith , Ramana Radhakrishnan , Jacob Bramley , Ruben Ayrapetyan , Jann Horn , Mark Brand , Chintan Pandya , Vishwath Mohan On Wed, Sep 12, 2018 at 7:50 PM, Dmitry Vyukov wrote: > On Wed, Aug 29, 2018 at 1:35 PM, Andrey Konovalov wrote: >> +#ifdef CONFIG_KASAN_HW > > We already have #ifdef CONFIG_KASAN_HW section below with additional > functions for KASAN_HW and empty stubs otherwise. I would add this one > there as well. Will do in v7. > >> +void print_tags(u8 addr_tag, const void *addr); >> +#else >> +static inline void print_tags(u8 addr_tag, const void *addr) { } >> +#endif >> +void *find_first_bad_addr(void *addr, size_t size) >> +{ >> + u8 tag = get_tag(addr); >> + void *untagged_addr = reset_tag(addr); >> + u8 *shadow = (u8 *)kasan_mem_to_shadow(untagged_addr); >> + void *first_bad_addr = untagged_addr; >> + >> + while (*shadow == tag && first_bad_addr < untagged_addr + size) { > > I think it's better to check that are within bounds before accessing > shadow. Otherwise it's kinda potential out-of-bounds access ;) > I know that we _should_ not do an oob here, but still. > Also feels that this function can be shortened to something like: > > u8 tag = get_tag(addr); > void *p = reset_tag(addr); > void *end = p + size; > > while (p < end && tag == *(u8 *)kasan_mem_to_shadow(p)) > p += KASAN_SHADOW_SCALE_SIZE; > return p; Will do in v7.