** Tags removed: verification-needed-lunar
** Tags added: verification-done-lunar

-- 
You received this bug notification because you are a member of Kernel
Packages, which is subscribed to linux in Ubuntu.
https://bugs.launchpad.net/bugs/2007654

Title:
  enable Rust support in the kernel

Status in linux package in Ubuntu:
  Fix Released
Status in linux source package in Lunar:
  Fix Released

Bug description:
  [Impact]

  Rust support has been merged starting with linux 6.1.

  This support allows to write external kernel modules using the Rust
  language. Modules written in this way are linked against the linux
  kernel and can be loaded/unloaded like any other .ko module.

  Main advantages of writing modules in Rust are:
   - memory safety:
     - no out of bounds accesses
     - no use after free
     - data race safety
   - strongly typed and statically typed
   - code extremely compact

  Roughly 70% of the security issues that the MSRC assigns a CVE to are memory 
safety issues:
   - Rust allows to write more secure and robust kernel code (reduce kernel 
CVEs)

  We should provide a Rust-enabled kernel so that people have the
  possibility to implement their own external kernel modules in Rust.

  [Test case]

  Build the following "hello world" test module:

  == hello_rust.rs ==

  // SPDX-License-Identifier: GPL-2.0

  //! Rust hello world example.

  use kernel::prelude::*;

  module! {
      type: HelloRust,
      name: "hello_rust",
      author: "Andrea Righi <andrea.ri...@canonical.com>",
      description: "Rust hello world example",
      license: "GPL",
  }

  struct HelloRust {
  }

  impl kernel::Module for HelloRust {
      fn init(_module: &'static ThisModule) -> Result<Self> {
          pr_info!("Hello from Rust\n");

          Ok(HelloRust { })
      }
  }

  impl Drop for HelloRust {
      fn drop(&mut self) {
          pr_info!("Goodbye from Rust\n");
      }
  }

  == Makefile ==

  NAME=hello_rust

  ifndef KERNELRELEASE
  ifndef KDIR
  KDIR:=/lib/modules/`uname -r`/build
  endif
  PWD := $(shell pwd)

  all:
   $(MAKE) -C $(KDIR) M=$(PWD) modules
  install:
   $(MAKE) -C $(KDIR) M=$(PWD) modules_install
  clean:
   rm -f *.o *.ko *.mod* .*.cmd *.d Module.symvers modules.order
   rm -rf .tmp_versions
  else
   obj-m := $(NAME).o
  endif

  [Fix]

  Building the Rust support in the kernel requires specific versions of the 
Rust compiler and bindgen utility, same to build the external modules in Rust):
     - rustc 1.62.0
     - bindgen 0.56.0
     - clang/llvm (already required by BPF)

  Archive should provide these versions (ideally with a version suffix
  to avoid conflicting with the stock versions, e.g., rustc-1.62 and
  bindgen-0.56).

  In addition to that the kernel needs some packaging adjustments to use
  these special toolchain binaries and some special (not yet upstream)
  patches that would allow to enable mandatory features required in our
  generic kernel, such as:

   UBUNTU: SAUCE: allows to enable Rust with modversions
   UBUNTU: SAUCE: modpost: support arbitrary symbol length in modversion
   UBUNTU: SAUCE: scripts: Exclude Rust CUs with pahole
   UBUNTU: SAUCE: rust: allow to use INIT_STACK_ALL_ZERO

  With all of the above we can enable CONFIG_RUST in the kernel and
  provide support to build external modules (.ko) using Rust.

  [Regression potential]

  We may see build regressions due to the inavailability of the proper
  toolchain versions. Moreover these toolchain dependencies need to be
  maintained, making sure to be always aligned with upstream
  requirements, when stable updates are applied to the kernel.

  Moreover, hwe kernels require special attention, since this feature
  won't be available in old releases (unless the proper toolchain
  requirements are met).

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/2007654/+subscriptions


-- 
Mailing list: https://launchpad.net/~kernel-packages
Post to     : kernel-packages@lists.launchpad.net
Unsubscribe : https://launchpad.net/~kernel-packages
More help   : https://help.launchpad.net/ListHelp

Reply via email to