Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp2697003ybl; Mon, 20 Jan 2020 07:43:03 -0800 (PST) X-Google-Smtp-Source: APXvYqzM8cVu9/8mPdveg18IuWpf39uESyLSxX7FeOtyFoNaOA8oe2gGQ7651AJpHA7aCP9xLut+ X-Received: by 2002:aca:36c1:: with SMTP id d184mr13221501oia.70.1579534982848; Mon, 20 Jan 2020 07:43:02 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1579534982; cv=none; d=google.com; s=arc-20160816; b=0cld+nfQ/N2lx7OJGv0PhXLhMHHcHVg3Src5W84TOth4DjW+yr7OeSkl8bHimHCwOK ZpEFoItX/vbMp8OvrZQgz9tehcWQ6wfmTTyaDOjaPHCT6v5NeKqJNOat3uTGYi5h/12R sDCwyjXn4AgJYYLfu4BqWG+kPXtzPOhK+uX1/mniLMczb+5ePR9OKftZ05Jd+a1TNWLL G+g7VZ+mLr+DimORJnOXbyQlOJWcAZOcCdgV7McRz4nKU8sPVKOqbWxJxAUoa2Qlmgmg TpYEZxrS0m9K9YehrMGCbDFA74SifL22tCXsn6eHMM475/sfX00bHkFCsERNz6Ox0UT1 iK6Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=bW+iYMzyJar5RkTMPGCcQG+bJOCaKWAlm479KJ6EAJc=; b=H4SSM+EDP7GEgHvn2EoJ6dbdgCBX4tyAJEm0gBlKrRAgl2HsMmOHrFFe99H2Mqtr3/ ib/BUrJ7X1+Ib122ZA0WeD1Bi0tgmCb/6vbxBeItUMUV1hJxNj+TGQ/9Wu34RC8lJHh5 q7w0dmnkdMqS0b4nXok9JpGHSHszgky2mcKDhasyGx78cOfUg8XTiFE2A2IlmD9vA6Wu 1zPcNqxClbCBa6Yyi6tfitAx/BIPsUNYF7oeXYdTQJg2FR7R5287hTVHYRfhkePF1eek agZso0Fc25CzJPlQyLBLJHvJ7ib5eo0CvSObGH99DFTDl7t1YZN6C4W2tKXTo7IuPQlP 4jyw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=VbUJNHV1; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 65si6850557oif.14.2020.01.20.07.42.51; Mon, 20 Jan 2020 07:43:02 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=VbUJNHV1; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729106AbgATPkz (ORCPT + 99 others); Mon, 20 Jan 2020 10:40:55 -0500 Received: from mail-ot1-f66.google.com ([209.85.210.66]:36450 "EHLO mail-ot1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726819AbgATPkz (ORCPT ); Mon, 20 Jan 2020 10:40:55 -0500 Received: by mail-ot1-f66.google.com with SMTP id m2so129744otq.3 for ; Mon, 20 Jan 2020 07:40:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=bW+iYMzyJar5RkTMPGCcQG+bJOCaKWAlm479KJ6EAJc=; b=VbUJNHV1v/I38PKXDVIMoFye1oZVkkX7SJwJbvOOD7n4G2y8o79w3tA+/PDj1eFIAr hBmicIIU24JnBiwvffKhfRYNCEfdtJNfQDpOzvQIxdCjivxW5TSMA7Wa3nZ38oePzy2+ qMKkH9Hhv9vX7wSW3HPT+pv1+ZtAMMwRYppY6oMhDuRDLM3NRGDeaAU2AHd9NulTvFuI 4tbxl+rERpJJWSzspLh7RFLS9kNcBnhKkThxr+4aETQngE/KIIi4gJt+HmIyELS1PBJq ROXOe+lauiiaT/nNfUG6bmuTrlVOETx5UwWtgS6yFYd3FPJsqD7HNq1LEOU6AJXJQblM QIIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=bW+iYMzyJar5RkTMPGCcQG+bJOCaKWAlm479KJ6EAJc=; b=NmHA9SWzXGndSve1JdJUJHpWvXl+81kmcdaYljnbZXKFb2fz43XUff2Tse2LqpHx4m 6ae3sjRvQtzntGtwrnZ6121K7qQJVc4Uh4puljAiSannX43RFs0jduApc0/1mHf6yRKP 908CXcOeLsZVZFIcGjTe5FQpQ+Wixi5eKnP/r9wczwEwvJb0n42ZRUPjfNNjLocPja4F /k7AqKxS7jl/5F0H4sXcuQ3puZWQOZ3lL1G+bF3TMBSDYvigYd5gzz9HFZi9cEBuaFbl PGmS7MeSGvrthJ6ZNOUUNfQa5g4ZjszevpI6gnvGXD9AqCFw75zdASbalMkLg27Qb1vH Amzg== X-Gm-Message-State: APjAAAWr/ktNXNRTBFP4l2WsNL+APIW8n+JyuJvfz8Q8agKZbM3Nclgq komm16Fslu1ksp4IY5+1VPCrp31EJ9JoJTo+ltvcLQ== X-Received: by 2002:a05:6830:1d7b:: with SMTP id l27mr15490059oti.251.1579534853838; Mon, 20 Jan 2020 07:40:53 -0800 (PST) MIME-Version: 1.0 References: <20200120141927.114373-1-elver@google.com> In-Reply-To: From: Marco Elver Date: Mon, 20 Jan 2020 16:40:42 +0100 Message-ID: Subject: Re: [PATCH 1/5] include/linux: Add instrumented.h infrastructure To: Dmitry Vyukov Cc: "Paul E. McKenney" , Andrey Konovalov , Alexander Potapenko , kasan-dev , LKML , Mark Rutland , Will Deacon , Peter Zijlstra , Boqun Feng , Arnd Bergmann , Al Viro , Christophe Leroy , Daniel Axtens , Michael Ellerman , Steven Rostedt , Masami Hiramatsu , Ingo Molnar , Christian Brauner , Daniel Borkmann , cyphar@cyphar.com, Kees Cook , linux-arch Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, 20 Jan 2020 at 16:09, Dmitry Vyukov wrote: > > On Mon, Jan 20, 2020 at 3:58 PM Dmitry Vyukov wrote: > > > > On Mon, Jan 20, 2020 at 3:45 PM Dmitry Vyukov wrote: > > > > > > On Mon, Jan 20, 2020 at 3:19 PM Marco Elver wrote: > > > > > > > > This adds instrumented.h, which provides generic wrappers for memory > > > > access instrumentation that the compiler cannot emit for various > > > > sanitizers. Currently this unifies KASAN and KCSAN instrumentation. In > > > > future this will also include KMSAN instrumentation. > > > > > > > > Note that, copy_{to,from}_user require special instrumentation, > > > > providing hooks before and after the access, since we may need to know > > > > the actual bytes accessed (currently this is relevant for KCSAN, and is > > > > also relevant in future for KMSAN). > > > > > > > > Suggested-by: Arnd Bergmann > > > > Signed-off-by: Marco Elver > > > > --- > > > > include/linux/instrumented.h | 153 +++++++++++++++++++++++++++++++++++ > > > > 1 file changed, 153 insertions(+) > > > > create mode 100644 include/linux/instrumented.h > > > > > > > > diff --git a/include/linux/instrumented.h b/include/linux/instrumented.h > > > > new file mode 100644 > > > > index 000000000000..9f83c8520223 > > > > --- /dev/null > > > > +++ b/include/linux/instrumented.h > > > > @@ -0,0 +1,153 @@ > > > > +/* SPDX-License-Identifier: GPL-2.0 */ > > > > + > > > > +/* > > > > + * This header provides generic wrappers for memory access instrumentation that > > > > + * the compiler cannot emit for: KASAN, KCSAN. > > > > + */ > > > > +#ifndef _LINUX_INSTRUMENTED_H > > > > +#define _LINUX_INSTRUMENTED_H > > > > + > > > > +#include > > > > +#include > > > > +#include > > > > +#include > > > > + > > > > +/** > > > > + * instrument_read - instrument regular read access > > > > + * > > > > + * Instrument a regular read access. The instrumentation should be inserted > > > > + * before the actual read happens. > > > > + * > > > > + * @ptr address of access > > > > + * @size size of access > > > > + */ > > > > > > Based on offline discussion, that's what we add for KMSAN: > > > > > > > +static __always_inline void instrument_read(const volatile void *v, size_t size) > > > > +{ > > > > + kasan_check_read(v, size); > > > > + kcsan_check_read(v, size); > > > > > > KMSAN: nothing > > > > KMSAN also has instrumentation in > > copy_to_user_page/copy_from_user_page. Do we need to do anything for > > KASAN/KCSAN for these functions? copy_to_user_page/copy_from_user_page can be instrumented with instrument_copy_{to,from}_user_. I prefer keeping this series with no functional change intended for KASAN at least. > There is also copy_user_highpage. > > And ioread/write8/16/32_rep: do we need any instrumentation there. It > seems we want both KSAN and KCSAN too. One may argue that KCSAN > instrumentation there is to super critical at this point, but KASAN > instrumentation is important, if anything to prevent silent memory > corruptions. How do we instrument there? I don't see how it maps to > any of the existing instrumentation functions. These should be able to use the regular instrument_{read,write}. I prefer keeping this series with no functional change intended for KASAN at least. > There is also kmsan_check_skb/kmsan_handle_dma/kmsan_handle_urb that > does not seem to map to any of the instrumentation functions. For now, I would rather that there are some one-off special instrumentation, like for KMSAN. Coming up with a unified interface here that, without the use-cases even settled, seems hard to justify. Once instrumentation for these have settled, unifying the interface would have better justification. This patch series is merely supposed to introduce instrumented.h and replace the kasan_checks (also implicitly introducing kcsan_checks there), however, with no further functional change intended. I propose that adding entirely new instrumentation for both KASAN and KCSAN, we should send a separate patch-series. Thanks, -- Marco