From nobody Fri Oct 23 04:07:14 2026 Authentication-Results: smtp.subspace.kernel.org; arc=pass header.oldest-pass=0 smtp.remote-ip=165.173.180.11 ARC-Seal: i=2; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=pass; t=1792541240; b=qGMsJq4Uuz5JOvF2DgROlbuSFYPqwhDvBZbabN0cQJn2EE2RrNi4xLBLxXz3SBOaZJJh Ruf/FRFldnJ8o4XIepmpvxvfIHi0azZa9ikslpsAL5z4SDQUMj4Fe2ZVNYN/cH6mldkw3 9R98zyvTnPrTPNBu/YgZn5ewXH4LOgVGgVQ/sM3feghMhrpTbOVsHLi1caK3d0OdRl+HY jWXaW3zhKFkq/IEWfbRBnuiRyDCTMtYFlzbK1A6QLlwk/m7F6M7eouSCkdaFNxaQtNOuD 6FnBqzdY1+E23hW7+2mGbMURUNzDEstCRVgq2Wm51HMR4vH2kfHkWtwwuxn+VS0TNJQ== ARC-Message-Signature: i=2; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792541240; h=DMARC-Filter:DKIM-Signature:Received:From:Date:Subject:MIME-Version: Content-Type:Content-Transfer-Encoding:Message-Id:References: In-Reply-To:To:Cc:X-Mailer:X-Developer-Signature:X-Developer-Key; bh=2lDEC0DuiMPcWNbSfDdjSTczo+Sc4lF7TDFSyMLbmz4=; b=3bk8UGH8QbB3IU3A+oCGSP+h1U3Lqy+wUN07a+jQuY9hS1K7OtV6T2RpqOG5H5EiViA6 ypph8JLrwIorSLJ4eFTNkWxyxXkswyigACzxqyYcPMV2QlCZqmXwCAqNccdw+uX4t1AvQ j85WL8dIppADTylx2vN3oOtpkRwqDXQ+rdA63T3fKSnaK4trsInuKgcpQZJ9vDxe2q4y0 R5Pnksk3cA2WdNiAK7YlTx19E3m5/hCaKemC6POdHFvIn5oZnf9N/oSDxRwBue8Sy4DM8 KZ990NUry5SvCkeJhBoYv8a4nKB4JDTEqtE0CeAE6hz0Dj2TGpusTzi1LwvVgn5p9Dg== ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass header.d=collabora.com header.i=deborah.brouwer@collabora.com header.a=rsa-sha256 header.s=zohomail header.b=PxwNPOQ9; arc=pass header.oldest-pass=0 smtp.remote-ip=165.173.180.11 Received: from sender6-op-o11.zoho.com (sender6-op-o11.zoho.com [165.173.180.11]) (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 1D8AB606A31C; Wed, 21 Oct 2026 00:07:20 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 1D8AB606A31C Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key, unprotected) header.d=collabora.com header.i=deborah.brouwer@collabora.com header.a=rsa-sha256 header.s=zohomail header.b=PxwNPOQ9 ARC-Seal: i=1; a=rsa-sha256; t=1792541210; cv=none; d=zohomail.com; s=zohoarc; b=G+3U0M//Gf6SjnFjXackPZD+hwSfuehH2KmsRUyiCh92lzVjIK5Xj/x0Nk/pusKBaPQ7gZEz4eja1vzJejHvav/EZ2etAoIU1hqYCWNz+rYk0q2DhzoOaGH6nIaHB6Z/k8gXTvqGHK4ovMx3CfOanrx8Hu1UNVg63IJtZCN+eVw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1792541210; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:Subject:Subject:To:To:Message-Id:Reply-To; bh=2lDEC0DuiMPcWNbSfDdjSTczo+Sc4lF7TDFSyMLbmz4=; b=nAGiUTpdpdXzQpD80nr2YG89xBCptD0Y8Nd2g56JyhKKDRZrRmGDA5G1h5iD7B09ehfaBx7jmxEmqE0Gbii5gBY7fc87TMKR+k3hMq+t6jIBpKXi4Qj2nm4g/aUKEA1n54U2g0vuyXF82Q/0ZTH6ubzsa+dBxjW2g0YhwPqyFvI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=deborah.brouwer@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1792541210; s=zohomail; d=collabora.com; i=deborah.brouwer@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=2lDEC0DuiMPcWNbSfDdjSTczo+Sc4lF7TDFSyMLbmz4=; b=PxwNPOQ9hDOm3OBvHhHVu/ywj4V0vRnFCSs++tasDkr7UCS8B3EGOq4QzxrXrnPq m06cSk0Z1B/qBNBLVT5O1msEderWI5pf0yFBRpEPx8lBB5DFyKqlcOdgYV1ZjIMAn/l QkCc/tZs9aOgvkzEQBxo9yf1Pl0PXf0HrqKMC8l0= Received: by smtp.zohomail.com with SMTPS id 1792541208022378.16433192325917; Tue, 20 Oct 2026 17:06:48 -0700 (PDT) From: Deborah Brouwer Date: Tue, 20 Oct 2026 17:06:45 -0700 Subject: [PATCH v4 1/3] rust: uaccess: add UserSliceWriter::clear() X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20261020-b4-dev_query_fixes-v4-1-df66b4c98bc6@collabora.com> References: <20261020-b4-dev_query_fixes-v4-0-df66b4c98bc6@collabora.com> In-Reply-To: <20261020-b4-dev_query_fixes-v4-0-df66b4c98bc6@collabora.com> To: Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , Daniel Almeida , Tamir Duberstein , Alexandre Courbot , =?utf-8?q?Onur_=C3=96zkan?= , David Airlie , Simona Vetter Cc: rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Deborah Brouwer X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2481; i=deborah.brouwer@collabora.com; h=from:subject:message-id; bh=BifXMQ3wf5nytHVx4Vm26QkPbWTrCBV8j2ShsC9B2/4=; b=owGbwMvMwCVWuULzOU9c7WvG02pJDFk3mES3aNlFc1y+0Hzz79LKz/JqV7/t5no6yVrl69sNL dcXTqk27yhlYRDjYpAVU2Q5a2/UI1713kh3/v9mmDmsTCBDGLg4BWAiE7czMjS8aLv2tct3ysQ1 Emn3FqzeJ+Yao1Cyo0XN5nBGGPfDu+wM/+On/Dj7PShmoWfhblklT8lnpeZl/j4v+7nN17/f+dr iJwcA X-Developer-Key: i=deborah.brouwer@collabora.com; a=openpgp; fpr=CD3F328C177AEF322D9FFF8379A829E70C5E7DEB Add a method to zero the remaining bytes in a UserSliceWriter. If userspace provides a buffer that is larger than necessary, provide a method to zero out the remaining UserSliceWriter buffer. This avoids userspace consuming potentially uninitialized memory and/or mistaking it for data intentionally provided by the kernel. Use the #[inline] annotation to make this clear() method available for inlining outside of the kernel crate. Since clear_user() is architecturally defined and may be a macro or inline function, add a rust helper to make clear_user() callable from rust. Reviewed-by: Alice Ryhl Signed-off-by: Deborah Brouwer --- rust/helpers/uaccess.c | 6 ++++++ rust/kernel/uaccess.rs | 24 ++++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/rust/helpers/uaccess.c b/rust/helpers/uaccess.c index 6e59cc9c665c..e799d9ac9804 100644 --- a/rust/helpers/uaccess.c +++ b/rust/helpers/uaccess.c @@ -27,3 +27,9 @@ unsigned long rust_helper__copy_to_user(void __user *to, = const void *from, unsig return _inline_copy_to_user(to, from, n); } #endif + +__rust_helper unsigned long +rust_helper_clear_user(void __user *to, unsigned long n) +{ + return clear_user(to, n); +} diff --git a/rust/kernel/uaccess.rs b/rust/kernel/uaccess.rs index f1aecda7a90c..8e18285ec44b 100644 --- a/rust/kernel/uaccess.rs +++ b/rust/kernel/uaccess.rs @@ -638,6 +638,30 @@ pub fn write(&mut self, value: &T) -> Resu= lt { pub fn write_truncated(&mut self, value: &T) -> Result { self.write_slice_partial(value.as_bytes(), 0) } + + /// Zeros remaining bytes in the userspace buffer. + /// + /// Fails with [`EFAULT`] if the userspace memory cannot be cleared. + #[inline] + pub fn clear(&mut self) -> Result { + let len =3D self.length; + + if len =3D=3D 0 { + return Ok(()); + } + // SAFETY: `clear_user` checks the userspace address and range and= handles + // faults when accessing userspace memory + let res =3D unsafe { bindings::clear_user(self.ptr.as_mut_ptr(), l= en) }; + + if res !=3D 0 { + return Err(EFAULT); + } + + self.ptr =3D self.ptr.wrapping_byte_add(len); + self.length =3D 0; + + Ok(()) + } } =20 /// Reads a nul-terminated string into `dst` and returns the length. --=20 2.56.0 From nobody Fri Oct 23 04:07:14 2026 Authentication-Results: smtp.subspace.kernel.org; arc=pass header.oldest-pass=0 smtp.remote-ip=165.173.180.11 ARC-Seal: i=2; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=pass; t=1792541240; b=43GYa4hKeFqLh9m1n6xJvKIrT88umpsFOZXDZ33io2qBe46y7nWIVT0d/wDkXnFNUYWH 416p9bPsQ9bEQN4dWBpij4ky/I1ocZ1VLEpmH3QJQC/DAUhNi2G3aO7cpfihB7gI9Hu5s IDKTzBf3AcPs3+TYS7OsEsDJiU2XfilC4CdVsKiZIzUqr4NypaejHfGS2zXq7KlHEFxul StQ8FDmzSKIY1WJVl72ukFWCiSMDoPoYPk3KvMXHvprZoD/EFZgfDwbFD5/0eNH5bID7Z TktPS0UB+CFVBrWLeh4qbdKGFsq6b5pGuDafIHENesrQd1eI4+buwUm4nO+zo0r8DZA== ARC-Message-Signature: i=2; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792541240; h=DMARC-Filter:DKIM-Signature:Received:From:Date:Subject:MIME-Version: Content-Type:Content-Transfer-Encoding:Message-Id:References: In-Reply-To:To:Cc:X-Mailer:X-Developer-Signature:X-Developer-Key; bh=yKA+rjO6S2yRbNZMtjsewu159Akak1qQqcaEuzo5K58=; b=dvU19AmS+DxLIU1ICH/QRTCeYeWm/AuCZ/c02MUHcaI1Pz+U99sGJl+K9gdh2Xjgdl4A xZ6TcJSr4JD8alo4tuTIzLZX/dI7mhs0XklgOV0Gy3j1s+RVSTCo53j8uyARoTxZWKZn0 hy6lvjXzdtqnZMGLlZg+rdSuobbC8ubJP89MNmuaOq/uYFCZKEM687t6GdVBQjaAAdr08 MeAgPL7jhJBiDcXoMD9cWd9dv1HzIH4RL7a2l5hXlIMscSdt7iTvu7JVYPwbI5vXrGSuq el6sWPvOFkI9bqi/BaovjdXHr08N/kSeybNtsQbLxgwXad9vbBpxX1lTGN80ujVRwNQ== ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass header.d=collabora.com header.i=deborah.brouwer@collabora.com header.a=rsa-sha256 header.s=zohomail header.b=lQde1zTu; arc=pass header.oldest-pass=0 smtp.remote-ip=165.173.180.11 Received: from sender6-op-o11.zoho.com (sender6-op-o11.zoho.com [165.173.180.11]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 16548606A31B; Wed, 21 Oct 2026 00:07:19 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 16548606A31B Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key, unprotected) header.d=collabora.com header.i=deborah.brouwer@collabora.com header.a=rsa-sha256 header.s=zohomail header.b=lQde1zTu ARC-Seal: i=1; a=rsa-sha256; t=1792541210; cv=none; d=zohomail.com; s=zohoarc; b=KLwsshecwBIRiNUzvkmJZWS79qPETJGW3p7jZLP1MVUMHFBLsEzuundAiVP0YzMisaun0VHALpjSELxNJ3F0LZ/xr/E7DeeIozdyVAC6OUYr0lr22vR5Q1vnyn93PiPgCSZVTNe8o56ZXg1kW9td+NSd1Hfhz5Sqc0a7h/Cb2K8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1792541210; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:Subject:Subject:To:To:Message-Id:Reply-To; bh=yKA+rjO6S2yRbNZMtjsewu159Akak1qQqcaEuzo5K58=; b=hrFK28teCbN2oRro6CYfmvayNOhSwHbgRQAZ/e0PmvT0y3IPd+ZSnoYo5LBvIz3q53vXkHQW2zxvisidrGZ/G5OobO/XGKuji75LTZbmu6/cIGX7BhRgtGuUKUnqDcr05ph1GJmrh1qL8fktrySwI8rbq/f1KvTc5uv8JXfQ75A= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=deborah.brouwer@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1792541210; s=zohomail; d=collabora.com; i=deborah.brouwer@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=yKA+rjO6S2yRbNZMtjsewu159Akak1qQqcaEuzo5K58=; b=lQde1zTuHBY1gsZZb4ZWAawXFOBL7sVIk378pR7XUSMj7M29kQiw7KI6gJw2AMHe zkQqPe/JK8FKY/OKM9lCtVUWpHkZy7ycS4XyCdSdjnYL+R+2lHKEaBS7mrandheg5IN Mu085UYJdDmvU6alVm3oNqwS3nBoZTCxI666rkzQ= Received: by smtp.zohomail.com with SMTPS id 1792541208950353.81731289226013; Tue, 20 Oct 2026 17:06:48 -0700 (PDT) From: Deborah Brouwer Date: Tue, 20 Oct 2026 17:06:46 -0700 Subject: [PATCH v4 2/3] rust: uaccess: add method to get UserPtr from u64 X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20261020-b4-dev_query_fixes-v4-2-df66b4c98bc6@collabora.com> References: <20261020-b4-dev_query_fixes-v4-0-df66b4c98bc6@collabora.com> In-Reply-To: <20261020-b4-dev_query_fixes-v4-0-df66b4c98bc6@collabora.com> To: Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , Daniel Almeida , Tamir Duberstein , Alexandre Courbot , =?utf-8?q?Onur_=C3=96zkan?= , David Airlie , Simona Vetter Cc: rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Deborah Brouwer X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1403; i=deborah.brouwer@collabora.com; h=from:subject:message-id; bh=WNaLWF3sjYdXQjRj645udU5OHS/SnUHc+mDrPyN+V1M=; b=owGbwMvMwCVWuULzOU9c7WvG02pJDFk3mES/Rm15pjdFQOJ60F1vvlUZHzxd1dbOvb3Trrl+n VRwVvnujlIWBjEuBlkxRZaz9kY94lXvjXTn/2+GmcPKBDKEgYtTACbido2R4d/PzHsHZ7FEPFiV sEvh6xSVK9vuz03qM7F0W8lvzDpfoYqR4W69fdvnpSvSlvlXvlo0ebH+4VOl7+Y4HJ8oYsItfy3 pMDsA X-Developer-Key: i=deborah.brouwer@collabora.com; a=openpgp; fpr=CD3F328C177AEF322D9FFF8379A829E70C5E7DEB Currently a UserPtr can be created from a usize integer representing a userspace address. To create a UserPtr from a u64 integer, the u64 must be cast to usize. On 32-bit systems, this cast will discard the upper 32 bits of the address. Provide a new method to create a UserPtr from a u64 integer. This avoids the caller having to cast before creating a UserPtr and also clarifies that the truncation is intended. This is equivalent to the C-side macro u64_to_user_ptr() that provides typechecking and casting to a __user pointer. Signed-off-by: Deborah Brouwer Reviewed-by: Alice Ryhl --- rust/kernel/uaccess.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/rust/kernel/uaccess.rs b/rust/kernel/uaccess.rs index 8e18285ec44b..a6fd1af155b3 100644 --- a/rust/kernel/uaccess.rs +++ b/rust/kernel/uaccess.rs @@ -31,6 +31,15 @@ pub fn from_addr(addr: usize) -> Self { Self(addr as *mut c_void) } =20 + /// Create a `UserPtr` from a u64 userspace address. + /// + /// Deliberately truncate upper bits for 32-bit systems. + #[doc(alias =3D "u64_to_user_ptr")] + #[inline] + pub fn from_u64(addr: u64) -> Self { + Self::from_addr(addr as usize) + } + /// Create a `UserPtr` from a pointer representing the userspace addre= ss. #[inline] pub fn from_ptr(addr: *mut c_void) -> Self { --=20 2.56.0 From nobody Fri Oct 23 04:07:14 2026 Authentication-Results: smtp.subspace.kernel.org; arc=pass header.oldest-pass=0 smtp.remote-ip=165.173.182.11 ARC-Seal: i=2; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=pass; t=1792541249; b=2ZaIRsgOaQ0XgZF++R3fKL1C1cFHM42w5F9xAMNqwLK2nKSotAVLyeKOZF9n8nisa20u kPme5Ks/EH1dnrQWggRnszjYraeWbEZkkyoBCLGWbg+ar9Bthm08gntH1KapY3zPbILMS 7W8zZLyC+eNaqD4DIOtKP4OoDBEl60sJGuufYj6PkhIr7+DCPhUnIhl9Yz0v2Z7a72Cbr sOvYyvloHQmEnG99A+0XxS8QxrnKH8FFaRkxKNEqwLLdIIBzxDN5Tgr6mNidRe9X4G/o/ C9YTVI2PTkmwzzg1HFTZ23MAMeGiW8l59qOlOKbPvdSv+kvW82eoijrdDZ4sMlaeLBg== ARC-Message-Signature: i=2; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792541249; h=DMARC-Filter:DKIM-Signature:Received:From:Date:Subject:MIME-Version: Content-Type:Content-Transfer-Encoding:Message-Id:References: In-Reply-To:To:Cc:X-Mailer:X-Developer-Signature:X-Developer-Key; bh=1zUR5GEK6BA5S7bCITK+tOcim+IiL0R8T8uB3uRypFw=; b=CStFYSXEDWtY2rU8ZRk9Wez+YiXHDFiyAZfD57cRekeSE791XZH4jDGd2Bn04YH/bQwd sdqbdGLeH0iKEZAg+oeB/LTbo7upAX4gCydFbkYxGs+8SSU7m7i5NV1EJCi6IuGdHYaJU ZnQkEtQ+xld+STJXGS5UvaKW2zqV0hinITiwlqgnqobbW9c97Dv4E+0wClIkZCQg9Y+y3 5Pi6cTG9CjvVxE93ziWwi+/yJgmW0oGooLJfLY+BJQu5iA5KDPtyJToIM8860Dx17TeNP evz+8hgIJDMKFjrl11mPnwrRAW+iLMoKgs4/HA+7ZU8uOnwGNwkBxwbMfyQbKTh/P1g== ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass header.d=collabora.com header.i=deborah.brouwer@collabora.com header.a=rsa-sha256 header.s=zohomail header.b=DBJaNnN0; arc=pass header.oldest-pass=0 smtp.remote-ip=165.173.182.11 Received: from sender5-op-o11.zoho.com (sender5-op-o11.zoho.com [165.173.182.11]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 15E25606A321; Wed, 21 Oct 2026 00:07:28 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 15E25606A321 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key, unprotected) header.d=collabora.com header.i=deborah.brouwer@collabora.com header.a=rsa-sha256 header.s=zohomail header.b=DBJaNnN0 ARC-Seal: i=1; a=rsa-sha256; t=1792541212; cv=none; d=zohomail.com; s=zohoarc; b=PhBeSy07WAmNjWA4OynPKIL0BawTBtdmvPV3KWlfcOKUzuYA7NJDfz4B5NiHvQTasN8LyHrdsIYsEKdDdFoHFk/Na3DT9Y+OxGSfZ/Ga+DfLJkpUHZ6U9ChmutNMye8Ma79RydzrC7txtpSjwpkPLErtcBRCLKa1V2iACGZC53Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1792541212; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:Subject:Subject:To:To:Message-Id:Reply-To; bh=1zUR5GEK6BA5S7bCITK+tOcim+IiL0R8T8uB3uRypFw=; b=ekfzL4yyN6JVoAJX5jHHmeryjsljDmmFa59sgLsJvzoBtggl+Rat/n5Vpuj4TALUv2HJQe95R6CChLdCnpiRdeii2DHfruOeyjntD047NssLNnGxACrA1nz7nw96N6BoEQi+c+hOoC368NAgFNJGtqsuQddnV+y6uNK8ptVgr08= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=deborah.brouwer@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1792541212; s=zohomail; d=collabora.com; i=deborah.brouwer@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=1zUR5GEK6BA5S7bCITK+tOcim+IiL0R8T8uB3uRypFw=; b=DBJaNnN0xwPmmWzktPGNzvjxbQglRv47/8iJ7FWqpBQOw4gHUmy7gIbQJhUU03lk RonFSD4Z1vcxW+YuMkqs2rphAy6U49uknah/CSOTlxyLW/EcTW2B29LRF+y9T/QRaTD jT9QnfSkQJIqo+ysgWF67Po7XGdSa7ilClojNbAE= Received: by smtp.zohomail.com with SMTPS id 179254121012077.48844824785681; Tue, 20 Oct 2026 17:06:50 -0700 (PDT) From: Deborah Brouwer Date: Tue, 20 Oct 2026 17:06:47 -0700 Subject: [PATCH v4 3/3] drm/tyr: allow userspace buffers to be mismatched X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20261020-b4-dev_query_fixes-v4-3-df66b4c98bc6@collabora.com> References: <20261020-b4-dev_query_fixes-v4-0-df66b4c98bc6@collabora.com> In-Reply-To: <20261020-b4-dev_query_fixes-v4-0-df66b4c98bc6@collabora.com> To: Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , Daniel Almeida , Tamir Duberstein , Alexandre Courbot , =?utf-8?q?Onur_=C3=96zkan?= , David Airlie , Simona Vetter Cc: rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Deborah Brouwer X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=3093; i=deborah.brouwer@collabora.com; h=from:subject:message-id; bh=cw/gH4gJ7P+GmpjRc8el+UvRXUZRj4b9UKEbdATligI=; b=owGbwMvMwCVWuULzOU9c7WvG02pJDFk3mERnajzZ/E6LRUzhsr5DqkaYW2vLl7d7Vn3/3aBVr 7BbRTSoo5SFQYyLQVZMkeWsvVGPeNV7I935/5th5rAygQxh4OIUgImkBzMyfHR5s5GXZes+8dNe O948t0+dFbpNuejaheo73FVFlmVPtjAyHN3KwRSxYbPw8dUPxX7zFzBLdOZqBqceXNzKf+InV6E JGwA= X-Developer-Key: i=deborah.brouwer@collabora.com; a=openpgp; fpr=CD3F328C177AEF322D9FFF8379A829E70C5E7DEB Allow userspace to provide a buffer that is smaller or larger than the object that the kernel expects to write into it. Set a minimum buffer size to match those in PANTHOR_UOBJ_MIN_SIZE. If userspace provides at least the minimum buffer size, then simply write until the buffer is full. If userspace provides a larger buffer than necessary, then zero out the remaining buffer. This ensures UAPI compatibility with Panthor. Signed-off-by: Deborah Brouwer Reviewed-by: Alice Ryhl --- drivers/gpu/drm/tyr/file.rs | 49 +++++++++++++++++++++++++++++++++++++----= ---- 1 file changed, 41 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/tyr/file.rs b/drivers/gpu/drm/tyr/file.rs index ceadde976502..bf66238ea4c6 100644 --- a/drivers/gpu/drm/tyr/file.rs +++ b/drivers/gpu/drm/tyr/file.rs @@ -1,14 +1,18 @@ // SPDX-License-Identifier: GPL-2.0 or MIT =20 +use core::mem::offset_of; + use kernel::{ drm::{ self, Registered, // }, + num::casts::FromSafeCast, prelude::*, uaccess::UserSlice, uapi, // }; +use zerocopy::Immutable; =20 use crate::driver::{ TyrDrmDevice, @@ -16,6 +20,37 @@ TyrDrmRegistrationData, // }; =20 +trait UobjMinSize { + fn min_size(&self) -> usize; +} + +impl UobjMinSize for uapi::drm_panthor_gpu_info { + fn min_size(&self) -> usize { + offset_of!(Self, tiler_present) + size_of_val(&self.tiler_present) + } +} + +// If the user buffer is at least the minimum required size, then +// copy as much of the kernel object as will fit into the user buffer. +// Don't fail if the user buffer is smaller than the kernel object. +// If the user buffer is bigger than needed, zero out the remainder. +fn set_uobj( + usr_dst: u64, + size: u32, + min_size: usize, + src_obj: &T, +) -> Result { + let size =3D usize::from_safe_cast(size); + if size < min_size { + return Err(EINVAL); + } + + let mut writer =3D UserSlice::new(UserPtr::from_u64(usr_dst), size).wr= iter(); + writer.write_slice_partial(src_obj.as_bytes(), 0)?; + writer.clear()?; + Ok(()) +} + #[pin_data] pub(crate) struct TyrDrmFileData {} =20 @@ -48,14 +83,12 @@ pub(crate) fn dev_query( } else { match devquery.type_ { uapi::drm_panthor_dev_query_type_DRM_PANTHOR_DEV_QUERY_GPU= _INFO =3D> { - let mut writer =3D UserSlice::new( - UserPtr::from_addr(devquery.pointer as usize), - devquery.size as usize, - ) - .writer(); - - writer.write_slice(reg_data.gpu_info.as_bytes())?; - + set_uobj( + devquery.pointer, + devquery.size, + reg_data.gpu_info.min_size(), + ®_data.gpu_info, + )?; Ok(0) } _ =3D> Err(EINVAL), --=20 2.56.0