From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id A04C9C433EF for ; Thu, 7 Jul 2022 10:13:55 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A5A046B0072; Thu, 7 Jul 2022 06:13:54 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id A085D6B0073; Thu, 7 Jul 2022 06:13:54 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8A98D6B0074; Thu, 7 Jul 2022 06:13:54 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 7711E6B0072 for ; Thu, 7 Jul 2022 06:13:54 -0400 (EDT) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 33A78F59 for ; Thu, 7 Jul 2022 10:13:54 +0000 (UTC) X-FDA: 79659892788.27.132996A Received: from mail-yw1-f177.google.com (mail-yw1-f177.google.com [209.85.128.177]) by imf04.hostedemail.com (Postfix) with ESMTP id CC74340015 for ; Thu, 7 Jul 2022 10:13:53 +0000 (UTC) Received: by mail-yw1-f177.google.com with SMTP id 00721157ae682-3137316bb69so164960397b3.10 for ; Thu, 07 Jul 2022 03:13:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=kPWo2TmGl+9OHVe70g4XsibJyi/n5Q+LOKMuqK03HYA=; b=NQ9bRvc9vYE+J89XD7PO1q7mkA13sA71QpWW5mmA90B7A5ldxeO5Pue7F+raM4qwVK 7PTHolsnOA/QyktohmZhPj4QG3UIvIpNp6w9MLNizTeJjag2aCzvouMmjQ9Dozewakdc p4i/vm4y5Nmon2hCM/O7ALNrjqnKceKFdes1VyKc/SalQalLTfdWnmAh7Vwzs1r7ruCh OUfVLilKCmffj87sOoCilovelYVOLN3BusHLwHcUPsRgZhy97AzywVaFtQwi1DidwQIA X12W1N7SYNR1CXBtk3ROP3Pi0XB9JcdnT6cLBwsgEJdcJY7RXrVrnlkBNVXz8wM9DCz5 jhBg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=kPWo2TmGl+9OHVe70g4XsibJyi/n5Q+LOKMuqK03HYA=; b=ng4RLJvZEvatqwhwTq00cL3RqQvMhxCGW5D2vReCNN8LYB8aW8ITw/6Wf6+Bz2rwpE b4v/qubZwJtK8xzvjyREcgPVLJnYdYdfT/FNR16EvnhSlDCgYfPPV7QLMsJa8QlbS6za VQnC/E2ORtLvwI5byvcpfOn8vpTWXBi4yYdhwnvi7RJJ3/P3kAQ468WwEBLE6iv8OjNG zANTvO7s2WHphhchs7l5E4YN3HNRaM6yX83ac7dWUzuE2ObIoZsnvsWqVRhTCW6/Dw4e LtloXRrLO+GKEx+W4GvPhKfJF+iH+DtWqPvHRZ00e45KTo2yCjTQ3VNGxjdoyZbSIxnI OZgA== X-Gm-Message-State: AJIora9CRMs/1AJaHOw6gNEBtxI4BOdb7oAVlsbOAblhk3nylc47qC7i lnRJ+jIIRCPp9sGM7iYbAINiNiWserWdq7Sy9c/qZg== X-Google-Smtp-Source: AGRyM1vadqM77gQ/U73N1rxYJChYky+4QRezCslan02cQ8qsw+iLZ89lKnRN4bUYz8lDps/Q7HOvTFEAYhyq8/bzdD0= X-Received: by 2002:a81:e17:0:b0:31c:a24c:9ee6 with SMTP id 23-20020a810e17000000b0031ca24c9ee6mr21067667ywo.362.1657188832898; Thu, 07 Jul 2022 03:13:52 -0700 (PDT) MIME-Version: 1.0 References: <20220701142310.2188015-1-glider@google.com> <20220701142310.2188015-5-glider@google.com> In-Reply-To: <20220701142310.2188015-5-glider@google.com> From: Marco Elver Date: Thu, 7 Jul 2022 12:13:17 +0200 Message-ID: Subject: Re: [PATCH v4 04/45] x86: asm: instrument usercopy in get_user() and __put_user_size() To: Alexander Potapenko Cc: Alexander Viro , Alexei Starovoitov , Andrew Morton , Andrey Konovalov , Andy Lutomirski , Arnd Bergmann , Borislav Petkov , Christoph Hellwig , Christoph Lameter , David Rientjes , Dmitry Vyukov , Eric Dumazet , Greg Kroah-Hartman , Herbert Xu , Ilya Leoshkevich , Ingo Molnar , Jens Axboe , Joonsoo Kim , Kees Cook , Mark Rutland , Matthew Wilcox , "Michael S. Tsirkin" , Pekka Enberg , Peter Zijlstra , Petr Mladek , Steven Rostedt , Thomas Gleixner , Vasily Gorbik , Vegard Nossum , Vlastimil Babka , kasan-dev@googlegroups.com, linux-mm@kvack.org, linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1657188833; a=rsa-sha256; cv=none; b=eq87Ibo/JhXwJwUXMFIxTmJUPfP+Iy5rpZdJU9reIADTQVBa6BRhS3pkc2w+bymwVkOngl +MKRRYxQU3UNqKrCDOXJVmhjSswPCQfUAWcyG2YSKMoU9HYK6LSjIOhU7dYSpywHD7HPQq 5VmZ7G99lEoZAi7jFHFrdk2X37rRvt8= ARC-Authentication-Results: i=1; imf04.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=NQ9bRvc9; spf=pass (imf04.hostedemail.com: domain of elver@google.com designates 209.85.128.177 as permitted sender) smtp.mailfrom=elver@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1657188833; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=kPWo2TmGl+9OHVe70g4XsibJyi/n5Q+LOKMuqK03HYA=; b=YOiQ8nFkRurYSie0NoDoW1IE5LMGtfaKYauTuU7yMxYJAbeDQPhX2T0m0AEqjvnTI2lE94 OtskILKDwsIoYDUy/Zctq1ujkod1dlMz8agV5Qr+kcx3x50STLcfsc3ugb/xPqHvqHwt7i jG49bu7i6Nrp/DY+j7rnHht5Iw+ReUo= X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: CC74340015 X-Rspam-User: Authentication-Results: imf04.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=NQ9bRvc9; spf=pass (imf04.hostedemail.com: domain of elver@google.com designates 209.85.128.177 as permitted sender) smtp.mailfrom=elver@google.com; dmarc=pass (policy=reject) header.from=google.com X-Stat-Signature: 9s1xcjtq4quwgzkpmqqwgahctph1oo7z X-HE-Tag: 1657188833-887279 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Fri, 1 Jul 2022 at 16:23, Alexander Potapenko wrote: > > Use hooks from instrumented.h to notify bug detection tools about > usercopy events in get_user() and put_user_size(). > > It's still unclear how to instrument put_user(), which assumes that > instrumentation code doesn't clobber RAX. do_put_user_call() has a comment about KASAN clobbering %ax, doesn't this also apply to KMSAN? If not, could we have a that provides helpers to push registers on the stack and pop them back on return? Also it seems the test robot complained about this patch. > Signed-off-by: Alexander Potapenko > --- > Link: https://linux-review.googlesource.com/id/Ia9f12bfe5832623250e20f1859fdf5cc485a2fce > --- > arch/x86/include/asm/uaccess.h | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/arch/x86/include/asm/uaccess.h b/arch/x86/include/asm/uaccess.h > index 913e593a3b45f..1a8b5a234474f 100644 > --- a/arch/x86/include/asm/uaccess.h > +++ b/arch/x86/include/asm/uaccess.h > @@ -5,6 +5,7 @@ > * User space memory access functions > */ > #include > +#include > #include > #include > #include > @@ -99,11 +100,13 @@ extern int __get_user_bad(void); > int __ret_gu; \ > register __inttype(*(ptr)) __val_gu asm("%"_ASM_DX); \ > __chk_user_ptr(ptr); \ > + instrument_copy_from_user_before((void *)&(x), ptr, sizeof(*(ptr))); \ > asm volatile("call __" #fn "_%P4" \ > : "=a" (__ret_gu), "=r" (__val_gu), \ > ASM_CALL_CONSTRAINT \ > : "0" (ptr), "i" (sizeof(*(ptr)))); \ > (x) = (__force __typeof__(*(ptr))) __val_gu; \ > + instrument_copy_from_user_after((void *)&(x), ptr, sizeof(*(ptr)), 0); \ > __builtin_expect(__ret_gu, 0); \ > }) > > @@ -248,7 +251,9 @@ extern void __put_user_nocheck_8(void); > > #define __put_user_size(x, ptr, size, label) \ > do { \ > + __typeof__(*(ptr)) __pus_val = x; \ > __chk_user_ptr(ptr); \ > + instrument_copy_to_user(ptr, &(__pus_val), size); \ > switch (size) { \ > case 1: \ > __put_user_goto(x, ptr, "b", "iq", label); \ > @@ -286,6 +291,7 @@ do { \ > #define __get_user_size(x, ptr, size, label) \ > do { \ > __chk_user_ptr(ptr); \ > + instrument_copy_from_user_before((void *)&(x), ptr, size); \ > switch (size) { \ > case 1: { \ > unsigned char x_u8__; \ > @@ -305,6 +311,7 @@ do { \ > default: \ > (x) = __get_user_bad(); \ > } \ > + instrument_copy_from_user_after((void *)&(x), ptr, size, 0); \ > } while (0) > > #define __get_user_asm(x, addr, itype, ltype, label) \ > -- > 2.37.0.rc0.161.g10f37bed90-goog >