From: Danilo Krummrich <dakr@kernel.org>
To: Igor Korotin <igor.korotin.linux@gmail.com>
Cc: "Rafael J . Wysocki" <rafael@kernel.org>,
"Alex Gaynor" <alex.gaynor@gmail.com>,
"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
"Miguel Ojeda" <ojeda@kernel.org>,
"Rob Herring" <robh@kernel.org>,
"Saravana Kannan" <saravanak@google.com>,
"Alex Hung" <alex.hung@amd.com>,
"Andrew Morton" <akpm@linux-foundation.org>,
"Jakub Kicinski" <kuba@kernel.org>,
"Jonathan Cameron" <Jonathan.Cameron@huawei.com>,
"Krzysztof Kozlowski" <krzysztof.kozlowski@linaro.org>,
"Mauro Carvalho Chehab" <mchehab+huawei@kernel.org>,
"Remo Senekowitsch" <remo@buenzli.dev>,
"Tamir Duberstein" <tamird@gmail.com>,
"Viresh Kumar" <viresh.kumar@linaro.org>,
"Wedson Almeida Filho" <wedsonaf@gmail.com>,
"Xiangfei Ding" <dingxiangfei2009@gmail.com>,
devicetree@vger.kernel.org, linux-acpi@vger.kernel.org,
linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org,
"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
"Alice Ryhl" <aliceryhl@google.com>,
"Andreas Hindborg" <a.hindborg@kernel.org>,
"Benno Lossin" <lossin@kernel.org>,
"Boqun Feng" <boqun.feng@gmail.com>,
"Gary Guo" <gary@garyguo.net>, "Len Brown" <lenb@kernel.org>,
"Trevor Gross" <tmgross@umich.edu>
Subject: Re: [PATCH v8 4/9] rust: acpi: add `acpi::DeviceId` abstraction
Date: Thu, 26 Jun 2025 20:28:05 +0200 [thread overview]
Message-ID: <aF2RNVJVIHyKuead@cassiopeiae> (raw)
In-Reply-To: <31804bbf-1a0b-4312-8db6-532a008528a2@gmail.com>
On Thu, Jun 26, 2025 at 06:40:06PM +0100, Igor Korotin wrote:
>
>
> On 6/26/25 16:25, Danilo Krummrich wrote:
> > On 6/20/25 5:24 PM, Igor Korotin wrote:
> >> +impl DeviceId {
> >> + const ACPI_ID_LEN: usize = 16;
> >> +
> >> + /// Create a new device id from an ACPI 'id' string.
> >> + pub const fn new<const N: usize>(id: &[u8; N]) -> Self {
> >
> > Didn't notice before, but why was this silently changed from &CStr to
> > &[u8; N]
> > from v6 to v7?
> >
> >> + build_assert!(N <= Self::ACPI_ID_LEN, "ID exceeds 16 bytes");
> >> + // Replace with `bindings::acpi_device_id::default()` once
> >> stabilized for `const`.
> >> + // SAFETY: FFI type is valid to be zero-initialized.
> >> + let mut acpi: bindings::acpi_device_id = unsafe
> >> { core::mem::zeroed() };
> >> + let mut i = 0;
> >> + while i < N {
> >> + acpi.id[i] = id[i];
> >> + i += 1;
> >> + }
> >> +
> >> + Self(acpi)
> >> + }
> >> +}
>
> In v6 I was asked to change assert! (runtime) to build_assert! (build time)
> It was as follows:
>
> > + pub const fn new(id: &'static CStr) -> Self {
> > + assert!(id.len() <= Self::ACPI_ID_LEN, "ID exceeds 16 bytes");
>
> but id.len() breaks const context and so build_assert! triggers
> assertion.
It does indeed, but I'm not sure why it does...
> If I needed to explicitly describe change from CStr to
> [u8;20], then it's my bad.
Yes, that's usually better. Otherwise reviewers might skip the changed part. In
this case I think it actually introduced a bug:
Checking for N <= Self::ACPI_ID_LEN it can happen that acpi_device_id::id is not
NULL terminated anymore, whereas before this was ensured by
CStr::as_bytes_with_nul(). See also [1].
I think we can easily fix this by just checking N < Self::ACPI_ID_LEN.
However, I'd still like to check why build_assert!() does not work with
CStr::len() in this case first.
[1] https://elixir.bootlin.com/linux/v6.15.3/source/drivers/acpi/bus.c#L899
next prev parent reply other threads:[~2025-06-26 18:28 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-20 15:09 [PATCH v8 0/9] rust: Add ACPI match table support for Rust drivers Igor Korotin
2025-06-20 15:15 ` [PATCH v8 1/9] rust: device: implement FwNode::is_of_node() Igor Korotin
2025-06-20 22:39 ` Danilo Krummrich
2025-06-24 20:46 ` Danilo Krummrich
2025-06-25 14:08 ` Rob Herring
2025-06-20 15:18 ` [PATCH v8 2/9] samples: rust: platform: don't call as_ref() repeatedly Igor Korotin
2025-06-21 3:28 ` Dirk Behme
2025-06-20 15:21 ` [PATCH v8 3/9] samples: rust: platform: conditionally call Self::properties_parse() Igor Korotin
2025-06-20 15:24 ` [PATCH v8 4/9] rust: acpi: add `acpi::DeviceId` abstraction Igor Korotin
2025-06-20 22:06 ` Danilo Krummrich
2025-06-23 9:03 ` Igor Korotin
2025-06-24 17:56 ` Rafael J. Wysocki
2025-06-26 15:25 ` Danilo Krummrich
2025-06-26 17:40 ` Igor Korotin
2025-06-26 18:28 ` Danilo Krummrich [this message]
2025-06-20 15:36 ` [PATCH v8 5/9] rust: driver: Consolidate `Adapter::of_id_info` methods using `#[cfg]` Igor Korotin
2025-06-20 15:39 ` [PATCH v8 6/9] rust: driver: Add ACPI id table support to Adapter trait Igor Korotin
2025-06-20 15:41 ` [PATCH v8 7/9] rust: platform: Set `OF_ID_TABLE` default to `None` in `Driver` trait Igor Korotin
2025-06-20 15:43 ` [PATCH v8 8/9] rust: platform: Add ACPI match table support to " Igor Korotin
2025-06-20 15:45 ` [PATCH v8 9/9] samples: rust: add ACPI match table example to platform driver Igor Korotin
2025-06-26 17:33 ` [PATCH v1 0/4] rust: Add basic I2C driver abstractions Igor Korotin
2025-06-26 17:47 ` Igor Korotin
2025-06-26 22:31 ` [PATCH v8 0/9] rust: Add ACPI match table support for Rust drivers Danilo Krummrich
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aF2RNVJVIHyKuead@cassiopeiae \
--to=dakr@kernel.org \
--cc=Jonathan.Cameron@huawei.com \
--cc=a.hindborg@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=alex.gaynor@gmail.com \
--cc=alex.hung@amd.com \
--cc=aliceryhl@google.com \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun.feng@gmail.com \
--cc=devicetree@vger.kernel.org \
--cc=dingxiangfei2009@gmail.com \
--cc=gary@garyguo.net \
--cc=gregkh@linuxfoundation.org \
--cc=igor.korotin.linux@gmail.com \
--cc=krzysztof.kozlowski@linaro.org \
--cc=kuba@kernel.org \
--cc=lenb@kernel.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lossin@kernel.org \
--cc=mchehab+huawei@kernel.org \
--cc=ojeda@kernel.org \
--cc=rafael@kernel.org \
--cc=remo@buenzli.dev \
--cc=robh@kernel.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=saravanak@google.com \
--cc=tamird@gmail.com \
--cc=tmgross@umich.edu \
--cc=viresh.kumar@linaro.org \
--cc=wedsonaf@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.