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 E3483C27C4F for ; Fri, 21 Jun 2024 13:51:51 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 57FB78D0171; Fri, 21 Jun 2024 09:51:51 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 52E7E8D0170; Fri, 21 Jun 2024 09:51:51 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3F8358D0171; Fri, 21 Jun 2024 09:51:51 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 21F628D0170 for ; Fri, 21 Jun 2024 09:51:51 -0400 (EDT) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 8A2EA120F0E for ; Fri, 21 Jun 2024 13:51:50 +0000 (UTC) X-FDA: 82255033980.30.4B839C5 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf24.hostedemail.com (Postfix) with ESMTP id AD4A9180011 for ; Fri, 21 Jun 2024 13:51:48 +0000 (UTC) Authentication-Results: imf24.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=UsGyxC89; spf=pass (imf24.hostedemail.com: domain of horms@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=horms@kernel.org; dmarc=pass (policy=none) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1718977899; 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=H3DhfTS5waUAYEBsAb7g6H2QdAHj+5YiEaPUcmYqxkc=; b=lBTV5XoF213xUDkdLyHvlSRH0eNY72wcG3JTSyZOCWqacDckOEQMV4WbaPTV8mLlvofoyx zdMEYf7HHqCM2ZExO2oiWCwejiFfQ5TSJc/Y8+Hs1uBu164WAUYLxYa8gHAXrp5nokcldQ HTd06bcNcfuqitRRRifpy1M//AmCXnA= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1718977899; a=rsa-sha256; cv=none; b=YsyoheG3efQ63N7sn/sKPb46MpMequP0I9QQm4mUP+Crit+KJ2FeXxLiJevb1wRau/aLy9 jE5La9X0GxHDI3jCLDpDxG9RdQvgqUFAwlHqx8GHg4v77L3Yg1voOzS6IPyv9wHJNmmG/0 b08pwtksGkxP2Nt4Fj5L0u0M+I+JEQc= ARC-Authentication-Results: i=1; imf24.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=UsGyxC89; spf=pass (imf24.hostedemail.com: domain of horms@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=horms@kernel.org; dmarc=pass (policy=none) header.from=kernel.org Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id BE542626A9; Fri, 21 Jun 2024 13:51:47 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 550E9C2BBFC; Fri, 21 Jun 2024 13:51:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1718977907; bh=8ElvnQPorg4Uy8imgywI1nXgKQs3ZmLKdexYoFKBvac=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=UsGyxC89mordI9Vx2/gblUM+5Ftjcp3r6aWKgvC7AgxfbKbF3tjOKH0Oc8+4xZ7ka 53imU3u4kl0xmHWBQeUrPXwpUd4HV0CgvxjAnuDWJ+ESadO9DPtFhcHEFsx5/l50Bz PqCADX8QGP+tUecordMNnCcTvHzzeLNDNuubgkM1ZH0YhaycbAUJQX5AgoxWKcT6ec LoK6DITeynsMoscskznn7E6zxgUT2BnmrOQrutlHoqdl3OFBWB1zfStM0zrLF8lSLa q/3x7IxAscJ0MKpSbvImWfCwO2VqiKdnJI4j+sBQLyP7fynER53ZfDDEcEKKBhm0gu ID9btTmN8DF3w== Date: Fri, 21 Jun 2024 14:51:42 +0100 From: Simon Horman To: Yafang Shao Cc: torvalds@linux-foundation.org, ebiederm@xmission.com, alexei.starovoitov@gmail.com, rostedt@goodmis.org, catalin.marinas@arm.com, akpm@linux-foundation.org, penguin-kernel@i-love.sakura.ne.jp, linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, linux-trace-kernel@vger.kernel.org, audit@vger.kernel.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, bpf@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org Subject: Re: [PATCH v3 06/11] mm/util: Deduplicate code in {kstrdup,kstrndup,kmemdup_nul} Message-ID: <20240621135142.GF1098275@kernel.org> References: <20240621022959.9124-1-laoar.shao@gmail.com> <20240621022959.9124-7-laoar.shao@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20240621022959.9124-7-laoar.shao@gmail.com> X-Rspamd-Queue-Id: AD4A9180011 X-Stat-Signature: 34n6rgd17w3m66k6sroemc4sygrr97i5 X-Rspamd-Server: rspam09 X-Rspam-User: X-HE-Tag: 1718977908-345495 X-HE-Meta: U2FsdGVkX1+fECk8DL0SfHirjfRUpROj14R5sXi+KornWTcDC3rdCgbUmIy9h9N/hOjbJ1RCyaSy4Su+yEQymEY7V/PrBwkFU7bg8x81ZgkOOF84KijOpSaAvP7vRNROPNP2C1YUmi2YVyP8SNEYhkOoikO2682zevOKXDLWGAJqHzaopWrwimZ6NemmnNxcSU1SajCIqgu82UcbR9L+rv56t4A99XHpNS4tW0Ej4DxiQPTr/R2FYRMCLNIc7rGdxUFG8hRnoTvlYuyQ5+vhD4R9Eab05fqy1KlxmXQs8+A4m8bi7k3ovFgYRqKw7/XiISnaoH1O0AF3kXvsEduXmWzuFu6IjsfYzhxkPdR/viBDip2gJaPhQUqYFtRVNFiHGJMbn3mgzOVWIlfe4fAUFQH5PSfHOFLPgE8y1sHSbyP7Tr3NyV9S/HJWL6ho3K6nT4zfIeYETiBUGvY0o+19b0+FvI7vsSqCEgFy5bTc6d8wV099byV5OPYbof5rRLfd/i5FOtoEbK2bwSXLSIujawFcrIrlwWLgB6B4tj8h2tZ9iSV0gBWBFVGeaLjsrBZ49Cz0gXlVwusXF57H6egeYxP956u9tK6aHHVqTD9MtA89VDE4QmY9JcuxqgwaWVyL5UJpWt0NprzyvRgnXcGifF9GyQntJ884l2LJD9izh734Mtbq218sHPw/mNXsrVoVuCTf69tiSMt0Xhez8zRTZDo2Fc04vdQXSyEcBzeJleBwPKHZ6LY4AKPtWLVlH1a2B3Q5QtMRr2X2sJpIT0pePYSMruF1eZkIdcPFW3BTJXmPfoBoOCp42agGSFUKBuFDUc+O0ep86rgld/j8LV2zAroEeoT2y6GrNIYYKo2gwnpZv9hMJ2gA0Rv3mjgK4cSf/6inTzha2Fsmcq29r16qDWJgp3Gl4NjjXmrdlC97vBNKFy/Nuleb/q3zADd7K4FygZKZ9ASGB993frEAw+p VbOBb8xC bnyb6thLTNLnW62aWcrTrQEVY2Y8gU51KluRRqqPFada1OM+8n2kUyLLMmT175CV4ebbayUofYhQ9RSrpyKQWc45GI1Yq/demLCuXR1LG0cDL3LFY8LvaXGGdy6wP290045Hi3pj+QLtxf1Oxgx6pRoPjc/KjeN1v19D9ioLSIc1Uix9qE0sZHWALIrSfwNxRF24PwUcHr+L+SpsrN2VO42zJz5fsV6mhTnPhgYPMOAxdYkBCH9m/CQHxP7Bgo/lTbysuxyOmA+LXNTORjJIkm/yTXpUAXbzq1JdWmOxftZ434WoI+6+EXxweJJGuLUzUkrKGADjoPtTVE/xjf555rwDZSqJRi7iD3U0LHkSoloWtUCp5lQs538Y7A+Wb+LTwa/TbKTOI0pV2yG/+U1iTc5wV//6EgK0G/KnZaapXME4DZeI= 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: List-Subscribe: List-Unsubscribe: On Fri, Jun 21, 2024 at 10:29:54AM +0800, Yafang Shao wrote: > These three functions follow the same pattern. To deduplicate the code, > let's introduce a common help __kstrndup(). > > Suggested-by: Andrew Morton > Signed-off-by: Yafang Shao Hi Yafang Shao, Some minor nits from my side. > --- > mm/internal.h | 24 ++++++++++++++++++++++++ > mm/util.c | 27 ++++----------------------- > 2 files changed, 28 insertions(+), 23 deletions(-) > > diff --git a/mm/internal.h b/mm/internal.h > index b2c75b12014e..fd87f685739b 100644 > --- a/mm/internal.h > +++ b/mm/internal.h > @@ -1521,4 +1521,28 @@ static inline void shrinker_debugfs_remove(struct dentry *debugfs_entry, > void workingset_update_node(struct xa_node *node); > extern struct list_lru shadow_nodes; > > +/** > + * __kstrndup - Create a NUL-terminated string from @s, which might be unterminated. > + * @s: The data to stringify > + * @len: The size of the data, including the null terminator > + * @gfp: the GFP mask used in the kmalloc() call when allocating memory > + * > + * Return: newly allocated copy of @s with NUL-termination or %NULL in > + * case of error > + */ > +static __always_inline char *__kstrndup(const char *s, size_t len, gfp_t gfp) > +{ > + char *buf; > + > + buf = kmalloc_track_caller(len, gfp); > + if (!buf) > + return NULL; > + > + memcpy(buf, s, len); > + /* Ensure the buf is always NUL-terminated, regardless of @s. */ > + buf[len - 1] = '\0'; > + return buf; > +} > + > + nit: One blank line is enough. > #endif /* __MM_INTERNAL_H */ > diff --git a/mm/util.c b/mm/util.c > index 41c7875572ed..d9135c5fdf7f 100644 > --- a/mm/util.c > +++ b/mm/util.c > @@ -58,17 +58,8 @@ char *kstrdup(const char *s, gfp_t gfp) > if (!s) > return NULL; > > - len = strlen(s) + 1; > - buf = kmalloc_track_caller(len, gfp); > - if (buf) { > - memcpy(buf, s, len); > - /* During memcpy(), the string might be updated to a new value, > - * which could be longer than the string when strlen() is > - * called. Therefore, we need to add a null termimator. > - */ > - buf[len - 1] = '\0'; > - } > - return buf; nit: The local variable buf is now unused, and should be removed from kstrdup(). Likewise for kstrndup() and kmemdup_nul() Flagged by W=1 builds with gcc-13 and clang-18, and Smatch. > + len = strlen(s); > + return __kstrndup(s, len + 1, gfp); > } > EXPORT_SYMBOL(kstrdup); > > @@ -111,12 +102,7 @@ char *kstrndup(const char *s, size_t max, gfp_t gfp) > return NULL; > > len = strnlen(s, max); > - buf = kmalloc_track_caller(len+1, gfp); > - if (buf) { > - memcpy(buf, s, len); > - buf[len] = '\0'; > - } > - return buf; > + return __kstrndup(s, len + 1, gfp); > } > EXPORT_SYMBOL(kstrndup); > > @@ -195,12 +181,7 @@ char *kmemdup_nul(const char *s, size_t len, gfp_t gfp) > if (!s) > return NULL; > > - buf = kmalloc_track_caller(len + 1, gfp); > - if (buf) { > - memcpy(buf, s, len); > - buf[len] = '\0'; > - } > - return buf; > + return __kstrndup(s, len + 1, gfp); > } > EXPORT_SYMBOL(kmemdup_nul); > > -- > 2.39.1 > >