Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/1.1/patches/2229067/?format=api
{ "id": 2229067, "url": "http://patchwork.ozlabs.org/api/1.1/patches/2229067/?format=api", "web_url": "http://patchwork.ozlabs.org/project/sparclinux/patch/8780eb2ef80575931a339e5225bc80eb13e9be6c.1777306795.git.chleroy@kernel.org/", "project": { "id": 10, "url": "http://patchwork.ozlabs.org/api/1.1/projects/10/?format=api", "name": "Linux SPARC Development ", "link_name": "sparclinux", "list_id": "sparclinux.vger.kernel.org", "list_email": "sparclinux@vger.kernel.org", "web_url": null, "scm_url": null, "webscm_url": null }, "msgid": "<8780eb2ef80575931a339e5225bc80eb13e9be6c.1777306795.git.chleroy@kernel.org>", "date": "2026-04-27T17:13:50", "name": "[RFC,v1,9/9] uaccess: Convert small fixed size copy_{to/from}_user() to scoped user access", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "f38ce621dc214e122a1e5e926e37049e4c6a4559", "submitter": { "id": 92089, "url": "http://patchwork.ozlabs.org/api/1.1/people/92089/?format=api", "name": "Christophe Leroy (CS GROUP)", "email": "chleroy@kernel.org" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/sparclinux/patch/8780eb2ef80575931a339e5225bc80eb13e9be6c.1777306795.git.chleroy@kernel.org/mbox/", "series": [ { "id": 501694, "url": "http://patchwork.ozlabs.org/api/1.1/series/501694/?format=api", "web_url": "http://patchwork.ozlabs.org/project/sparclinux/list/?series=501694", "date": "2026-04-27T17:13:41", "name": "uaccess: Convert small fixed size copy_{to/from}_user() to scoped user access", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/501694/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2229067/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2229067/checks/", "tags": {}, "headers": { "Return-Path": "\n <SRS0=4SRM=C2=vger.kernel.org=sparclinux+bounces-6734-patchwork-incoming=ozlabs.org@ozlabs.org>", "X-Original-To": [ "incoming@patchwork.ozlabs.org", "sparclinux@vger.kernel.org" ], "Delivered-To": [ "patchwork-incoming@legolas.ozlabs.org", "patchwork-incoming@ozlabs.org" ], "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=k20201202 header.b=k8kV5Zhk;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=ozlabs.org\n (client-ip=150.107.74.76; helo=mail.ozlabs.org;\n envelope-from=srs0=4srm=c2=vger.kernel.org=sparclinux+bounces-6734-patchwork-incoming=ozlabs.org@ozlabs.org;\n receiver=patchwork.ozlabs.org)", "gandalf.ozlabs.org;\n arc=pass smtp.remote-ip=\"2600:3c09:e001:a7::12fc:5321\"\n arc.chain=subspace.kernel.org", "gandalf.ozlabs.org;\n dmarc=pass (p=quarantine dis=none) header.from=kernel.org", "gandalf.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=k20201202 header.b=k8kV5Zhk;\n\tdkim-atps=neutral", "gandalf.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c09:e001:a7::12fc:5321; helo=sto.lore.kernel.org;\n envelope-from=sparclinux+bounces-6734-patchwork-incoming=ozlabs.org@vger.kernel.org;\n receiver=ozlabs.org)", "smtp.subspace.kernel.org;\n\tdkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org\n header.b=\"k8kV5Zhk\"", "smtp.subspace.kernel.org;\n arc=none smtp.client-ip=10.30.226.201" ], "Received": [ "from mail.ozlabs.org (gandalf.ozlabs.org [150.107.74.76])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g49RZ0Z7gz1yHv\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 28 Apr 2026 03:24:42 +1000 (AEST)", "from mail.ozlabs.org (mail.ozlabs.org [IPv6:2404:9400:2221:ea00::3])\n\tby gandalf.ozlabs.org (Postfix) with ESMTP id 4g49RZ07lYz4wDK\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 28 Apr 2026 03:24:42 +1000 (AEST)", "by gandalf.ozlabs.org (Postfix)\n\tid 4g49RZ04s9z4wCm; Tue, 28 Apr 2026 03:24:42 +1000 (AEST)", "from sto.lore.kernel.org (sto.lore.kernel.org\n [IPv6:2600:3c09:e001:a7::12fc:5321])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby gandalf.ozlabs.org (Postfix) with ESMTPS id 4g49RV2Qlrz4wL5\n\tfor <patchwork-incoming@ozlabs.org>; Tue, 28 Apr 2026 03:24:38 +1000 (AEST)", "from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sto.lore.kernel.org (Postfix) with ESMTP id 3FD3C3016F22\n\tfor <patchwork-incoming@ozlabs.org>; Mon, 27 Apr 2026 17:21:02 +0000 (UTC)", "from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 5C2243ECBE9;\n\tMon, 27 Apr 2026 17:19:25 +0000 (UTC)", "from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org\n [10.30.226.201])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id 2BC59339714;\n\tMon, 27 Apr 2026 17:19:24 +0000 (UTC)", "by smtp.kernel.org (Postfix) with ESMTPSA id A25EEC2BCB7;\n\tMon, 27 Apr 2026 17:19:12 +0000 (UTC)" ], "ARC-Seal": [ "i=2; a=rsa-sha256; d=ozlabs.org; s=201707; t=1777310681; cv=pass;\n\tb=sSSwwNBrl1+TMWkQHjVdW0KGwNGVwo5xUuv7RVAQrOyO3xkM5LeEJ9J7XRqEIIYLqY5g0Psf5FORRzLdkRmCJHqbFoYGwlTSJsFLB1zEOyqdsImsDGRM3cDE5wq97Vvn+sMukCODWDII6VtaAO/Cn0w7XIg3nQtVsNxQmkpu6DFRio6r4+euwYaDwxgVwnMW1Dsqruu4SUJC10IDvL11GdYm5witE4qMjuFst/GU2L5D6lJBz2QHnWDZW4/TF55A73GJKMNgDSmqC4mmiWV8aZbMAQDxKWro8BTKON2+iZM4Frae76VEEVT9HmeKUjl+l4rNJG/4hcwMeFZYxoB5aQ==", "i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1777310365; cv=none;\n b=FMMCJWBZRrjjYSiA3eaR054EBybd+MBN+lSN3BN5CocSCcm8tIENJh1D+pCEesMt/NXdLvmDrgdKbTCry0Ws+gXSliqYGgAikUbOn+Q+F0KGjeL6CPBJrSP/6A4kIKVX2k8i7JaCo/d+VNC51IcRSJYDEqTpxQo1Wefcb3LD8UI=" ], "ARC-Message-Signature": [ "i=2; a=rsa-sha256; d=ozlabs.org; s=201707;\n\tt=1777310681; c=relaxed/relaxed;\n\tbh=h3Z/nVyoovIhD0EOyurWXqapA3Ve0yAERyRow/fU/M4=;\n\th=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:\n\t MIME-Version;\n b=n2AMFawDLbIxpRGG8QihJc51DKDA1LFkoW7nYQj7njj9yN+SGuU5sac0n1NqhXJZiZqBqSYWqcd6Pum4gzFt9m6/lAGH/DlRbunXiZWgum9ZHJxPushA1eATqL/79O0Hjfb3vHbRoLPT5lAxTSPP5FCaZBdVJpArnJSQE5U8QmmfDAQyt80Pox/pa0A/SCo9boCpLObvrioaVc0BYa5KYnBkYzUGc6+DpL1lzQZxJCm8UNa/sgHOXIE4K0oPwCb2j+3mxUKrJJDxN861t64OnWco4+5C8jCz5LLpctymBxZvyGMKhWa78VviE8putNYGJ7mvUlRHrc8zm4+eMf0XuA==", "i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1777310365; c=relaxed/simple;\n\tbh=xblTv37x9V4gU3cvmA9ILfz6xXNOv0sNe2zU9C6a5nw=;\n\th=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:\n\t MIME-Version;\n b=XhQrdf7UOghUHj346nNBuNK4t8QKwv42weWTHzLB9J9H1Pg4KEcSn0eVYUQ5ec4lrY6ahBwiH6ofUxBY24/Bicz662twTEYvS8xMs3PQ8bMO23fNazIbxyRHabz7++ADrmyPHUUZtHt6Ieg+neofEfeiXp9GpsZ8FZ+KHzEUFP0=" ], "ARC-Authentication-Results": [ "i=2; gandalf.ozlabs.org;\n dmarc=pass (p=quarantine dis=none) header.from=kernel.org;\n dkim=pass (2048-bit key;\n unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=k20201202 header.b=k8kV5Zhk; dkim-atps=neutral;\n spf=pass (client-ip=2600:3c09:e001:a7::12fc:5321; helo=sto.lore.kernel.org;\n envelope-from=sparclinux+bounces-6734-patchwork-incoming=ozlabs.org@vger.kernel.org;\n receiver=ozlabs.org) smtp.mailfrom=vger.kernel.org", "i=1; smtp.subspace.kernel.org;\n dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org\n header.b=k8kV5Zhk; arc=none smtp.client-ip=10.30.226.201" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;\n\ts=k20201202; t=1777310364;\n\tbh=xblTv37x9V4gU3cvmA9ILfz6xXNOv0sNe2zU9C6a5nw=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=k8kV5Zhk7HZbxy8X7mxqUL5UgTTJPPuuLtSKHKOe5PwbIiNodL9/7ESxRbcOMv4dB\n\t NN/pd897F5mMQZv6MW+RM/3mikWvqmJGQCtupbd6YHiobStaCQu79RRkwt3Bs1rL/A\n\t WmXtcy3vIzgejB2MGSu6MrKJ33itreKKdFlemNypyCUExoUHGXA1bHbqFqaNX4ujdd\n\t iXZiXWTV/w69yfgs2V8e+zdWAilhhtsvDDxzPIT8CbbievjXPmrPwVloE5aoqLKmYP\n\t ca2+sf92YJQm2mLHcpyNlGd6mMQP6QhUed6Hx8vk/CloBjO7tSgz4fayv+CeXka+Fz\n\t NwGM6tvALNVmQ==", "From": "\"Christophe Leroy (CS GROUP)\" <chleroy@kernel.org>", "To": "Yury Norov <ynorov@nvidia.com>,\n\tAndrew Morton <akpm@linux-foundation.org>,\n\tLinus Torvalds <torvalds@linux-foundation.org>,\n\tDavid Laight <david.laight.linux@gmail.com>,\n\tThomas Gleixner <tglx@linutronix.de>", "Cc": "\"Christophe Leroy (CS GROUP)\" <chleroy@kernel.org>,\n\tlinux-alpha@vger.kernel.org,\n\tlinux-kernel@vger.kernel.org,\n\tlinux-snps-arc@lists.infradead.org,\n\tlinux-arm-kernel@lists.infradead.org,\n\tlinux-mips@vger.kernel.org,\n\tlinuxppc-dev@lists.ozlabs.org,\n\tkvm@vger.kernel.org,\n\tlinux-riscv@lists.infradead.org,\n\tlinux-s390@vger.kernel.org,\n\tsparclinux@vger.kernel.org,\n\tlinux-um@lists.infradead.org,\n\tdmaengine@vger.kernel.org,\n\tlinux-efi@vger.kernel.org,\n\tlinux-fsi@lists.ozlabs.org,\n\tamd-gfx@lists.freedesktop.org,\n\tdri-devel@lists.freedesktop.org,\n\tintel-gfx@lists.freedesktop.org,\n\tlinux-wpan@vger.kernel.org,\n\tnetdev@vger.kernel.org,\n\tlinux-wireless@vger.kernel.org,\n\tlinux-spi@vger.kernel.org,\n\tlinux-media@vger.kernel.org,\n\tlinux-staging@lists.linux.dev,\n\tlinux-serial@vger.kernel.org,\n\tlinux-usb@vger.kernel.org,\n\txen-devel@lists.xenproject.org,\n\tlinux-fsdevel@vger.kernel.org,\n\tocfs2-devel@lists.linux.dev,\n\tbpf@vger.kernel.org,\n\tkasan-dev@googlegroups.com,\n\tlinux-mm@kvack.org,\n\tlinux-x25@vger.kernel.org,\n\trust-for-linux@vger.kernel.org,\n\tlinux-sound@vger.kernel.org,\n\tsound-open-firmware@alsa-project.org,\n\tlinux-csky@vger.kernel.org,\n\tlinux-hexagon@vger.kernel.org,\n\tloongarch@lists.linux.dev,\n\tlinux-m68k@lists.linux-m68k.org,\n\tlinux-openrisc@vger.kernel.org,\n\tlinux-parisc@vger.kernel.org,\n\tlinux-sh@vger.kernel.org,\n\tlinux-arch@vger.kernel.org", "Subject": "[RFC PATCH v1 9/9] uaccess: Convert small fixed size\n copy_{to/from}_user() to scoped user access", "Date": "Mon, 27 Apr 2026 19:13:50 +0200", "Message-ID": "\n <8780eb2ef80575931a339e5225bc80eb13e9be6c.1777306795.git.chleroy@kernel.org>", "X-Mailer": "git-send-email 2.49.0", "In-Reply-To": "<cover.1777306795.git.chleroy@kernel.org>", "References": "<cover.1777306795.git.chleroy@kernel.org>", "Precedence": "bulk", "X-Mailing-List": "sparclinux@vger.kernel.org", "List-Id": "<sparclinux.vger.kernel.org>", "List-Subscribe": "<mailto:sparclinux+subscribe@vger.kernel.org>", "List-Unsubscribe": "<mailto:sparclinux+unsubscribe@vger.kernel.org>", "MIME-Version": "1.0", "X-Developer-Signature": "v=1; a=openpgp-sha256; l=3638; i=chleroy@kernel.org;\n h=from:subject:message-id; bh=xblTv37x9V4gU3cvmA9ILfz6xXNOv0sNe2zU9C6a5nw=;\n b=owGbwMvMwCV2d0KB2p7V54MZT6slMWS+nxlr/n9yu2DE7uwkCZGbl0uCp6Y1JLvZTPpz+P/PY\n xNqPMoaOkpZGMS4GGTFFFmO/+feNaPrS2r+1F36MHNYmUCGMHBxCsBE9HwZ/ns82Ho9PV2Q+7Pp\n 5fqvs6O/v3YN+3EgL+Wk4b/co1rlkZ8YGVZxmDl7XFiUcmPSTPW14WGSHT6/1u4pcTY2cjD0U7P\n bzAkA", "X-Developer-Key": "i=chleroy@kernel.org; a=openpgp;\n fpr=10FFE6F8B390DE17ACC2632368A92FEB01B8DD78", "Content-Transfer-Encoding": "8bit", "X-Spam-Status": "No, score=-1.2 required=5.0 tests=ARC_SIGNED,ARC_VALID,\n\tDKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DMARC_PASS,\n\tMAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=disabled\n\tversion=4.0.1", "X-Spam-Checker-Version": "SpamAssassin 4.0.1 (2024-03-25) on gandalf.ozlabs.org" }, "content": "copy_{to/from}_user() is a heavy function optimised for copy of large\nblocs of memory between user and kernel space.\n\nWhen the number of bytes to be copied is known at build time and small,\nusing scoped user access removes the burden of that optimisation.\n\nSigned-off-by: Christophe Leroy (CS GROUP) <chleroy@kernel.org>\n---\n include/linux/uaccess.h | 47 +++++++++++++++++++++++++++++++++++++++++\n 1 file changed, 47 insertions(+)", "diff": "diff --git a/include/linux/uaccess.h b/include/linux/uaccess.h\nindex 33b7d0f5f808..3ac544527af2 100644\n--- a/include/linux/uaccess.h\n+++ b/include/linux/uaccess.h\n@@ -50,6 +50,8 @@\n #define mask_user_address(src) (src)\n #endif\n \n+#define SMALL_COPY_USER\t\t64\n+\n /*\n * Architectures should provide two primitives (raw_copy_{to,from}_user())\n * and get rid of their private instances of copy_{to,from}_user() and\n@@ -191,6 +193,9 @@ _inline_copy_from_user(void *to, const void __user *from, unsigned long n)\n \treturn res;\n }\n \n+static __always_inline __must_check unsigned long\n+_small_copy_from_user(void *to, const void __user *from, unsigned long n);\n+\n extern __must_check unsigned long\n _copy_from_user(void *, const void __user *, unsigned long);\n \n@@ -207,6 +212,9 @@ _inline_copy_to_user(void __user *to, const void *from, unsigned long n)\n \treturn n;\n }\n \n+static __always_inline __must_check unsigned long\n+_small_copy_to_user(void __user *to, const void *from, unsigned long n);\n+\n extern __must_check unsigned long\n _copy_to_user(void __user *, const void *, unsigned long);\n \n@@ -215,6 +223,8 @@ copy_from_user_common(void *to, const void __user *from, unsigned long n, bool p\n {\n \tif (!check_copy_size(to, n, false))\n \t\treturn n;\n+\tif (!partial && __builtin_constant_p(n) && n <= SMALL_COPY_USER)\n+\t\treturn _small_copy_from_user(to, from, n);\n \tif (IS_ENABLED(ARCH_WANTS_NOINLINE_COPY_USER))\n \t\treturn _copy_from_user(to, from, n);\n \telse\n@@ -239,6 +249,8 @@ copy_to_user_common(void __user *to, const void *from, unsigned long n, bool par\n \tif (!check_copy_size(from, n, true))\n \t\treturn n;\n \n+\tif (!partial && __builtin_constant_p(n) && n <= SMALL_COPY_USER)\n+\t\treturn _small_copy_to_user(to, from, n);\n \tif (IS_ENABLED(ARCH_WANTS_NOINLINE_COPY_USER))\n \t\treturn _copy_to_user(to, from, n);\n \telse\n@@ -838,6 +850,41 @@ for (bool done = false; !done; done = true)\t\t\t\t\t\\\n #define scoped_user_rw_access(uptr, elbl)\t\t\t\t\\\n \tscoped_user_rw_access_size(uptr, sizeof(*(uptr)), elbl)\n \n+static __always_inline __must_check unsigned long\n+_small_copy_from_user(void *to, const void __user *from, unsigned long n)\n+{\n+\tmight_fault();\n+\tinstrument_copy_from_user_before(to, from, n);\n+\tscoped_user_read_access_size(from, n, failed) {\n+\t\t/*\n+\t\t * Ensure that bad access_ok() speculation will not lead\n+\t\t * to nasty side effects *after* the copy is finished:\n+\t\t */\n+\t\tif (!can_do_masked_user_access())\n+\t\t\tbarrier_nospec();\n+\t\tunsafe_copy_from_user(to, from, n, failed);\n+\t}\n+\tinstrument_copy_from_user_after(to, from, n, 0);\n+\treturn 0;\n+failed:\n+\tinstrument_copy_from_user_after(to, from, n, n);\n+\treturn n;\n+}\n+\n+static __always_inline __must_check unsigned long\n+_small_copy_to_user(void __user *to, const void *from, unsigned long n)\n+{\n+\tmight_fault();\n+\tif (should_fail_usercopy())\n+\t\treturn n;\n+\tinstrument_copy_to_user(to, from, n);\n+\tscoped_user_write_access_size(to, n, failed)\n+\t\tunsafe_copy_to_user(to, from, n, failed);\n+\treturn 0;\n+failed:\n+\treturn n;\n+}\n+\n /**\n * get_user_inline - Read user data inlined\n * @val:\tThe variable to store the value read from user memory\n", "prefixes": [ "RFC", "v1", "9/9" ] }