mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 12:44:03 +02:00
lsm/stable-7.3 PR 20260814
-----BEGIN PGP SIGNATURE----- iQJIBAABCgAyFiEES0KozwfymdVUl37v6iDy2pc3iXMFAmp/iWkUHHBhdWxAcGF1 bC1tb29yZS5jb20ACgkQ6iDy2pc3iXPvbQ/8DT62doPc0ECTXQXcTNjBOddjNspB pk2mK238UQP50aU7/su4RdgmGG+spVoPc7oqeavnm2J+c552t0eHI61itYMe7nkY uOIjShLN93g9pjG4IqhmCDvGTpsQp9Oiec5F/6C++7OUT5oUqm/faXAZtwFLFgmx pTNf91w+u5s3DJjqG5zqEdteRrQMzDNozdq4YbNkzeIiofsUJvq6IJ6rV66kyOa/ zk2hC6zI3mL0Vuin3WdxKqd1mD7mhYWxjl2nt/0TTIRMKmycxovlvbfADXXi2hlp 4tALFgbEmeOgXr7HWvOqClNZ002/gG84Ty2F/8D/p0EGlzOc0Ga/q1dSAM/JJ5RZ bArXY3qgioU4/zOp998kXIYgRV3i6ZBBEzqTavcVtgCtNTgc2MH+KftD9HJaVjx8 keRClwB85r72mNqKVcTVgQ8MJvA+Fq03JHc/JH3npv2tSPELK4V4vkW0nCGQsLXV /oX87E9/Wh6wWchvUTYToX5j6eNRUjD8xQzIAbPWTilusPcIp9pW58I6gaDKAu6A dNox9I064JfLK+LEmn8Le8AatTT0g/mj1wTD0KeRfo0zKyjSYoT0ECnXBeAfg9QI Vr6ZTXPM0fMpKEHqJvYLJAqVbm3kJKZqxr1z4nmz14elms1SmwdmOSq66Qm8fRCS P5fGVxFzNbDVZvs= =eToU -----END PGP SIGNATURE----- Merge tag 'lsm-pr-20260814' of git://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/lsm Pull LSM updates from Paul Moore: - Remove task_euid() The task_euid(), and Rust counterpart, was never widely used, for good reason, and now that the only user is gone we're removing it to rid ourselves of both dead and funky code. - Documentation improvements Correct some of the kdoc comments for security_task_prctl() and clarify the rust comments on task UID accessors. - Fix a memory leak in the LSM syscall selftests * tag 'lsm-pr-20260814' of git://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/lsm: selftests/lsm: Fix memory leak in attr_lsm_count cred: delete task_euid() rust: task: clarify comments on task UID accessors lsm: clarify security_task_prctl() hook documentation
This commit is contained in:
commit
09005a6398
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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()``
|
||||
函数,将结果存储在临时指针中,然后从临时指针中调用凭据的各个方面,最后释放锁。
|
||||
|
|
|
|||
|
|
@ -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) \
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -210,20 +210,13 @@ pub fn pid(&self) -> Pid {
|
|||
unsafe { *ptr::addr_of!((*self.as_ptr()).pid) }
|
||||
}
|
||||
|
||||
/// Returns the UID of the given task.
|
||||
/// Returns the objective real UID of the given task.
|
||||
#[inline]
|
||||
pub fn uid(&self) -> Kuid {
|
||||
// SAFETY: It's always safe to call `task_uid` on a valid task.
|
||||
Kuid::from_raw(unsafe { bindings::task_uid(self.as_ptr()) })
|
||||
}
|
||||
|
||||
/// Returns the effective UID of the given task.
|
||||
#[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 {
|
||||
|
|
@ -371,7 +364,7 @@ fn eq(&self, other: &Self) -> bool {
|
|||
impl Eq for Task {}
|
||||
|
||||
impl Kuid {
|
||||
/// Get the current euid.
|
||||
/// Get the current subjective effective UID.
|
||||
#[inline]
|
||||
pub fn current_euid() -> Kuid {
|
||||
// SAFETY: Just an FFI call.
|
||||
|
|
|
|||
|
|
@ -3301,15 +3301,14 @@ int security_task_kill(struct task_struct *p, struct kernel_siginfo *info,
|
|||
}
|
||||
|
||||
/**
|
||||
* security_task_prctl() - Check if a prctl op is allowed
|
||||
* security_task_prctl() - Handle an LSM specific prctl() call
|
||||
* @option: operation
|
||||
* @arg2: argument
|
||||
* @arg3: argument
|
||||
* @arg4: argument
|
||||
* @arg5: argument
|
||||
*
|
||||
* Check permission before performing a process control operation on the
|
||||
* current process.
|
||||
* Handle lsm specific prctl() operations.
|
||||
*
|
||||
* Return: Return -ENOSYS if no-one wanted to handle this op, any other value
|
||||
* to cause prctl() to return immediately with that value.
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@ int attr_lsm_count(void)
|
|||
return 0;
|
||||
|
||||
if (read_sysfs_lsms(names, sysconf(_SC_PAGESIZE)))
|
||||
return 0;
|
||||
goto out;
|
||||
|
||||
if (strstr(names, "selinux"))
|
||||
count++;
|
||||
|
|
@ -85,5 +85,7 @@ int attr_lsm_count(void)
|
|||
if (strstr(names, "apparmor"))
|
||||
count++;
|
||||
|
||||
out:
|
||||
free(names);
|
||||
return count;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user