linux/rust/kernel
Alice Ryhl 105ddfb2d2 rust: task: restrict Task::group_leader() to current
The Task::group_leader() method currently allows you to access the
group_leader() of any task, for example one you hold a refcount to.  But
this is not safe in general since the group leader could change when a
task exits.  See for example commit a15f37a401 ("kernel/sys.c: fix the
racy usage of task_lock(tsk->group_leader) in sys_prlimit64() paths").

All existing users of Task::group_leader() call this method on current,
which is guaranteed running, so there's not an actual issue in Rust code
today.  But to prevent code in the future from making this mistake,
restrict Task::group_leader() so that it can only be called on current.

There are some other cases where accessing task->group_leader is okay. 
For example it can be safe if you hold tasklist_lock or rcu_read_lock(). 
However, only supporting current->group_leader is sufficient for all
in-tree Rust users of group_leader right now.  Safe Rust functionality for
accessing it under rcu or while holding tasklist_lock may be added in the
future if required by any future Rust module.

This patch is a bugfix in that it prevents users of this API from writing
incorrect code.  It doesn't change behavior of correct code.

Link: https://lkml.kernel.org/r/20260107-task-group-leader-v2-1-8fbf816f2a2f@google.com
Signed-off-by: Alice Ryhl <aliceryhl@google.com>
Fixes: 313c4281bc ("rust: add basic `Task`")
Reported-by: Oleg Nesterov <oleg@redhat.com>
Closes: https://lore.kernel.org/all/aTLnV-5jlgfk1aRK@redhat.com/
Reviewed-by: Boqun Feng <boqun.feng@gmail.com>
Reviewed-by: Gary Guo <gary@garyguo.net>
Cc: Andreas Hindborg <a.hindborg@kernel.org>
Cc: Benno Lossin <lossin@kernel.org>
Cc: "Björn Roy Baron" <bjorn3_gh@protonmail.com>
Cc: Björn Roy Baron <bjorn3_gh@protonmail.com>
Cc: Christian Brauner <brauner@kernel.org>
Cc: Danilo Krummrich <dakr@kernel.org>
Cc: FUJITA Tomonori <fujita.tomonori@gmail.com>
Cc: Miguel Ojeda <ojeda@kernel.org>
Cc: Panagiotis Foliadis <pfoliadis@posteo.net>
Cc: Shankari Anand <shankari.ak0208@gmail.com>
Cc: Trevor Gross <tmgross@umich.edu>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
2026-01-26 19:07:13 -08:00
..
alloc rust: alloc: use `kernel::fmt` 2025-10-20 04:04:23 +02:00
block rust: block: update ARef and AlwaysRefCounted imports from sync::aref 2025-11-05 18:24:10 -07:00
debugfs Driver core changes for 6.19-rc1 2025-12-05 21:29:02 -08:00
device rust: device: use `kernel::{fmt,prelude::fmt!}` 2025-09-16 09:26:59 +02:00
drm drm-next for 6.19-rc1: 2025-12-04 08:53:30 -08:00
fs rust: fs: add file::Offset type alias 2025-11-05 00:05:38 +01:00
io rust: io: add typedef for phys_addr_t 2025-11-13 20:17:24 +11:00
irq rust: irq: add &Device<Bound> argument to irq callbacks 2025-08-12 20:33:33 +02:00
list
mm mm: introduce VMA flags bitmap type 2025-11-29 10:41:09 -08:00
net Networking changes for 6.18. 2025-10-02 15:17:01 -07:00
num rust: num: bounded: rename `try_into_bitint` to `try_into_bounded` 2025-11-24 16:38:23 +01:00
pci rust: pci: fix typos in Bar struct's comments 2026-01-06 20:58:43 +01:00
str rust: str: add radix prefixed integer parsing functions 2025-11-03 14:40:45 +01:00
sync rust: sync: atomic: separate import "blocks" 2025-12-06 08:44:10 -08:00
time rust: add udelay() function 2025-11-04 13:25:29 +01:00
.gitignore
acpi.rs rust: acpi: replace `core::mem::zeroed` with `pin_init::zeroed` 2025-10-27 20:27:05 +01:00
alloc.rs Summary of significant series in this pull request: 2025-10-02 18:18:33 -07:00
auxiliary.rs rust: Add trait to convert a device reference to a bus device reference 2025-11-18 11:00:51 +13:00
bitmap.rs rust: bitmap: add BitmapVec::new_inline() 2025-11-26 11:25:35 -05:00
bits.rs
block.rs rust: block: add block related constants 2025-09-02 05:23:56 -06:00
bug.rs
build_assert.rs
clk.rs rust: clk: use `CStr::as_char_ptr` 2025-10-22 07:15:19 +02:00
configfs.rs rust: configfs: use `CStr::as_char_ptr` 2025-10-22 07:14:57 +02:00
cpu.rs rust: kernel: cpu: mark `CpuId::current()` inline 2025-09-14 23:58:45 +02:00
cpufreq.rs Merge 6.18-rc3 into driver-core-next 2025-10-27 08:02:50 +01:00
cpumask.rs rust: cpumask: Mark CpumaskVar as transparent 2025-08-14 09:55:47 +05:30
cred.rs Char/Misc/IIO/Binder changes for 6.18-rc1 2025-10-04 16:26:32 -07:00
debugfs.rs Driver core changes for 6.19-rc1 2025-12-05 21:29:02 -08:00
device.rs rust: device: Remove explicit import of CStrExt 2026-01-06 21:18:31 +01:00
device_id.rs rust: device_id: replace incorrect word in safety documentation 2025-12-29 14:09:18 +01:00
devres.rs Driver core changes for 6.19-rc1 2025-12-05 21:29:02 -08:00
dma.rs rust: dma: fix broken intra-doc links 2026-01-02 19:04:12 +01:00
driver.rs rust: driver: fix broken intra-doc links to example driver types 2025-12-30 23:22:41 +01:00
error.rs rust: replace `CStr` with `core::ffi::CStr` 2025-10-22 07:47:27 +02:00
faux.rs rust: faux: fix C header link 2025-08-13 17:40:28 +02:00
firmware.rs rust: firmware: replace `kernel::c_str!` with C-Strings 2025-11-17 00:53:47 +01:00
fmt.rs rust: support formatting of foreign types 2025-10-22 07:15:31 +02:00
fs.rs rust: fs: add Kiocb struct 2025-09-06 13:27:20 +02:00
generated_arch_reachable_asm.rs.S
generated_arch_static_branch_asm.rs.S
generated_arch_warn_asm.rs.S
i2c.rs rust: i2c: prepare for `core::ffi::CStr` 2025-11-24 09:14:47 +13:00
id_pool.rs rust: id_pool: do not immediately acquire new ids 2025-12-02 14:17:09 -05:00
init.rs rust: allow `clippy::disallowed_names` for doctests 2025-11-17 22:53:27 +01:00
io.rs rust: io: add typedef for phys_addr_t 2025-11-13 20:17:24 +11:00
ioctl.rs
iov.rs rust: iov: add iov_iter abstractions for ITER_DEST 2025-09-06 13:27:20 +02:00
irq.rs rust: irq: add support for threaded IRQs and handlers 2025-08-12 20:22:09 +02:00
jump_label.rs
kunit.rs linux_kselftest-kunit-6.18-rc1 2025-10-01 19:15:11 -07:00
lib.rs USB/Thunderbolt changes for 6.19-rc1 2025-12-06 18:42:12 -08:00
list.rs rust: list: add warning to List::remove docs about mem::take 2025-11-26 13:26:59 +01:00
maple_tree.rs rust: maple_tree: rcu_read_lock() in destructor to silence lockdep 2025-12-23 11:23:15 -08:00
miscdevice.rs Char/Misc/IIO/Binder changes for 6.18-rc1 2025-10-04 16:26:32 -07:00
mm.rs rust: mm: update ARef and AlwaysRefCounted imports from sync::aref 2025-09-13 16:55:15 -07:00
module_param.rs Modules changes for v6.19-rc1 2025-12-06 08:27:07 -08:00
net.rs
num.rs rust: num: add Bounded integer wrapping type 2025-11-19 00:22:24 +01:00
of.rs rust: of: use `core::ffi::CStr` method names 2025-09-16 09:26:59 +02:00
opp.rs Rust changes for v6.19 2025-12-03 14:16:49 -08:00
page.rs Char/Misc/IIO/Binder changes for 6.18-rc1 2025-10-04 16:26:32 -07:00
pci.rs rust: Add trait to convert a device reference to a bus device reference 2025-11-18 11:00:51 +13:00
pid_namespace.rs rust: pid_namespace: update AlwaysRefCounted imports from sync::aref 2025-08-19 13:08:41 +02:00
platform.rs rust: Add trait to convert a device reference to a bus device reference 2025-11-18 11:00:51 +13:00
prelude.rs drm-next for 6.19-rc1: 2025-12-04 08:53:30 -08:00
print.rs
processor.rs rust: Add cpu_relax() helper 2025-08-21 16:58:07 +02:00
ptr.rs rust: remove spurious `use core::fmt::Debug` 2025-10-20 04:04:24 +02:00
pwm.rs pwm: Fix Rust formatting 2025-11-13 10:21:01 +01:00
rbtree.rs rust: rbtree: add immutable cursor 2025-11-16 21:56:57 +01:00
regulator.rs rust: regulator: use `CStr::as_char_ptr` 2025-10-22 07:14:57 +02:00
revocable.rs Rust changes for v6.17 2025-08-03 13:49:10 -07:00
scatterlist.rs rust: scatterlist: import ResourceSize from kernel::io 2025-11-13 20:17:24 +11:00
security.rs rust_binder: add Rust Binder driver 2025-09-19 09:40:46 +02:00
seq_file.rs rust: replace `CStr` with `core::ffi::CStr` 2025-10-22 07:47:27 +02:00
sizes.rs
slice.rs rust: slice: fix broken intra-doc links 2025-11-20 10:13:35 +00:00
static_assert.rs
std_vendor.rs
str.rs Modules changes for v6.19-rc1 2025-12-06 08:27:07 -08:00
sync.rs Modules changes for v6.19-rc1 2025-12-06 08:27:07 -08:00
task.rs rust: task: restrict Task::group_leader() to current 2026-01-26 19:07:13 -08:00
time.rs rust: time: Implement basic arithmetic operations for Delta 2025-09-04 16:56:48 +02:00
tracepoint.rs
transmute.rs rust: transmute: add `from_bytes_prefix` family of methods 2025-11-05 20:29:34 +09:00
types.rs rust: allow `clippy::disallowed_names` for doctests 2025-11-17 22:53:27 +01:00
uaccess.rs rust: uaccess: add UserSliceWriter::write_slice_file() 2025-11-05 00:35:37 +01:00
usb.rs rust: Add trait to convert a device reference to a bus device reference 2025-11-18 11:00:51 +13:00
workqueue.rs rust: pin-init: add pin projections to `#[pin_data]` 2025-09-11 23:26:20 +02:00
xarray.rs