From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from lists.ozlabs.org (lists.ozlabs.org [112.213.38.117]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 22F2060B4C02 for ; Wed, 4 Nov 2026 19:37:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20260515 header.b=IGC4y00A Received: from boromir.ozlabs.org (localhost [127.0.0.1]) by lists.ozlabs.org (Postfix) with ESMTP id 4jKbM46HtTz2yh4; Thu, 05 Nov 2026 06:37:52 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; arc=none smtp.remote-ip="2600:3c0a:e001:78e:0:1991:8:25" ARC-Seal: i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1793821072; cv=none; b=a/MaPe2Jtnd+o9GfxGigJ8IUCe5Ak9NiPTjYpU39WzOQjQ/zxbZ4T6oFIfsyWDKvNMM9OU0NWePOWDN9QA81SemBNUYtYUpS5qvXBrTRmN8oYbbKoudohXPpquvxWCaa/I63t2+nFrCE9OhOD3gXspFuivPKtY4cQWYYlmXz1J5aOWQZkO9QmGsgbnhm+lCWi7Preu7WsDoL5OvZfunapP/MqRDABluIMaXrUNXSiodDqC6mDFvYMQh98DKaD5biFfEEcqv8a7dFPQ12iNVj0g4uazF801D/QJg6NEJGtanjs5Ai5oSIyG2MdfIXlPgeewaGTWBpcr3CbgHc9yEcdA== ARC-Message-Signature: i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1793821072; c=relaxed/relaxed; bh=JUeWoKePwtQbwIaIqH9pLOo2XgGktDed7c18k0485G4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Rfgp6mApDIQqutr6c+8iqIMBqWxq4mwPHNHHe8jf7uXnyIHWwyrWe7TeaaLKcJo5O5t7FSbvRvo8fqov/vt0+tSVdPhS7NQmsBOTtefaPIe0ibkr9AiS+ZeSpzJSl7XXQKKCCBqI+25A2UmgIALVyfqpYZ3LNJgnxo8Q9BtT4Uk/R8FGr0NFoJFrm3ao0xM3SW8avCNztDrSKYtvAEHh7VSPxSiq0VByJJnuQwWhUtLRJW532yUEveexR9qx8bXQS6t19GF5IZv3hllI/bDBjOIA5hIJ3AnbqBdvKUNjNqSMTcSLxwA9ePYiNMl97MtT1oIHy8yloHvvzRbHlPsjew== ARC-Authentication-Results: i=1; lists.ozlabs.org; dmarc=pass (p=quarantine dis=none) header.from=kernel.org; dkim=pass (2048-bit key; unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20260515 header.b=IGC4y00A; dkim-atps=neutral; spf=pass (client-ip=2600:3c0a:e001:78e:0:1991:8:25; helo=sea.source.kernel.org; envelope-from=brauner@kernel.org; receiver=lists.ozlabs.org) smtp.mailfrom=kernel.org Authentication-Results: lists.ozlabs.org; dmarc=pass (p=quarantine dis=none) header.from=kernel.org Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20260515 header.b=IGC4y00A; dkim-atps=neutral Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=kernel.org (client-ip=2600:3c0a:e001:78e:0:1991:8:25; helo=sea.source.kernel.org; envelope-from=brauner@kernel.org; receiver=lists.ozlabs.org) Received: from sea.source.kernel.org (sea.source.kernel.org [IPv6:2600:3c0a:e001:78e:0:1991:8:25]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4jKbM400Plz2ygp for ; Thu, 05 Nov 2026 06:37:51 +1100 (AEDT) Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id 0C9C741875; Wed, 4 Nov 2026 19:37:50 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 099291F00A02; Wed, 4 Nov 2026 19:37:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1793821069; bh=JUeWoKePwtQbwIaIqH9pLOo2XgGktDed7c18k0485G4=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=IGC4y00AETc18leOOoiGNlJjI14uptUXwL1lAk39h5bFLDzozGmXP95FjcQk1ai3d qHvAP6G/y59z8vruoDW5Y1VeWIGTKlWb3dS3NUkuiWuDTaM3k3qDR2DhBmAlAVa/1+ jkEC8ZsTOxq9kedteP9jaXc0YU1IKsX6hdj0bx6p0gNUMMcxE+pQQ/pK252kFB4GIS hTq5UB6PWymKT/rN8RRkkmh+m3ZSylCXxhaihAqxEz2EOYZbBvhmLGNZuz6vL29QGa VhgHDRMX/6Xwut4w4xO7r/ecc/JCMProqA/4Q644WrS17ADmUJzAwlPQ6KlQcm2EPd PESuNHlL70alw== From: Christian Brauner To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , Jann Horn , Josef Bacik , Chris Mason , Jeff Layton , NeilBrown , Eric Dumazet , Thomas Gleixner , Al Viro , Jonathan Corbet , Christoph Hellwig , Greg Kroah-Hartman , Joel Granados , Kees Cook , Jan Kara , Jan Kara , linux-kernel@vger.kernel.org, linux-nfs@vger.kernel.org, linux-acpi@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-s390@vger.kernel.org, linux-scsi@vger.kernel.org, linux-um@lists.infradead.org, linux-wireless@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, netdev@vger.kernel.org, ntfs3@lists.linux.dev, platform-driver-x86@vger.kernel.org, coreteam@netfilter.org, kexec@lists.infradead.org, linux-pci@vger.kernel.org, linux-sound@vger.kernel.org, netfilter-devel@vger.kernel.org, dri-devel@lists.freedesktop.org, ibm-acpi-devel@lists.sourceforge.net, jfs-discussion@lists.sourceforge.net, linux-alpha@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-cifs@vger.kernel.org, linux-fbdev@vger.kernel.org, linux-hwmon@vger.kernel.org, linux-mm@kvack.org, linux-sh@vger.kernel.org, linux-usb@vger.kernel.org, samba-technical@lists.samba.org, sparclinux@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-doc@vger.kernel.org, linux-serial@vger.kernel.org, linux-atm-general@lists.sourceforge.net, Takashi Iwai , linux-input@vger.kernel.org, linux-raid@vger.kernel.org, linux-ext4@vger.kernel.org, linux-modules@vger.kernel.org, linux-debuggers@vger.kernel.org, "Christian Brauner (Amutable)" , Chuck Lever Subject: [PATCH RESEND v2 08/23] powerpc/pseries: let procfs copy in writes Date: Wed, 4 Nov 2026 20:37:35 +0100 Message-ID: <20261104-work-procfs-arch-v2-8-2aeb952c9597@kernel.org> In-Reply-To: <20261104-work-procfs-arch-v2-0-2aeb952c9597@kernel.org> References: <20261104-work-procfs-arch-v2-0-2aeb952c9597@kernel.org> X-Mailing-List: linuxppc-dev@lists.ozlabs.org List-Id: List-Help: List-Owner: List-Post: List-Archive: , List-Subscribe: , , Precedence: list X-Archived-By: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" X-Mailer: b4 0.17-dev X-Developer-Signature: v=1; a=openpgp-sha256; l=5534; i=brauner@kernel.org; h=from:subject:message-id; bh=R72k2XaBDNkNWoVo7wOLN896i1gM+zYb0aj1A9vFVUU=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWS97vgWxbNt8wYWhvlH5RZK+OjxWGdnm7duUb1soNTor 3Rw5+3ijlIWBjEuBlkxRRaHdpNwueU8FZuNMjVg5rAygQxh4OIUgInkrmVk+MQl1Nv2KdDqueyX 08pFh+YVduR7t06b45nf4Rck/P9LDsN/n+PLK+08DBJ4p96cFfH166t5EqlFHC8yROYun/7XY7Y 9JwA= X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-18.8 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_PASS, SPF_PASS,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=4.0.1 X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on aws-us-west-2-korg-listserv-alma10-1 Implement ->proc_write_buf() for lparcfg, ofdt and the vcpudispatch files so procfs copies in what is written before it pins the entry, and parse what was written from that copy. ofdt takes as much as memdup_user_nul() could copy before since device tree updates can be large. Signed-off-by: Christian Brauner (Amutable) --- arch/powerpc/platforms/pseries/lpar.c | 14 ++++++-------- arch/powerpc/platforms/pseries/lparcfg.c | 7 +++---- arch/powerpc/platforms/pseries/reconfig.c | 22 ++++++++-------------- 3 files changed, 17 insertions(+), 26 deletions(-) diff --git a/arch/powerpc/platforms/pseries/lpar.c b/arch/powerpc/platforms/pseries/lpar.c index 48fe0be71a89..dfd027cc9047 100644 --- a/arch/powerpc/platforms/pseries/lpar.c +++ b/arch/powerpc/platforms/pseries/lpar.c @@ -498,7 +498,7 @@ static void dtl_worker_disable(unsigned long *time_limit) up_write(&dtl_access_lock); } -static ssize_t vcpudispatch_stats_write(struct file *file, const char __user *p, +static ssize_t vcpudispatch_stats_write(struct file *file, char *p, size_t count, loff_t *ppos) { unsigned long time_limit = jiffies + HZ; @@ -509,8 +509,7 @@ static ssize_t vcpudispatch_stats_write(struct file *file, const char __user *p, if (count > 15) return -EINVAL; - if (copy_from_user(buf, p, count)) - return -EFAULT; + memcpy(buf, p, count); buf[count] = 0; rc = kstrtoint(buf, 0, &cmd); @@ -586,11 +585,11 @@ static int vcpudispatch_stats_display(struct seq_file *p, void *v) static const struct proc_ops vcpudispatch_stats_proc_ops = { .proc_show = vcpudispatch_stats_display, - .proc_write = vcpudispatch_stats_write, + .proc_write_buf = vcpudispatch_stats_write, }; static ssize_t vcpudispatch_stats_freq_write(struct file *file, - const char __user *p, size_t count, loff_t *ppos) + char *p, size_t count, loff_t *ppos) { int rc, freq; char buf[16]; @@ -598,8 +597,7 @@ static ssize_t vcpudispatch_stats_freq_write(struct file *file, if (count > 15) return -EINVAL; - if (copy_from_user(buf, p, count)) - return -EFAULT; + memcpy(buf, p, count); buf[count] = 0; rc = kstrtoint(buf, 0, &freq); @@ -622,7 +620,7 @@ static int vcpudispatch_stats_freq_display(struct seq_file *p, void *v) static const struct proc_ops vcpudispatch_stats_freq_proc_ops = { .proc_show = vcpudispatch_stats_freq_display, - .proc_write = vcpudispatch_stats_freq_write, + .proc_write_buf = vcpudispatch_stats_freq_write, }; static int __init vcpudispatch_stats_procfs_init(void) diff --git a/arch/powerpc/platforms/pseries/lparcfg.c b/arch/powerpc/platforms/pseries/lparcfg.c index cb3d96efb225..bda3cac1552b 100644 --- a/arch/powerpc/platforms/pseries/lparcfg.c +++ b/arch/powerpc/platforms/pseries/lparcfg.c @@ -687,7 +687,7 @@ static ssize_t update_mpp(u64 *entitlement, u8 *weight) * This function should be invoked only on systems with * FW_FEATURE_SPLPAR. */ -static ssize_t lparcfg_write(struct file *file, const char __user * buf, +static ssize_t lparcfg_write(struct file *file, char *buf, size_t count, loff_t * off) { char kbuf[64]; @@ -702,8 +702,7 @@ static ssize_t lparcfg_write(struct file *file, const char __user * buf, if (count == 0 || count >= sizeof(kbuf)) return -EINVAL; - if (copy_from_user(kbuf, buf, count)) - return -EFAULT; + memcpy(kbuf, buf, count); kbuf[count] = '\0'; tmp = strchr(kbuf, '='); if (!tmp) @@ -798,7 +797,7 @@ static int lparcfg_data(struct seq_file *m, void *v) } static const struct proc_ops lparcfg_proc_ops = { - .proc_write = lparcfg_write, + .proc_write_buf = lparcfg_write, .proc_show = lparcfg_data, }; diff --git a/arch/powerpc/platforms/pseries/reconfig.c b/arch/powerpc/platforms/pseries/reconfig.c index b543afbc1efb..d74a0710ec74 100644 --- a/arch/powerpc/platforms/pseries/reconfig.c +++ b/arch/powerpc/platforms/pseries/reconfig.c @@ -349,7 +349,7 @@ static int do_update_property(char *buf, size_t bufsize) * ofdt_write - perform operations on the Open Firmware device tree * * @file: not used - * @buf: command and arguments + * @kbuf: command and arguments * @count: size of the command buffer * @off: not used * @@ -357,26 +357,19 @@ static int do_update_property(char *buf, size_t bufsize) * whole nodes along with their properties. Operations on individual * properties are not implemented (yet). */ -static ssize_t ofdt_write(struct file *file, const char __user *buf, size_t count, +static ssize_t ofdt_write(struct file *file, char *kbuf, size_t count, loff_t *off) { int rv; - char *kbuf; char *tmp; rv = security_locked_down(LOCKDOWN_DEVICE_TREE); if (rv) return rv; - kbuf = memdup_user_nul(buf, count); - if (IS_ERR(kbuf)) - return PTR_ERR(kbuf); - tmp = strchr(kbuf, ' '); - if (!tmp) { - rv = -EINVAL; - goto out; - } + if (!tmp) + return -EINVAL; *tmp = '\0'; tmp++; @@ -392,13 +385,14 @@ static ssize_t ofdt_write(struct file *file, const char __user *buf, size_t coun rv = do_update_property(tmp, count - (tmp - kbuf)); else rv = -EINVAL; -out: - kfree(kbuf); + return rv ? rv : count; } static const struct proc_ops ofdt_proc_ops = { - .proc_write = ofdt_write, + .proc_write_buf = ofdt_write, + /* what memdup_user_nul() could copy in */ + .proc_write_size = KMALLOC_MAX_SIZE - 1, .proc_lseek = noop_llseek, }; -- 2.53.0