summaryrefslogtreecommitdiffstats
path: root/samples/rust/rust_soc.rs
diff options
context:
space:
mode:
authorEduard Zingerman <eddyz87@gmail.com>2026-09-04 01:33:23 -0700
committerKumar Kartikeya Dwivedi <memxor@gmail.com>2026-09-04 12:58:04 +0200
commit836b2fe544a5e9b5ce116622cb36fba33838c6fd (patch)
tree95e38e4aaa0a6a78e373148b3d0af4aa2ab3d371 /samples/rust/rust_soc.rs
downloadlinux-stable-836b2fe544a5e9b5ce116622cb36fba33838c6fd.tar.gz
linux-stable-836b2fe544a5e9b5ce116622cb36fba33838c6fd.zip
selftests/bpf: Check that JMP32 pointer vs zero jumps are not predictedgrafted
Add jmp32_ptr_vs_zero_jne: the fall-through of the 32-bit compare, which the verifier used to skip, contains an out of bounds map value access, hence w/o the previous patch the program is accepted. See previous patch for detailed description. Reported-by: Nicholas Carlini <npc@anthropic.com> Suggested-by: Nicholas Carlini <npc@anthropic.com> Signed-off-by: Eduard Zingerman <eddyz87@gmail.com> Link: https://lore.kernel.org/bpf/20260904083325.2083493-6-eddyz87@gmail.com Signed-off-by: Kumar Kartikeya Dwivedi <memxor@gmail.com>
Diffstat (limited to 'samples/rust/rust_soc.rs')
-rw-r--r--samples/rust/rust_soc.rs78
1 files changed, 78 insertions, 0 deletions
diff --git a/samples/rust/rust_soc.rs b/samples/rust/rust_soc.rs
new file mode 100644
index 000000000..f5e5f2f9a
--- /dev/null
+++ b/samples/rust/rust_soc.rs
@@ -0,0 +1,78 @@
+// SPDX-License-Identifier: GPL-2.0
+
+//! Rust SoC Platform driver sample.
+
+use kernel::{
+ acpi,
+ device::Core,
+ of,
+ platform,
+ prelude::*,
+ soc,
+ str::CString,
+ sync::aref::ARef, //
+};
+use pin_init::pin_init_scope;
+
+#[pin_data]
+struct SampleSocDriver {
+ pdev: ARef<platform::Device>,
+ #[pin]
+ _dev_reg: soc::Registration,
+}
+
+kernel::of_device_table!(
+ OF_TABLE,
+ <SampleSocDriver as platform::Driver>::IdInfo,
+ [(of::DeviceId::new(c"test,rust-device"), ())]
+);
+
+kernel::acpi_device_table!(
+ ACPI_TABLE,
+ <SampleSocDriver as platform::Driver>::IdInfo,
+ [(acpi::DeviceId::new(c"LNUXBEEF"), ())]
+);
+
+impl platform::Driver for SampleSocDriver {
+ type IdInfo = ();
+ type Data<'bound> = Self;
+ const OF_ID_TABLE: Option<of::IdTable<Self::IdInfo>> = Some(&OF_TABLE);
+ const ACPI_ID_TABLE: Option<acpi::IdTable<Self::IdInfo>> = Some(&ACPI_TABLE);
+
+ fn probe<'bound>(
+ pdev: &'bound platform::Device<Core<'_>>,
+ _info: Option<&'bound Self::IdInfo>,
+ ) -> impl PinInit<Self, Error> + 'bound {
+ dev_dbg!(pdev, "Probe Rust SoC driver sample.\n");
+
+ let pdev = pdev.into();
+ pin_init_scope(move || {
+ let machine = CString::try_from(c"My cool ACME15 dev board")?;
+ let family = CString::try_from(c"ACME")?;
+ let revision = CString::try_from(c"1.2")?;
+ let serial_number = CString::try_from(c"12345")?;
+ let soc_id = CString::try_from(c"ACME15")?;
+
+ let attr = soc::Attributes {
+ machine: Some(machine),
+ family: Some(family),
+ revision: Some(revision),
+ serial_number: Some(serial_number),
+ soc_id: Some(soc_id),
+ };
+
+ Ok(try_pin_init!(SampleSocDriver {
+ pdev: pdev,
+ _dev_reg <- soc::Registration::new(attr),
+ }? Error))
+ })
+ }
+}
+
+kernel::module_platform_driver! {
+ type: SampleSocDriver,
+ name: "rust_soc",
+ authors: ["Matthew Maurer"],
+ description: "Rust SoC Driver",
+ license: "GPL",
+}