lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20240924221023.197610-1-ojeda@kernel.org>
Date: Wed, 25 Sep 2024 00:10:23 +0200
From: Miguel Ojeda <ojeda@...nel.org>
To: Linus Torvalds <torvalds@...ux-foundation.org>
Cc: Miguel Ojeda <ojeda@...nel.org>,
	Wedson Almeida Filho <wedsonaf@...il.com>,
	Alex Gaynor <alex.gaynor@...il.com>,
	Boqun Feng <boqun.feng@...il.com>,
	Gary Guo <gary@...yguo.net>,
	Björn Roy Baron <bjorn3_gh@...tonmail.com>,
	Benno Lossin <benno.lossin@...ton.me>,
	Andreas Hindborg <a.hindborg@...nel.org>,
	Alice Ryhl <aliceryhl@...gle.com>,
	Trevor Gross <tmgross@...ch.edu>,
	rust-for-linux@...r.kernel.org,
	linux-kernel@...r.kernel.org
Subject: [GIT PULL] Rust for 6.12

Hi Linus,

This is the next round of the Rust support.

Quite late, but all the commits have been in linux-next for at least a
week (most have been for a few weeks).

This PR is a bit more involved than the usual ones -- the relevant
maintainers were OK with us carrying the patches since there were a few
interdependencies.

Three simple conflicts expected. Please note that akpm and I carried
the same patch ("kasan: simplify and clarify Makefile").

Regarding Rust-related things: you already merged the QR code panic
screen via DRM, the Applied Micro QT2025 PHY driver (with a new `sizes`
module) via netdev, a `k{v,}realloc()` patch via mm and two selftest
config fixes. You have also got a firmware code doc fix via asoc.

Please pull for v6.12 -- thanks!

Cheers,
Miguel

The following changes since commit 47ac09b91befbb6a235ab620c32af719f8208399:

  Linux 6.11-rc4 (2024-08-18 13:17:27 -0700)

are available in the Git repository at:

  https://github.com/Rust-for-Linux/linux.git tags/rust-6.12

for you to fetch changes up to a2f11547052001bd448ccec81dd1e68409078fbb:

  kasan: rust: Add KASAN smoke test via UAF (2024-09-16 18:04:37 +0200)

----------------------------------------------------------------
Rust changes for v6.12

Toolchain and infrastructure:

 - Support 'MITIGATION_{RETHUNK,RETPOLINE,SLS}' (which cleans up objtool
   warnings), teach objtool about 'noreturn' Rust symbols and mimic
   '___ADDRESSABLE()' for 'module_{init,exit}'. With that, we should be
   objtool-warning-free, so enable it to run for all Rust object files.

 - KASAN (no 'SW_TAGS'), KCFI and shadow call sanitizer support.

 - Support 'RUSTC_VERSION', including re-config and re-build on change.

 - Split helpers file into several files in a folder, to avoid conflicts
   in it. Eventually those files will be moved to the right places with
   the new build system. In addition, remove the need to manually export
   the symbols defined there, reusing existing machinery for that.

 - Relax restriction on configurations with Rust + GCC plugins to just
   the RANDSTRUCT plugin.

'kernel' crate:

 - New 'list' module: doubly-linked linked list for use with reference
   counted values, which is heavily used by the upcoming Rust Binder.
   This includes 'ListArc' (a wrapper around 'Arc' that is guaranteed
   unique for the given ID), 'AtomicTracker' (tracks whether a 'ListArc'
   exists using an atomic), 'ListLinks' (the prev/next pointers for an
   item in a linked list), 'List' (the linked list itself), 'Iter' (an
   iterator over a 'List'), 'Cursor' (a cursor into a 'List' that allows
   to remove elements), 'ListArcField' (a field exclusively owned by a
   'ListArc'), as well as support for heterogeneous lists.

 - New 'rbtree' module: red-black tree abstractions used by the upcoming
   Rust Binder. This includes 'RBTree' (the red-black tree itself),
   'RBTreeNode' (a node), 'RBTreeNodeReservation' (a memory reservation
   for a node), 'Iter' and 'IterMut' (immutable and mutable iterators),
   'Cursor' (bidirectional cursor that allows to remove elements), as
   well as an entry API similar to the Rust standard library one.

 - 'init' module: add 'write_[pin_]init' methods and the 'InPlaceWrite'
   trait. Add the 'assert_pinned!' macro.

 - 'sync' module: implement the 'InPlaceInit' trait for 'Arc' by
   introducing an associated type in the trait.

 - 'alloc' module: add 'drop_contents' method to 'BoxExt'.

 - 'types' module: implement the 'ForeignOwnable' trait for
   'Pin<Box<T>>' and improve the trait's documentation. In addition,
   add the 'into_raw' method to the 'ARef' type.

 - 'error' module: in preparation for the upcoming Rust support for
   32-bit architectures, like arm, locally allow Clippy lint for those.

Documentation:

 - https://rust.docs.kernel.org has been announced, so link to it.

 - Enable rustdoc's "jump to definition" feature, making its output a
   bit closer to the experience in a cross-referencer.

 - Debian Testing now also provides recent Rust releases (outside of
   the freeze period), so add it to the list.

MAINTAINERS:

 - Trevor is joining as reviewer of the "RUST" entry.

And a few other small bits.

----------------------------------------------------------------
Alex Mantel (1):
      rust: Implement the smart pointer `InPlaceInit` for `Arc`

Alice Ryhl (14):
      rust: implement ForeignOwnable for Pin<Box<T>>
      rust: sort blk includes in bindings_helper.h
      rust: list: add ListArc
      rust: list: add tracking for ListArc
      rust: list: add struct with prev/next pointers
      rust: list: add macro for implementing ListItem
      rust: list: add List
      rust: list: add iterators
      rust: list: add cursor
      rust: list: support heterogeneous lists
      rust: list: add ListArcField
      rust: rbtree: add `RBTree::entry`
      rust: support for shadow call stack sanitizer
      cfi: add CONFIG_CFI_ICALL_NORMALIZE_INTEGERS

Andreas Hindborg (1):
      rust: kbuild: split up helpers.c

Andrey Konovalov (1):
      kasan: simplify and clarify Makefile

Benno Lossin (4):
      rust: types: improve `ForeignOwnable` documentation
      rust: kernel: add `drop_contents` to `BoxExt`
      rust: init: add `write_[pin_]init` functions
      rust: init: add `assert_pinned` macro

Gary Guo (1):
      rust: kbuild: auto generate helper exports

Kartik Prajapati (1):
      rust: types: add `ARef::into_raw`

Matt Gilbride (1):
      rust: rbtree: add cursor

Matthew Maurer (6):
      rust: support arrays in target JSON
      rust: cfi: add support for CFI_CLANG with Rust
      kbuild: rust: Define probing macros for rustc
      rust: kasan: Rust does not support KHWASAN
      kbuild: rust: Enable KASAN support
      kasan: rust: Add KASAN smoke test via UAF

Michael Vetter (1):
      rust: kernel: use docs.kernel.org links in code documentation

Miguel Ojeda (19):
      rust: error: allow `useless_conversion` for 32-bit builds
      rust: module: add static pointer to `{init,cleanup}_module()`
      x86/rust: support MITIGATION_RETPOLINE
      x86/rust: support MITIGATION_RETHUNK
      x86/rust: support MITIGATION_SLS
      objtool/rust: list `noreturn` Rust functions
      objtool/kbuild/rust: enable objtool for Rust
      rust: enable bindgen's `--enable-function-attribute-detection` flag
      docs: rust: quick-start: add Debian Testing
      docs: rust: link to https://rust.docs.kernel.org
      docs: rust: improve main page introducing a "Code documentation" section
      rust: enable rustdoc's `--generate-link-to-definition`
      MAINTAINERS: add Trevor Gross as Rust reviewer
      rust: avoid `box_uninit_write` feature
      kbuild: rust: add `CONFIG_RUSTC_VERSION`
      kbuild: rust: re-run Kconfig if the version text changes
      kbuild: rust: rebuild if the version text changes
      kbuild: rust: replace proc macros dependency on `core.o` with the version text
      docs: rust: include other expressions in conditional compilation section

Neal Gompa (1):
      init/Kconfig: Only block on RANDSTRUCT for RUST

Wedson Almeida Filho (3):
      rust: rbtree: add red-black tree implementation backed by the C version
      rust: rbtree: add iterator
      rust: rbtree: add mutable iterator

 Documentation/rust/general-information.rst |   27 +-
 Documentation/rust/index.rst               |   18 +-
 Documentation/rust/quick-start.rst         |    4 +-
 MAINTAINERS                                |    1 +
 Makefile                                   |   19 +-
 arch/Kconfig                               |   16 +
 arch/arm64/Kconfig                         |   14 +-
 arch/arm64/Makefile                        |    3 +
 arch/riscv/Kconfig                         |    9 +-
 arch/x86/Makefile                          |   11 +-
 init/Kconfig                               |   19 +-
 mm/kasan/Makefile                          |    8 +-
 mm/kasan/kasan.h                           |    6 +
 mm/kasan/{kasan_test.c => kasan_test_c.c}  |   11 +
 mm/kasan/kasan_test_rust.rs                |   21 +
 rust/Makefile                              |   56 +-
 rust/bindings/bindings_helper.h            |    2 +-
 rust/exports.c                             |    1 +
 rust/helpers.c                             |  239 ------
 rust/helpers/blk.c                         |   14 +
 rust/helpers/bug.c                         |    8 +
 rust/helpers/build_assert.c                |   25 +
 rust/helpers/build_bug.c                   |    9 +
 rust/helpers/err.c                         |   19 +
 rust/helpers/helpers.c                     |   26 +
 rust/helpers/kunit.c                       |    9 +
 rust/helpers/mutex.c                       |    9 +
 rust/helpers/page.c                        |   19 +
 rust/helpers/rbtree.c                      |    9 +
 rust/helpers/refcount.c                    |   19 +
 rust/helpers/signal.c                      |    9 +
 rust/helpers/slab.c                        |    9 +
 rust/helpers/spinlock.c                    |   24 +
 rust/helpers/task.c                        |   19 +
 rust/helpers/uaccess.c                     |   15 +
 rust/helpers/wait.c                        |    9 +
 rust/helpers/workqueue.c                   |   15 +
 rust/kernel/alloc/box_ext.rs               |   33 +-
 rust/kernel/error.rs                       |    5 +-
 rust/kernel/init.rs                        |  191 ++++-
 rust/kernel/init/__internal.rs             |   29 +
 rust/kernel/lib.rs                         |    2 +
 rust/kernel/list.rs                        |  686 +++++++++++++++
 rust/kernel/list/arc.rs                    |  521 ++++++++++++
 rust/kernel/list/arc_field.rs              |   96 +++
 rust/kernel/list/impl_list_item_mod.rs     |  274 ++++++
 rust/kernel/prelude.rs                     |    2 +-
 rust/kernel/print.rs                       |   20 +-
 rust/kernel/rbtree.rs                      | 1278 ++++++++++++++++++++++++++++
 rust/kernel/std_vendor.rs                  |    2 +-
 rust/kernel/sync/arc.rs                    |   25 +-
 rust/kernel/types.rs                       |   63 +-
 rust/macros/lib.rs                         |    4 +
 rust/macros/module.rs                      |   12 +
 scripts/Kconfig.include                    |    8 +
 scripts/Makefile.build                     |    9 +-
 scripts/Makefile.compiler                  |   15 +
 scripts/Makefile.kasan                     |   84 +-
 scripts/Makefile.lib                       |    3 +
 scripts/generate_rust_target.rs            |   98 ++-
 scripts/rustc-version.sh                   |   26 +
 tools/objtool/check.c                      |   52 +-
 tools/objtool/noreturns.h                  |    2 +
 63 files changed, 3884 insertions(+), 407 deletions(-)
 rename mm/kasan/{kasan_test.c => kasan_test_c.c} (99%)
 create mode 100644 mm/kasan/kasan_test_rust.rs
 delete mode 100644 rust/helpers.c
 create mode 100644 rust/helpers/blk.c
 create mode 100644 rust/helpers/bug.c
 create mode 100644 rust/helpers/build_assert.c
 create mode 100644 rust/helpers/build_bug.c
 create mode 100644 rust/helpers/err.c
 create mode 100644 rust/helpers/helpers.c
 create mode 100644 rust/helpers/kunit.c
 create mode 100644 rust/helpers/mutex.c
 create mode 100644 rust/helpers/page.c
 create mode 100644 rust/helpers/rbtree.c
 create mode 100644 rust/helpers/refcount.c
 create mode 100644 rust/helpers/signal.c
 create mode 100644 rust/helpers/slab.c
 create mode 100644 rust/helpers/spinlock.c
 create mode 100644 rust/helpers/task.c
 create mode 100644 rust/helpers/uaccess.c
 create mode 100644 rust/helpers/wait.c
 create mode 100644 rust/helpers/workqueue.c
 create mode 100644 rust/kernel/list.rs
 create mode 100644 rust/kernel/list/arc.rs
 create mode 100644 rust/kernel/list/arc_field.rs
 create mode 100644 rust/kernel/list/impl_list_item_mod.rs
 create mode 100644 rust/kernel/rbtree.rs
 create mode 100755 scripts/rustc-version.sh

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ