[PATCH v5 2/2] cred: delete task_euid()

Mainline
From:Alice Ryhl <aliceryhl@google.com>
Date:
Message-ID:<20260703-remove-task-euid-v5-2-c90c7e2ddf54@google.com>
Patch:v5 · 2/2
Language:zh_CN
Patch-ID:9aeadef26a8f8ac25ba39792a6bc767b607da8fd
Files:Documentation/security/credentials.rstDocumentation/translations/zh_CN/security/credentials.rstinclude/linux/cred.hrust/helpers/task.crust/kernel/task.rs

Patch content 5 changed files

task_euid() is a very weird operation. You can see how weird it is bygrepping for task_euid() - binder is its only user. task_euid() obtainsthe objective effective UID - it looks at the credentials of the taskfor purposes of acting on it as an object, but then accesses theeffective UID (which the credentials.7 man page describes as "[...] usedby the kernel to determine the permissions that the process will havewhen accessing shared resources [...]"). Since usage in Binder has now been removed, get rid of the resultingdead code. Changes to the zh_CN translation was carried out with the help ofGemini and Google Translate, and since adjusted as per Alex Shi'sfeedback. Suggested-by: Jann Horn <jannh@google.com>Reviewed-by: Gary Guo <gary@garyguo.net>Signed-off-by: Alice Ryhl <aliceryhl@google.com>--- Documentation/security/credentials.rst                    |  6 ++---- Documentation/translations/zh_CN/security/credentials.rst |  4 +--- include/linux/cred.h                                      |  1 - rust/helpers/task.c                                       |  5 ----- rust/kernel/task.rs                                       | 10 ---------- 5 files changed, 3 insertions(+), 23 deletions(-) diff --git a/Documentation/security/credentials.rst b/Documentation/security/credentials.rstindex 4996838491b1..a39a2a2f67aa 100644--- a/Documentation/security/credentials.rst+++ b/Documentation/security/credentials.rst@@ -393,16 +393,14 @@ the credentials so obtained when they're finished with.    The result of ``__task_cred()`` should not be passed directly to    ``get_cred()`` as this may race with ``commit_cred()``. -There are a couple of convenience functions to access bits of another task's-credentials, hiding the RCU magic from the caller::+There is a convenience function to access bits of another task's credentials,+hiding the RCU magic from the caller::  	uid_t task_uid(task)		Task's real UID-	uid_t task_euid(task)		Task's effective UID  If the caller is holding the RCU read lock at the time anyway, then::  	__task_cred(task)->uid-	__task_cred(task)->euid  should be used instead.  Similarly, if multiple aspects of a task's credentials need to be accessed, RCU read lock should be used, ``__task_cred()`` called,diff --git a/Documentation/translations/zh_CN/security/credentials.rst b/Documentation/translations/zh_CN/security/credentials.rstindex 88fcd9152ffe..20c8696f8198 100644--- a/Documentation/translations/zh_CN/security/credentials.rst+++ b/Documentation/translations/zh_CN/security/credentials.rst@@ -337,15 +337,13 @@ const指针上操作,因此不需要进行类型转换,但需要临时放弃    ``__task_cred()`` 的结果不应直接传递给 ``get_cred()`` ,    因为这可能与 ``commit_cred()`` 发生竞争条件。 -还有一些方便的函数可以访问另一个任务凭据的特定部分,将RCU操作对调用方隐藏起来::+有一个方便的函数可用于访问另一个任务凭据的特定部分,从而对调用方隐藏RCU机制::  	uid_t task_uid(task)		Task's real UID-	uid_t task_euid(task)		Task's effective UID  如果调用方在此时已经持有RCU读锁,则应使用::  	__task_cred(task)->uid-	__task_cred(task)->euid  类似地,如果需要访问任务凭据的多个方面,应使用RCU读锁,调用 ``__task_cred()`` 函数,将结果存储在临时指针中,然后从临时指针中调用凭据的各个方面,最后释放锁。diff --git a/include/linux/cred.h b/include/linux/cred.hindex c6676265a985..6ef1750c93e2 100644--- a/include/linux/cred.h+++ b/include/linux/cred.h@@ -371,7 +371,6 @@ DEFINE_FREE(put_cred, struct cred *, if (!IS_ERR_OR_NULL(_T)) put_cred(_T)) })  #define task_uid(task)		(task_cred_xxx((task), uid))-#define task_euid(task)		(task_cred_xxx((task), euid)) #define task_ucounts(task)	(task_cred_xxx((task), ucounts))  #define current_cred_xxx(xxx)			\diff --git a/rust/helpers/task.c b/rust/helpers/task.cindex c0e1a06ede78..b46b1433a67e 100644--- a/rust/helpers/task.c+++ b/rust/helpers/task.c@@ -28,11 +28,6 @@ __rust_helper kuid_t rust_helper_task_uid(struct task_struct *task) 	return task_uid(task); } -__rust_helper kuid_t rust_helper_task_euid(struct task_struct *task)-{-	return task_euid(task);-}- #ifndef CONFIG_USER_NS __rust_helper uid_t rust_helper_from_kuid(struct user_namespace *to, kuid_t uid) {diff --git a/rust/kernel/task.rs b/rust/kernel/task.rsindex eabd65bfde12..c2b3457b700c 100644--- a/rust/kernel/task.rs+++ b/rust/kernel/task.rs@@ -217,16 +217,6 @@ pub fn uid(&self) -> Kuid {         Kuid::from_raw(unsafe { bindings::task_uid(self.as_ptr()) })     } -    /// Returns the objective effective UID of the given task.-    ///-    /// You should probably not be using this; the effective UID is normally-    /// only relevant in subjective credentials.-    #[inline]-    pub fn euid(&self) -> Kuid {-        // SAFETY: It's always safe to call `task_euid` on a valid task.-        Kuid::from_raw(unsafe { bindings::task_euid(self.as_ptr()) })-    }-     /// Determines whether the given task has pending signals.     #[inline]     pub fn signal_pending(&self) -> bool { -- 2.55.0.rc0.799.gd6f94ed593-goog