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 6211DC5321D for ; Mon, 26 Aug 2024 09:57:33 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 92F646B04CE; Mon, 26 Aug 2024 05:57:32 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 8DED06B04D3; Mon, 26 Aug 2024 05:57:32 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 758566B04D4; Mon, 26 Aug 2024 05:57:32 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 534DC6B04CE for ; Mon, 26 Aug 2024 05:57:32 -0400 (EDT) Received: from smtpin07.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id DAB1D1A0E16 for ; Mon, 26 Aug 2024 09:57:31 +0000 (UTC) X-FDA: 82493944302.07.5C45950 Received: from nyc.source.kernel.org (nyc.source.kernel.org [147.75.193.91]) by imf05.hostedemail.com (Postfix) with ESMTP id 46535100006 for ; Mon, 26 Aug 2024 09:57:29 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=iBKObYzu; dmarc=pass (policy=quarantine) header.from=kernel.org; spf=pass (imf05.hostedemail.com: domain of alx@kernel.org designates 147.75.193.91 as permitted sender) smtp.mailfrom=alx@kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1724666186; a=rsa-sha256; cv=none; b=amk9uAc5b12v/A76MG5cbBax7HBFJkG9lWhlmSUcga7qwYGZqaf4jX9OSZ0y3H9sFqHPrh 0lpzcPMStkfVUQjrSSgeElQ6bMr5ZffNnc6epxKsA1JfY48+OP4P7A82i1DmOYJqHmVpYl 3gRiqaeaH/yvhAO2Al7R4jrSAcGbS4o= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=iBKObYzu; dmarc=pass (policy=quarantine) header.from=kernel.org; spf=pass (imf05.hostedemail.com: domain of alx@kernel.org designates 147.75.193.91 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=1724666186; 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=9ILFhXdzc//JCVdlZhzJ4Bt21Pj8iTa+AhqwRHzmiro=; b=0coL3JNq+LkFUEN5Pj+jE7eUrXzzfA3TVwoMwXYaRGQqecvy0kcX38dppUAT5n0ahOxoFi Slmw/m2QePYEsq1Ke0QN8Ev7Ys+VKiRru1zv7wJsghy0UeVcJSz11lfJHc01SvUuzZm7eP N8+CAoMEsVUhCagY9rd37Kgd0mi1NxI= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by nyc.source.kernel.org (Postfix) with ESMTP id BFF9BA4204F; Mon, 26 Aug 2024 09:57:21 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id D866AC567F3; Mon, 26 Aug 2024 09:20:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1724664032; bh=rwXP+5eSF7J7wNGs6IQQcMn0Z+ZA7RlktZ3B5d40Kzs=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=iBKObYzuSp3BAhGOIaeeqPeyFwX6izp/CzVO7M8RvdNK3JPks06o2TiJ+t8CcU1m3 XC2jxvvLE+LrcQsgITEHaeINvLSs3UupG1w1zm7DJVCemGYK8PyENOjRP+4VWyK4rW 6+96F9UQ66WtJDHBUhXDroLekZ1v9QlaDlSf7WyqIV33fYeV/H/LAj2gZ4XB5nQq9g 0csBKvjOUBdCLOE8XGNGPoYI2Q5lXCvZd0ZkB+xpUwXtoitcg0Cap60IRO4xzF+pY2 zKBYqCf+TuOJOF9hFXPAXseDtApOVbZA4ykbdbiPOrERygoEXm94IYMk4f1Ml1OAvd ou7qaxJH4vXgg== Date: Mon, 26 Aug 2024 11:20:26 +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="fr6yymnvpqcqqdt5" Content-Disposition: inline In-Reply-To: X-Rspamd-Queue-Id: 46535100006 X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: mzfswyymc5xm3krmxzufu9tet6h4nsqu X-HE-Tag: 1724666249-905406 X-HE-Meta: U2FsdGVkX19BSL4k0SbKBljagceysPXOyV0fsdkvithu2Ol9If+a50obeMi1JzyELsBC+DfoKlvHt/zN3HdimJEPfVfNQ/yddeX+XF2R6sKsJOgYKrl+i6ILz3P6HxdBCciTR4y4SytRe6a51dyfM/YzN14WhWSrqGeyFsLty4BStFVwXI7CMA6yHzxPGerNCjGctZb6jlR3eOtoOzV+GTct5iClWSXiCJ7x+3HWpt9FCFWR0YuplUIOw3zrfZ7H8kt4OwK64egtu8CYombZ8bO3818tH+nSiM9nsCE4BgqHF8OpPnBHsbrKLqi0aApwFJkPjTxRqtCXO2nL2EEi61KmM2aSoe+F35AhFosBKS1yln8b+8ZlX5JnDjGHVkHa+lUa7xixJEoRKnk0T5APYkt2bpwWTSYCjTQoLeXLEzL1QSvVa/95G2RbqPqhSA1m0CJcRQ6rfvQirSJSiTKYGxoMlF/I9YXsWKxCsskqZwhX5EcX+v37vx/sZlzo4T6rDvPmU0C8j2HL31sLrSca+XcxNO8sxi3bFggo0rNxw72Mmq7vVC6CdaDQg4R+wLSGg1upLx1kWgQ9o8Kfnp9q9pe7sLb8vomOvwSaUf6KjOsJUCH29sLzIXVxtSZyg32MC1oETuRmI7UqXTvCDBKtwSghI07qhX8wh/ltdQwE1tTmezYUf1O82CaeHdORmU3GCkkN28OEGMzF4g6k8iTsDfEgW3FhrdkufEHQ3sEMPFzZSO036qgn+w2RypTG2Fav1nGpjGUGQ0gKdznNpXBYjdA/qoLat73xEYxPA8Fir2/SUhPyldqQHTstY+rj+1CcJLT+QvuacAjRjiLj8UPBwOaCoejmmpRvHzV8eM6vnvXpUrb+qIlPOo/x5djfdSqZ6jgAXXYVYEs0RKn1wfvPgBCwWeihOEyHoGLArYhT+e3r0C/BlBYU7Vwm2IZZI0APkMUCduk4tNsxEPipiLf nsh3dRQa BKVzvr2VDzY6Z744qu9qnV/bw4lRUYGwTKNAKlUXDQ/AXWP5trAAyO/1X9f/rWr9CSWwYlKfYSnCt0sQsCfdTiExd24h1UAzSIixv3c47tGJzJ/QClrV0Yzkck5ec2GYO5CzvYzVqurNmRNSn+W5/L6II1IYuZQa0TPYwFaUAsNON4PFpMciz0z1eOTSr6IHKM1Vd/11Nhldj8YZAqZ/SZ4HoRMBpfhdu4LRLcCLMZu7oDhHeQ8dwYh9RJ69y4il7cUqjcqsbkndayWZU8MC+jVXCSWPMu2BekHueWoVq0zqBucXsjvDCJX6c1z7Hbp+jvlNe+h6lcwNtlqaqfzpfMMgYWQyvqXgAUaJGl3CEkWsm+PptgcWJLzIHVvov4YxgE2W5CBgD/KeB36XrQG0XGXWT36U0EaOrR7Wd0/VEC8WVeAJAKh/mmH0Bw8892YmNRBiiTyR1RuXaLfCiXstfvcAjQztK3VWITmXB3xAmNnuaTRi8/Ty5deVuCFnoYIAF0nbYNLVZV0sggFUCEizwJilKR7Fq/cpS0kKQnxw6Ij1rIpFiVYhxAoSAi9sEFvhQ5DIXI8uho+N8ifjecYjQzSEqnTFg6V+Kh4QiTEe8Hop49S7dAuQsD25JP7kBu5qarVtTqZZRdonsdkcqQhEn8LwXuUN8Te4orgDAW83Z1BjtP4p+SLs7My7Cp11WoE6luMBKo7jUXSXOQZY= 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: --fr6yymnvpqcqqdt5 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: Hi Yafang, On Sat, Aug 17, 2024 at 10:58:02AM GMT, Alejandro Colomar wrote: > Hi Yafang, >=20 > 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= be 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, = gfp_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); >=20 > 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. >=20 > The only remaining +1 is for kmalloc_track_caller(), which I ignore what > it does. >=20 > char * > __kmemdup_nul(const char *s, size_t len, gfp_t gfp) > { > char *buf; >=20 > buf =3D kmalloc_track_caller(len + 1, gfp); > if (!buf) > return NULL; >=20 > strcpy(mempcpy(buf, s, len), ""); Changing these strcpy(, "") to the usual; =3D'\0' or =3D0, but I'd still recommend the rest of the changes, that is, changing the value passed in len, to remove several +1 and -1s. What do you think? Have a lovely day! Alex > return buf; > } >=20 > char * > kstrdup(const char *s, gfp_t gfp) > { > return s ? __kmemdup_nul(s, strlen(s), gfp) : NULL; > } >=20 > char * > kstrndup(const char *s, size_t n, gfp_t gfp) > { > return s ? __kmemdup_nul(s, strnlen(s, n), gfp) : NULL; > } >=20 > char * > kmemdup_nul(const char *s, size_t len, gfp_t gfp) > { > return s ? __kmemdup_nul(s, len, gfp) : NULL; > } >=20 > Have a lovely day! > Alex >=20 > --=20 > --=20 --fr6yymnvpqcqqdt5 Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEE6jqH8KTroDDkXfJAnowa+77/2zIFAmbMSNoACgkQnowa+77/ 2zLIExAAowwDvn4fGttE88cvxlhQwOy8jHj4erHbWDOLMcKFNLpWhwWRqOaVZyMN dseuMqjKxp0vlIjA+QRvwtCSfMPrfGFrF+hSal8nEVG5YPp02IJFeKPVs2UIMirG WQfz7OkEGY6BN61CHuNhXQL+WLCzEuP/jqqh6bZ5/l9elU7H+CAEGJgWMq5QeyRo eVljlfkFRxJkdzcKPJJFc/wK95vSKXFPe5mE7UGfJx1oO3m6q3j5i2aaBFQcIjm3 QiBGQ8aXepDV7L3XLJaRPa/Tkm7Cc5fdL6B9KEN4SvxOXn7V5VDRVOlrT8Du9YQ1 G77o8rFyZ9MNFsPcZh5g6DgqQyK7RWTZLm/Xq8GjfB5/iQ8FeZ7gaLye6d52vDub vsvIk9D/L3iWDeGTahM9+5bHe8AHr3sI9eCnKbLayJrZ0TA03KgCEKhj8Sp1kkdu hai6+ym4Wc9aAYAGEHdJFI/8Gu93uqXT35bT270ov2E77VMyhVltprOCW6qbziTr ebt5iKyJ6f2e/rXOCOlqP4CTLSTtRfo2padaLlAJCSEJLs4Q1YsqZMIyLbn7PYuD MpkrWxeysR2d3KsKcb1MYCZoKqsQ+hWtkEHZWqHgygI3fbBPE5tkmCS/ustkAk1s 15ry+Az65a6wiEv5w38JrVCJnzZ/x0aPwOCDNdgYwS/amQEQP10= =I3ve -----END PGP SIGNATURE----- --fr6yymnvpqcqqdt5--