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 DDE2CC77B61 for ; Mon, 24 Apr 2023 12:40:11 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 61F196B0075; Mon, 24 Apr 2023 08:40:11 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 5CF9E6B007B; Mon, 24 Apr 2023 08:40:11 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 497BB6B007D; Mon, 24 Apr 2023 08:40:11 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 373F66B0075 for ; Mon, 24 Apr 2023 08:40:11 -0400 (EDT) Received: from smtpin01.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 07ECC1C60C7 for ; Mon, 24 Apr 2023 12:40:11 +0000 (UTC) X-FDA: 80716242222.01.D349547 Received: from mail-vk1-f180.google.com (mail-vk1-f180.google.com [209.85.221.180]) by imf07.hostedemail.com (Postfix) with ESMTP id 4726340017 for ; Mon, 24 Apr 2023 12:40:09 +0000 (UTC) Authentication-Results: imf07.hostedemail.com; dkim=pass header.d=google.com header.s=20221208 header.b=EvhSjrdg; spf=pass (imf07.hostedemail.com: domain of elver@google.com designates 209.85.221.180 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=1682340009; 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=pm5YgAO5GczZ8cxOJAygGAJ/cd9lfTw7GnmC+q/KoRk=; b=bXJnU4pWLInSyZPZ/ZnPTLFwFaYiSAzJs941USef09iNAhGHpcyXvNh1hOQL1utzc0bWvt QuzFPW19llS0bGVTxhmtOxtyb78BG7hm6WRYW4L4RoIFEVjKeK0rIxbCdfu2vcZ1pR6vmM jqVNQ48Ispno002Fd6rthjDsPPdtl+U= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1682340009; a=rsa-sha256; cv=none; b=CKu/dkL21hMB1xVdeDYVTthPuTetDoMS68gWRIWPq1AqEafdDBgCDshDKYwYuHW0VhgZaN MQ9W1MVbgEx4DsmcL4Rp8/TYk+gKBaykcM05COJCMaV6oXkAy4Eg3egzvZDt+xn11jJ0kA iCyzl/5CjED17cLxrNvnkbS2GpYmKOo= ARC-Authentication-Results: i=1; imf07.hostedemail.com; dkim=pass header.d=google.com header.s=20221208 header.b=EvhSjrdg; spf=pass (imf07.hostedemail.com: domain of elver@google.com designates 209.85.221.180 as permitted sender) smtp.mailfrom=elver@google.com; dmarc=pass (policy=reject) header.from=google.com Received: by mail-vk1-f180.google.com with SMTP id 71dfb90a1353d-4436568b2aeso1518023e0c.0 for ; Mon, 24 Apr 2023 05:40:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1682340008; x=1684932008; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=pm5YgAO5GczZ8cxOJAygGAJ/cd9lfTw7GnmC+q/KoRk=; b=EvhSjrdgmL0MYhC6dlsPxTuaCHE6jgUCfxYbxrv9oPGM/Ix35+mNwgCkBtECRNYivv Fvh1xL2KXFq95SLH3/yfnq+KvCO5n6zqGWf0yEZi/H4IAXXEmDp+Ej7Ki5rCCer7/cPu qUwwMl7MULUYsYMmBKo0bhRCrCDJb6F/RDT5TgAOMXR6DkDBuOPS3QSXddWPc4+q6mgu NRKd4gks/wZPtNaR078n+6Ue61MGfKK/9FPJ3SqCBpnfJvTKQR6xPDq+WtKS1+FVpA5H nlu1TbsXdVPMLnd9xGZ13Mkx9Ok4g019h3d/zDfYQHsCWzNfIQpvOf0Z0md+T/nJTqqw CBMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682340008; x=1684932008; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=pm5YgAO5GczZ8cxOJAygGAJ/cd9lfTw7GnmC+q/KoRk=; b=Smi95ttK/bT4+kKf4IPRGzSy7fqvtGxMuubfaImLTH6R5aWtSZEUkISzsYwSAmiA+q MHvsvwPk1Adpt2zyNQI8xLmY/FSmQh6I1SbcqSuGtEE0SRFj6SLNSwgh6Bv+MokwKrWV 4/9eijSg1ldPeuZ7ZkRLOgVZd2nGQ5Uy2F1ybAn9pZGJh4J7ltOg66hgVZfbKq7C8SZE r+eBfJnuVE7U/9Nsv3Z328XYh941WGof3/ToDniwlQY0D2GMa1TLlUqfa3FH6/3Sbodf qOynJVR0/fhpNIwwPtIZ7KQcPvvxnFgZ/hdcMwKwsrSBMC4/o/ny0GKvGBGltcIhgdVM 7icQ== X-Gm-Message-State: AAQBX9fk4gEGsu+Deog8h9dSCUtlcy7T9BvNNjDLRnwYax/T0GnJpn43 Fb9qgdCgNiC8SdWTgJ4Jzo/nD17OoosHlx6JEdek7Q== X-Google-Smtp-Source: AKy350YvS+TbOMgcCsyKEFkIgsBUoimeYJQiqwmPCS7JwMJWqucrWfHXKx8k223zZs2YdU24BGnHG/wRU1o4kkuf2D4= X-Received: by 2002:a1f:cb02:0:b0:43f:c225:129c with SMTP id b2-20020a1fcb02000000b0043fc225129cmr2806380vkg.14.1682340008166; Mon, 24 Apr 2023 05:40:08 -0700 (PDT) MIME-Version: 1.0 References: <20230424112313.3408363-1-glider@google.com> In-Reply-To: <20230424112313.3408363-1-glider@google.com> From: Marco Elver Date: Mon, 24 Apr 2023 14:39:32 +0200 Message-ID: Subject: Re: [PATCH] string: use __builtin_memcpy() in strlcpy/strlcat To: Alexander Potapenko Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, akpm@linux-foundation.org, dvyukov@google.com, kasan-dev@googlegroups.com, andy@kernel.org, ndesaulniers@google.com, nathan@kernel.org Content-Type: text/plain; charset="UTF-8" X-Rspam-User: X-Rspamd-Queue-Id: 4726340017 X-Rspamd-Server: rspam09 X-Stat-Signature: 9rfzxxjoup7axmo7n74j4y8mwbsac1d1 X-HE-Tag: 1682340009-427971 X-HE-Meta: U2FsdGVkX19GWb6sQW7EtY6AOVYH80mkMafYKZfzCeqdU7bNLXlV0pbFHQ2BhgPu/8pKQajOr7SreWNMA7NPOvInSGidfJl7a4xQydFBhAH+z59hXP02Po1IQPgnb6vm5XbFYPT3YGRPmhAdmCGig6K8yKy3GkxwJHBhzCR1bMJVcgfjPEDova/Ynf5N4ckOCcGc0hn2bYubeeF3gH1CmFEHmNezfsnvzi+uaP8QbptsHs/vzQ8rjkKEz9CQ6klQ9q8bAJHcJwxhDd1NbfWe58zJIrCzTloY9IMuZ4N87gHTAlbHY0pKRPygH1isCp/FjxLDne5LTG+sI/pEws7aDFYeu3YUKVpqFOfM/gjeFjy2HpycgL8Y5Z9NjPwy2uBaQugZjQWM89TIh2EHp5lYFrz6/pnHyD+77kjuCvhzQdDoKLGS2NpDdzx3D0ce/k92H2TqfgIWOitH8w+1IRtaAsebL9vDT3sG6k5yQk2gQsLue7dH4GjkD+pCqZTYf1/G+8NUp8W8B2kixXZrLMMl7QSGMi/e+OwsWi2TDOAyJ4RKu8GBYY0U5tufoJaR7cOVBc2ilLZtnJrb8Dh9LbaHtp1OLvtAH98bvHWYhQ/P6UmU3H7ai/Fc5tcjquxcMGS/9hAZwbsDJ9CQjz/vmCnvydxXSc3IGVPSERTG2sljMSb8rvYPIQ/B9n5fb+pyG6PV6X+J4AY2eiu97GOz8RLKf7A71rNdCbaM+6KqeI/66vyuGD8ilzX0qozJkR6luxCpIGBC4N2xyLcMk0hnVrZnNPMRPMMmk1dtATrMQQ1FK7xyVsDa/uyU+NCyKuQW5cX8+WvEVMZ3wD26VtWoOc+ADdpJCsttCLB503WftQCJ+LfUi3A48C4lDNcrKWBzQyqLlO1t9P2M2oWBm8oEyDjfWPhQPtg6WRwe3m2vQzBo8cDDw/b4JNA6IF1Yds+hvH3Ts8945Ypq1OqCtL7ly8I VyG1759E lY4Q+lBYY3ZUM75uMV1I9K9LILD2tWGavRqp1I3f+d+BrEphZsZDoKkc40APtRQNFuuGeo9QHU9wKAl/iuSyZHosdZu7ISAkG93iAuMdOgeK0c5KZujMr/pS0IXUkG91lnay6Dj0O/dnJzG90fMtLjyLNTmVScuvmAUu4VFkSjpZ+OMGZIl5fV6U3pgSyvOC9+siuB5uNXe64xthRbS06DtKxIrIimtHpNwJ0d7Ca0eofqR738n4E94O7R95TazRGs4pkJOh1oiQ6sXNP0OWCiFRrgZoTSoSQQRVD3lsgPyZFTA9/yYOJVoyOLArZLQcczGyL1eotQxMOyOQfdjOSHX1qVZhdjVVFpkll 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 Mon, 24 Apr 2023 at 13:23, Alexander Potapenko wrote: > > lib/string.c is built with -ffreestanding, which prevents the compiler > from replacing certain functions with calls to their library versions. > > On the other hand, this also prevents Clang and GCC from instrumenting > calls to memcpy() when building with KASAN, KCSAN or KMSAN: > - KASAN normally replaces memcpy() with __asan_memcpy() with the > additional cc-param,asan-kernel-mem-intrinsic-prefix=1; > - KCSAN and KMSAN replace memcpy() with __tsan_memcpy() and > __msan_memcpy() by default. > > To let the tools catch memory accesses from strlcpy/strlcat, replace > the calls to memcpy() with __builtin_memcpy(), which KASAN, KCSAN and > KMSAN are able to replace even in -ffreestanding mode. > > This preserves the behavior in normal builds (__builtin_memcpy() ends up > being replaced with memcpy()), and does not introduce new instrumentation > in unwanted places, as strlcpy/strlcat are already instrumented. > > Suggested-by: Marco Elver > Signed-off-by: Alexander Potapenko > Link: https://lore.kernel.org/all/20230224085942.1791837-1-elver@google.com/ Reviewed-by: Marco Elver Looks reasonable. > --- > lib/string.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/lib/string.c b/lib/string.c > index 3d55ef8901068..be26623953d2e 100644 > --- a/lib/string.c > +++ b/lib/string.c > @@ -110,7 +110,7 @@ size_t strlcpy(char *dest, const char *src, size_t size) > > if (size) { > size_t len = (ret >= size) ? size - 1 : ret; > - memcpy(dest, src, len); > + __builtin_memcpy(dest, src, len); > dest[len] = '\0'; > } > return ret; > @@ -260,7 +260,7 @@ size_t strlcat(char *dest, const char *src, size_t count) > count -= dsize; > if (len >= count) > len = count-1; > - memcpy(dest, src, len); > + __builtin_memcpy(dest, src, len); > dest[len] = 0; > return res; > } > -- > 2.40.0.634.g4ca3ef3211-goog >