From nobody Thu Apr 2 14:07:59 2026 Received: from mail-lf1-f51.google.com (mail-lf1-f51.google.com [209.85.167.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B839F21ADB7 for ; Sat, 28 Mar 2026 15:21:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774711312; cv=none; b=L3JOztq2QHquDxT6jwsswGXoaFe9eGQvPtE0edgIDIAl8WsiGGPoLWnqBUseHkeenDZY/6GpuAYUzcvFfpYmSE+mYDPfrGZTVsZyfkoWF7DLBzSQ1gYnDR0A763TbCqA89MsAFB7CuiHHnPdo2J9ivIye+SJsVmFCu9q2VrjxTg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774711312; c=relaxed/simple; bh=UUp6HpiqnhyGzgFfoW66fRufCkMQ007KgA1gYRPuMCI=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=PCAfVorHn0Ebts0FeYsTm+ZVXpB4elZF97J/4motztk+jWbrK+yOWe4NJWYvrw3gaGwTSFW4fMZNWRXI3Rrt+ifJxCcsFS52M6CSkg+t7PCNIdfkzhx3NIcjnamhQVS1/ewjyX3SEgY2I2I485bNvJntEh1SrTq+6Pi5rirLylY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=LA/2K7Rj; arc=none smtp.client-ip=209.85.167.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="LA/2K7Rj" Received: by mail-lf1-f51.google.com with SMTP id 2adb3069b0e04-5a27a2fc113so2748877e87.1 for ; Sat, 28 Mar 2026 08:21:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774711309; x=1775316109; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=eJ92tsR8jP1KCH0j1udmYpZfa186JNZsN5/B/7c+PMA=; b=LA/2K7Rj8ubKdpDoqqFaVq5Y2w4UtSQV0nfdt9Tmgl8YEMsyf/fFrh0alnR7FEgEgV qFAPiZsDR0M8AlXitQLsTxoLkx4Bu/2LM5BssOnL2eVAimB6n8+e7ww2jXI64o2R1ATe WmJ3KkuH/yUkqlLYfDuSBBCi79HPTpEFjGz0hDpidHcbQXU21x0evoXAT/0lVCwkg/Yu qrKpm0hmy2ig1finf9EINcIy3mPQzG9GkJXHBQwOxkYoiMGmAsNsQPiDhRidglPxIk0B z9dkR5QCda8RIdXXVDtQvcnZzQn1J6VGEAgORcnx1F2ol82JPPfhZwgdgIbbWED1ubz9 EUVw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774711309; x=1775316109; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=eJ92tsR8jP1KCH0j1udmYpZfa186JNZsN5/B/7c+PMA=; b=nALDZpMr+t7Ae7kcw2ztoVvZGGkLgqY7aJIEfAI4a/kZtFi/MJcG1rxRDixlkUbRfZ prRMhdqng7FtYlvewY/lPkIQXn8ds1wW8Mazdr4fK469IcoVWNbNCRRqWIgyt3UuxtFt QxCjXrEGWsw8uEOxRR63a3qL2LVbCFlTlQcxm/7UdS9/HqoUDqcQJGC6guJx6dnoRsJj 74QWjHXvNlvlkyw+SlW7XseuVvocjaRwMzEZ0F2/5INpzGMOSChUIiIDwD5wtn7eU/qp hKB1+bfNRnWjD+acffepB+0kMdErAsPaNoPEbtSaNRqMttJffKU1nbRmEJzLDEv8Dlog Y8Jg== X-Forwarded-Encrypted: i=1; AJvYcCXbP5t9bNcQw1cUZqLhFim5BmWk25TfRpXVIWqNyu6K/qeJZGQoKTKvr50TJT0sLfp3wGf0QxdXny+Jz24=@vger.kernel.org X-Gm-Message-State: AOJu0YztulplVk3ZUC1mdH81BLRzwtaUYvTFRH+TRji/RdYPUF5/4qRB wLloeRRcjL+7UXL5v6cZM+nFnCceMYpzBi+MK5nbykqcIMiP/PDiXD5ffDK8CTw= X-Gm-Gg: ATEYQzzYwcIoS6uDg3f+J5hufTCBBJEWEX9Ztk6MMdcu/Ack3GbinUHOuOpAsZchNxp yFkYfoVQQ/1CLtvRqSi6zdEPZ4f2HTRLSTgyCLgLSZhaa2OOfSGZLmhuYGChp9QOJRHro1fIphS SwK+GtpCTeEb5b2cvYVNumnc+iA0x/a6uWz+p9CoGc/TG2Jq0jQVbXNMhyAcL4Lm0/XfWwzVBpL 8j6BJuF2QoMxlAoW6Z1n28wn6LtIlCfqsRgUpRSIsHMccHUfnZBqarui9xJPyLQZCm8D1WJM/Fa aaFs0mBGRald8ykdvPca3GBd7ZY/E2jYbUcZGZ3LmUOQTY9QgGI12ywCTHfwZ2VQxhlPdJEDZc5 yDr3l4gEzcghRGYBBDcA3ODAX00mymNa16ZyyV4p0jtpa0fOkFQBVUQvlOFZLSagE2LQnkkC9D1 b9rjI9S4a9Xev4d+dN387QrorOJjo= X-Received: by 2002:a05:600c:83c4:b0:47e:e076:c7a5 with SMTP id 5b1f17b1804b1-48727d87b56mr93791335e9.11.1774698050877; Sat, 28 Mar 2026 04:40:50 -0700 (PDT) Received: from panzer.local ([188.246.34.248]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4872716799dsm33619125e9.25.2026.03.28.04.40.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 28 Mar 2026 04:40:50 -0700 (PDT) From: Mirko Adzic To: adzicmirko97@gmail.com, ojeda@kernel.org, lgirdwood@gmail.com, broonie@kernel.org, daniel.almeida@collabora.com, khali@linux-fr.org Cc: boqun@kernel.org, gary@garyguo.net, bjorn3_gh@protonmail.com, lossin@kernel.org, a.hindborg@kernel.org, aliceryhl@google.com, tmgross@umich.edu, dakr@kernel.org, tamird@kernel.org, alistair.francis@wdc.com, acourbot@nvidia.com, work@onurozkan.dev, rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH] rust: error: clarify that `from_err_ptr` can return `Ok(NULL)` Date: Sat, 28 Mar 2026 12:39:28 +0100 Message-ID: <20260328114005.125617-1-adzicmirko97@gmail.com> X-Mailer: git-send-email 2.53.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Improve the doc comment of `from_err_ptr` by explicitly stating that it will return `Ok(NULL)` when passed a null pointer, as it isn't an error value. Add a doctest case that tests the behavior described above, as well as other scenarios (non-null/non-error pointer, error value). Suggested-by: Miguel Ojeda Link: https://lore.kernel.org/rust-for-linux/20260322193830.89324-1-ojeda@k= ernel.org/ Link: https://github.com/Rust-for-Linux/linux/issues/1231 Signed-off-by: Mirko Adzic --- rust/kernel/error.rs | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/rust/kernel/error.rs b/rust/kernel/error.rs index 935787c2a91c..9a4388c74f43 100644 --- a/rust/kernel/error.rs +++ b/rust/kernel/error.rs @@ -452,6 +452,9 @@ pub fn to_result(err: crate::ffi::c_int) -> Result { /// for errors. This function performs the check and converts the "error p= ointer" /// to a normal pointer in an idiomatic fashion. /// +/// Note that a `NULL` pointer is not considered an error pointer, and is = returned +/// as-is, wrapped in `Ok`. +/// /// # Examples /// /// ```ignore @@ -466,6 +469,41 @@ pub fn to_result(err: crate::ffi::c_int) -> Result { /// from_err_ptr(unsafe { bindings::devm_platform_ioremap_resource(pde= v.to_ptr(), index) }) /// } /// ``` +/// +/// ``` +/// # use kernel::error::from_err_ptr; +/// # mod bindings { +/// # use kernel::prelude::*; +/// # pub(super) unsafe fn einval_err_ptr() -> *mut kernel::ffi::c_voi= d { +/// # let einval =3D -(kernel::bindings::EINVAL as isize); +/// # // SAFETY: `einval` is a valid error. +/// # unsafe { kernel::bindings::ERR_PTR(einval) } +/// # } +/// # pub(super) unsafe fn null_ptr() -> *mut kernel::ffi::c_void { +/// # core::ptr::null_mut() +/// # } +/// # pub(super) unsafe fn non_null_ptr() -> *mut kernel::ffi::c_void { +/// # 0x1234 as *mut kernel::ffi::c_void +/// # } +/// # } +/// fn einval_err_ptr() { +/// // SAFETY: ... +/// let result =3D from_err_ptr(unsafe { bindings::einval_err_ptr() }); +/// assert_eq!(result, Err(EINVAL)); +/// } +/// +/// fn null_ptr() { +/// // SAFETY: ... +/// let result =3D from_err_ptr(unsafe { bindings::null_ptr() }); +/// assert_eq!(result, Ok(core::ptr::null_mut())); +/// } +/// +/// fn non_null_ptr() { +/// // SAFETY: ... +/// let result =3D from_err_ptr(unsafe { bindings::non_null_ptr() }); +/// assert_eq!(result, Ok(0x1234 as *mut kernel::ffi::c_void)); +/// } +/// ``` pub fn from_err_ptr(ptr: *mut T) -> Result<*mut T> { // CAST: Casting a pointer to `*const crate::ffi::c_void` is always va= lid. let const_ptr: *const crate::ffi::c_void =3D ptr.cast(); --=20 2.53.0