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 31A61C52D7D for ; Sat, 17 Aug 2024 08:58:11 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B88598D00CD; Sat, 17 Aug 2024 04:58:10 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id B36CC8D00CC; Sat, 17 Aug 2024 04:58:10 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 9124F8D00CD; Sat, 17 Aug 2024 04:58:10 -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 726A78D00CC for ; Sat, 17 Aug 2024 04:58:10 -0400 (EDT) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 2618B1C20A5 for ; Sat, 17 Aug 2024 08:58:10 +0000 (UTC) X-FDA: 82461135540.06.D4577A5 Received: from sin.source.kernel.org (sin.source.kernel.org [145.40.73.55]) by imf21.hostedemail.com (Postfix) with ESMTP id D429B1C0010 for ; Sat, 17 Aug 2024 08:58:07 +0000 (UTC) Authentication-Results: imf21.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b="jA/+K0Ku"; dmarc=pass (policy=none) header.from=kernel.org; spf=pass (imf21.hostedemail.com: domain of alx@kernel.org designates 145.40.73.55 as permitted sender) smtp.mailfrom=alx@kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1723885074; a=rsa-sha256; cv=none; b=TYieuCwqBReUKyE1iEEZCaC7B07ZrIMImcU2o45AL8OXJTxH2l8vUaCCp1+A8tzj6FooLg ziJcCcHCHUMrEpqmUUgU19uXzDw46L9IfO5SltXCuXXN37nIwcK5UcGhC1/QkTxkdISxE6 lwZ7YD0siilBemsX4G0680oig1gtH2k= ARC-Authentication-Results: i=1; imf21.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b="jA/+K0Ku"; dmarc=pass (policy=none) header.from=kernel.org; spf=pass (imf21.hostedemail.com: domain of alx@kernel.org designates 145.40.73.55 as permitted sender) smtp.mailfrom=alx@kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1723885074; 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=j/AKSSr/PiKY+nlUo12vPDkh3Hx3x8srZ/cZM7KlB6o=; b=RuSBhfVxNdXclH5SF9TWrjzbssxcn+2s/wqgmYBRggbZNwl+V2qlgXgLEjdDFDPRnGrUv1 vZHk/YEleNQIH8NxYksuhTyuqNdJIIDLjhbaLCEjCfumVKqdRZCAGxqrMHDfhZn2CLpc69 3xDX+0y6cYRYglpUZ/nxvygx9mXhs2E= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id 83E74CE0121; Sat, 17 Aug 2024 08:58:04 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 11DBFC116B1; Sat, 17 Aug 2024 08:57:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1723885082; bh=dCqnyQN2UFl3dmnzEXRNHHoFuoYH8Pb/Zy25P4PIooM=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=jA/+K0KuJr6bosX7kAhhjeeNBHtpza6p1jhlROjEcWPRYknBmwZU+eHcxxeSBTkrv vYBlMHW2+468pbPRYmdcL4SvKRMFDqKjbPkJGv0rupfZ9BPQzZYnCktWhOmaHBXmbQ awtkm8U862WlOslcofyM2PSvBb0LwoZ1kG8/GQKgqzQJp3VjiFrgPc71GmGwMiBVOa x8aYt4pQYido4JBoJgVDF+IUvG/rQU+OoYOH9JJMuif391eMi+gQjHL6EYgwmhRuee Gv0mEunbxeOW/lVzQIVMTNXsu78p6/AGLxYiNcco83pGmdFKxbPhcBbTto09rtMU6G iLrN0sAz4TlMA== Date: Sat, 17 Aug 2024 10:57:56 +0200 From: Alejandro Colomar To: Yafang Shao Cc: akpm@linux-foundation.org, torvalds@linux-foundation.org, justinstitt@google.com, ebiederm@xmission.com, alexei.starovoitov@gmail.com, rostedt@goodmis.org, catalin.marinas@arm.com, 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, Simon Horman , Matthew Wilcox Subject: Re: [PATCH v7 6/8] mm/util: Deduplicate code in {kstrdup,kstrndup,kmemdup_nul} Message-ID: References: <20240817025624.13157-1-laoar.shao@gmail.com> <20240817025624.13157-7-laoar.shao@gmail.com> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="sc6ko3aljxex75k2" Content-Disposition: inline In-Reply-To: <20240817025624.13157-7-laoar.shao@gmail.com> X-Rspam-User: X-Rspamd-Queue-Id: D429B1C0010 X-Rspamd-Server: rspam01 X-Stat-Signature: osgphfb1z68n36d663byp3wb5keoxw5q X-HE-Tag: 1723885087-3818 X-HE-Meta: U2FsdGVkX196HhNZUPnXd92E3p+Yl/m/IACqenCFuRnITohgnW0HWppI0Mo/qBdhF7GZc2vOnzNfZfnyTclxZF7ga/Pfkjp8HyFTcCAGSCGW8Tg+cOzs2Uin5AdKtCUhuwCQMDcBNBkJBBZnKPad8frA71CppNHIr4ZxYoR8wsOehng8tILylox7anqwkMwdGDn1GWsIHUwmRJr391KHk3QU07mwmGCCM9Ajyz4VBTk+rDUAZIeVIWFM0FjB+3kkBNKWw848z+vL0xdHFgbbgNkxnXe+RuXCxElnXgGvM3Hc0roNPMo/3DYX6tgDGgYngVKUGymDx7Uf3R9dcv44yPYSKA+NDaEJyJLRUpcsDRwSb5q/FZkDgv42X9xELCy+bIfasjQOQ4KjROeZhJmR7lh5Ajg33MAhMW9BAvO1jk/B8A7lwCVMUlIQCBX2vZTj8BJxbWFfYKKICoU5toOyzf+wTC84I1wPokZPLpByZy052kREuFk//pYtLDHuWMhYaINnpqNUPMjFbp1lOqT9R0OuNnM4huiaoFT7pEXz0YhY2bCorwJSyz4ekGik0IRyqS0wKassjFArYLeMvvraJ6zcqmRGmSTaIbkLHSupdWAkFyDQWOt1WmxB9ycRmLgMvSacHfR/B7ezvR/4i/c5b97S/5W55/UPPfHW0xPDS6RroJDhoQD9EQC8WK6/UJVDyaTNR9yd2Et6z1DuzyXy7aGAkD65265BUcsq1zqW9ZxN09O0FpQaP+CDucFMwwt4vEjmrBaVLVgUslGwwe6xliLuL+dgPCIL56OWacFhoxiMFEVcBlV3xq147lVPX05mrIz22WNemWlT5yhGVfcXv3/HlZtMoPWedCmEPWhgmlR+2fiAhOS1LI2mOATpJHmciK9FRdVs6AhyiEnp0NcewZu566oYMEVLY3NXFTbCpwxMJqaTLOlTFPyISlZxoBo0oodpSdhT+8I+PoY/E/a vwECBySK auLm2446JEMfTGjQKHXK0hPMbuLPoNc8csKRhm2M0anUmKy+8XR4Snw9jm5oQJ1DiGDfHPfCaok5Fc4X3cWG3b5a7R45+tzLUXpRtfoqZnPecMD3ScCqhSJfXRB7d4MO3tvWNMLRnWXaBc9sRIoon9oSQyultCUzRPu+S0ZO7mrLQNH/v8ppuV1QlWbBGSmSGab8nylbguUrnYohzcPwYbw7LtgZAaozF937+ZkeXpMiDgGEcVU3x9PY2P0zrCjDhV6vDV7V+ej3Z8XjgNBu2dVarRZwiMHJ095LL8g2J836tReYY56yy/p4APzMsKpnFplznyiaWROurHG2/DJq/oAs2EzdMT9GIPyAUwiaqGmmP7fRdO72xsBHN6Irk3FwMDnJEXjx74tSxmPeCUXKgwJUZ1v0PvcM8QvGi0C+uiCzNOfsKvOU2gQ2G7BtiDCxfv5tywMvgQQqpOya/8FC8XjY9z5mXTk26dl9gYa2R99ctXMwmwJZQQBbQb80uXHoRSTp98GNyItrPK5PI1Y9JZHF3eszKLSgGM0hFQMSMWz2jhH1W1ck9krDF3tLF7ur4EcN6stYCwfkibSMwvZ9AA+vwGQ/2fyeGdqjVRJ353Z8dgNbEpGqKWMaKcVVSB39iazZaPx+/CQqHfhCZlN6Z/eurNLMi9psPn2Rsyw+5Fzb2luY/0F6d2d02hfraFqmNV2cm 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: --sc6ko3aljxex75k2 Content-Type: text/plain; protected-headers=v1; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable From: Alejandro Colomar To: Yafang Shao Cc: akpm@linux-foundation.org, torvalds@linux-foundation.org, justinstitt@google.com, ebiederm@xmission.com, alexei.starovoitov@gmail.com, rostedt@goodmis.org, catalin.marinas@arm.com, 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, Simon Horman , Matthew Wilcox Subject: Re: [PATCH v7 6/8] mm/util: Deduplicate code in {kstrdup,kstrndup,kmemdup_nul} References: <20240817025624.13157-1-laoar.shao@gmail.com> <20240817025624.13157-7-laoar.shao@gmail.com> MIME-Version: 1.0 In-Reply-To: <20240817025624.13157-7-laoar.shao@gmail.com> Hi Yafang, On Sat, Aug 17, 2024 at 10:56:22AM GMT, Yafang Shao wrote: > These three functions follow the same pattern. To deduplicate the code, > let's introduce a common helper __kmemdup_nul(). >=20 > Suggested-by: Andrew Morton > Signed-off-by: Yafang Shao > Cc: Simon Horman > Cc: Matthew Wilcox > --- > mm/util.c | 67 +++++++++++++++++++++---------------------------------- > 1 file changed, 26 insertions(+), 41 deletions(-) >=20 > diff --git a/mm/util.c b/mm/util.c > index 4542d8a800d9..310c7735c617 100644 > --- a/mm/util.c > +++ b/mm/util.c > @@ -45,33 +45,40 @@ void kfree_const(const void *x) > EXPORT_SYMBOL(kfree_const); > =20 > /** > - * kstrdup - allocate space for and copy an existing string > - * @s: the string to duplicate > + * __kmemdup_nul - Create a NUL-terminated string from @s, which might b= e unterminated. > + * @s: The data to copy > + * @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 or %NULL in case of error > + * Return: newly allocated copy of @s with NUL-termination or %NULL in > + * case of error > */ > -noinline > -char *kstrdup(const char *s, gfp_t gfp) > +static __always_inline char *__kmemdup_nul(const char *s, size_t len, gf= p_t gfp) > { > - size_t len; > char *buf; > =20 > - if (!s) > + buf =3D kmalloc_track_caller(len, gfp); > + if (!buf) > return NULL; > =20 > - len =3D strlen(s) + 1; > - buf =3D 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] =3D '\0'; > - } > + memcpy(buf, s, len); > + /* Ensure the buf is always NUL-terminated, regardless of @s. */ > + buf[len - 1] =3D '\0'; > return buf; > } > + > +/** > + * kstrdup - allocate space for and copy an existing string > + * @s: the string to duplicate > + * @gfp: the GFP mask used in the kmalloc() call when allocating memory > + * > + * Return: newly allocated copy of @s or %NULL in case of error > + */ > +noinline > +char *kstrdup(const char *s, gfp_t gfp) > +{ > + return s ? __kmemdup_nul(s, strlen(s) + 1, gfp) : NULL; > +} > EXPORT_SYMBOL(kstrdup); > =20 > /** > @@ -106,19 +113,7 @@ EXPORT_SYMBOL(kstrdup_const); > */ > char *kstrndup(const char *s, size_t max, gfp_t gfp) > { > - size_t len; > - char *buf; > - > - if (!s) > - return NULL; > - > - len =3D strnlen(s, max); > - buf =3D kmalloc_track_caller(len+1, gfp); > - if (buf) { > - memcpy(buf, s, len); > - buf[len] =3D '\0'; > - } > - return buf; > + return s ? __kmemdup_nul(s, strnlen(s, max) + 1, gfp) : NULL; > } > EXPORT_SYMBOL(kstrndup); > =20 > @@ -192,17 +187,7 @@ EXPORT_SYMBOL(kvmemdup); > */ > char *kmemdup_nul(const char *s, size_t len, gfp_t gfp) > { > - char *buf; > - > - if (!s) > - return NULL; > - > - buf =3D kmalloc_track_caller(len + 1, gfp); > - if (buf) { > - memcpy(buf, s, len); > - buf[len] =3D '\0'; > - } > - return buf; > + return s ? __kmemdup_nul(s, len + 1, gfp) : NULL; > } > EXPORT_SYMBOL(kmemdup_nul); I like the idea of the patch, but it's plagued with all those +1 and -1. I think that's due to a bad choice of value being passed by. If you pass the actual length of the string (as suggested in my reply to the previous patch) you should end up with a cleaner set of APIs. The only remaining +1 is for kmalloc_track_caller(), which I ignore what it does. char * __kmemdup_nul(const char *s, size_t len, gfp_t gfp) { char *buf; buf =3D kmalloc_track_caller(len + 1, gfp); if (!buf) return NULL; strcpy(mempcpy(buf, s, len), ""); return buf; } char * kstrdup(const char *s, gfp_t gfp) { return s ? __kmemdup_nul(s, strlen(s), gfp) : NULL; } char * kstrndup(const char *s, size_t n, gfp_t gfp) { return s ? __kmemdup_nul(s, strnlen(s, n), gfp) : NULL; } char * kmemdup_nul(const char *s, size_t len, gfp_t gfp) { return s ? __kmemdup_nul(s, len, gfp) : NULL; } Have a lovely day! Alex --=20 --sc6ko3aljxex75k2 Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEE6jqH8KTroDDkXfJAnowa+77/2zIFAmbAZhQACgkQnowa+77/ 2zLSDhAAk8fODkJDRXvKCNp5tsLUvdHvQxqdEu4TN2l1Adq0ikdxXT3bMWS/GANV dv/O9AzGQAzVzaeG3Z7uelEFLUrhKvbS0U019F6JPTLzmk0FVgK+ZgJgZ+48Ow7m raK9HJr/m6JHtW88LThyKubewPQdnu9/DsySW7qrwNhtdGcbw+zNGTTPJYolzf2k mpvaEhs58srxhy/0Bs7QaFtn3gtsEVJ0rybwT3sEE6S/fnZ/iExx1PSr3mbWZkIz NuUPekcrqKFfwFIcQMBuSNV+//Eku8h8h6SZE3tbTu2+A9V8I3KxMmCbLraMYi8x j9lMOJoPEZLKEVHGitamyvAlThGJOOK+4CLqEVKYlofjMt51OX+FZDTnNk6h1FSG bCE/yE4W0w/9/Wz9OywRkv0X2RfStKDILVgeWd7MhkcoJdg6FdAU9zQ/0UjVjhjz aYyIX+0dGguAm7RyGI+IvoSgo5cidoD/kmo7UKF4Y8YhTtdtyi/3uYyJvXZsJUcj lZePj2bznRHJC7izE+NdVsKhuW48n1CfV7RFg/JfBBaDYBHJ/9ch3WfDaJ5jcCfM WbRQczftMNyNEuE0yEVQugKngeNShru4KoySkZtpiNx805lHwbHvrdHlxFG8xSin iI8byyMOTtBv2znlfaIx2MK4tJs6xiDuPKfzZ0LGTyI3gTEIk5Q= =0Zb6 -----END PGP SIGNATURE----- --sc6ko3aljxex75k2--