selinux/stable-5.17 PR 20220110
-----BEGIN PGP SIGNATURE----- iQJIBAABCAAyFiEES0KozwfymdVUl37v6iDy2pc3iXMFAmHcekAUHHBhdWxAcGF1 bC1tb29yZS5jb20ACgkQ6iDy2pc3iXNMAQ//TlHhQPEkPYZwD0EPXQIkl5IxGZfR DSg24OMzrh+x/jKVYhMXuW6BlnF10wd2ocG0DNAt9weF22PLrbDsxbzAAnv+MLXM wCzWLmgKpPpbaG57oa17LMcswDjVr8YbxXPOvyZJ/G3YsWDarH8Ezot8iNlVUkOh oqjjXTy0dyLUB/FsW7sIGWa3O18SkbI4pDQxL2vcpdDbvPtAY94kNG3bKTONK/kn OxLrjKscTtu6EuSdFhMqwcUxpfqvqUDrEfiSdNruMlT0/DixHgFlJA8WHXjn7Wpq XTbqdFrClfpmIiTrPSSszLrZAceegTdefDAf5wgfTxmcfYKiPDF9kPu5UPX1rAgO hSoXvGvPjez+RzyXmv9S292lkhV4tz/Wg0YlxZ0LUWif/CSZEyeGGoFZs8080Ukl 1C/oNrByriaGGRLVwKNGOg5x/UkP1ipnorNnAiiIhw+xkzfXm12RdisUyUgLh9+w WsfsC9BJkXMpuvfkgya5PJ677wVNou4ZtJX+2MV8CfGEKTAJp/X/HKh3tWkQFYKx 35QLVO1LD6gJZlSZZTsjZDxUyPwSd8e55GSFn1qKIHuC2jKjSkwCE7JfErIrI/W0 js6HKO2ak7oMTWjxRizANyKI/yva/DeMl+mKCC4QV0xmwlm5JsOe7mYSCNGws7AV A2qYX7S1xKbLTGI= =8H+p -----END PGP SIGNATURE----- Merge tag 'selinux-pr-20220110' of git://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/selinux Pull selinux updates from Paul Moore: "Nothing too significant, but five SELinux patches for v5.17 that do the following: - Harden the code through additional use of the struct_size() macro - Plug some memory leaks - Clean up the code via removal of the security_add_mnt_opt() LSM hook and minor tweaks to selinux_add_opt() - Rename security_task_getsecid_subj() to better reflect its actual behavior/use - now called security_current_getsecid_subj()" * tag 'selinux-pr-20220110' of git://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/selinux: selinux: minor tweaks to selinux_add_opt() selinux: fix potential memleak in selinux_add_opt() security,selinux: remove security_add_mnt_opt() selinux: Use struct_size() helper in kmalloc() lsm: security_task_getsecid_subj() -> security_current_getsecid_subj()
This commit is contained in:
commit
a135ce4400
@ -78,8 +78,6 @@ LSM_HOOK(int, 0, sb_set_mnt_opts, struct super_block *sb, void *mnt_opts,
|
||||
LSM_HOOK(int, 0, sb_clone_mnt_opts, const struct super_block *oldsb,
|
||||
struct super_block *newsb, unsigned long kern_flags,
|
||||
unsigned long *set_kern_flags)
|
||||
LSM_HOOK(int, 0, sb_add_mnt_opt, const char *option, const char *val,
|
||||
int len, void **mnt_opts)
|
||||
LSM_HOOK(int, 0, move_mount, const struct path *from_path,
|
||||
const struct path *to_path)
|
||||
LSM_HOOK(int, 0, dentry_init_security, struct dentry *dentry,
|
||||
@ -206,8 +204,7 @@ LSM_HOOK(int, 0, task_fix_setgid, struct cred *new, const struct cred * old,
|
||||
LSM_HOOK(int, 0, task_setpgid, struct task_struct *p, pid_t pgid)
|
||||
LSM_HOOK(int, 0, task_getpgid, struct task_struct *p)
|
||||
LSM_HOOK(int, 0, task_getsid, struct task_struct *p)
|
||||
LSM_HOOK(void, LSM_RET_VOID, task_getsecid_subj,
|
||||
struct task_struct *p, u32 *secid)
|
||||
LSM_HOOK(void, LSM_RET_VOID, current_getsecid_subj, u32 *secid)
|
||||
LSM_HOOK(void, LSM_RET_VOID, task_getsecid_obj,
|
||||
struct task_struct *p, u32 *secid)
|
||||
LSM_HOOK(int, 0, task_setnice, struct task_struct *p, int nice)
|
||||
|
@ -180,8 +180,6 @@
|
||||
* Copy all security options from a given superblock to another
|
||||
* @oldsb old superblock which contain information to clone
|
||||
* @newsb new superblock which needs filled in
|
||||
* @sb_add_mnt_opt:
|
||||
* Add one mount @option to @mnt_opts.
|
||||
* @sb_parse_opts_str:
|
||||
* Parse a string of security data filling in the opts structure
|
||||
* @options string containing all mount options known by the LSM
|
||||
@ -719,11 +717,9 @@
|
||||
* @p.
|
||||
* @p contains the task_struct for the process.
|
||||
* Return 0 if permission is granted.
|
||||
* @task_getsecid_subj:
|
||||
* Retrieve the subjective security identifier of the task_struct in @p
|
||||
* and return it in @secid. Special care must be taken to ensure that @p
|
||||
* is the either the "current" task, or the caller has exclusive access
|
||||
* to @p.
|
||||
* @current_getsecid_subj:
|
||||
* Retrieve the subjective security identifier of the current task and
|
||||
* return it in @secid.
|
||||
* In case of failure, @secid will be set to zero.
|
||||
* @task_getsecid_obj:
|
||||
* Retrieve the objective security identifier of the task_struct in @p
|
||||
|
@ -313,8 +313,6 @@ int security_sb_clone_mnt_opts(const struct super_block *oldsb,
|
||||
struct super_block *newsb,
|
||||
unsigned long kern_flags,
|
||||
unsigned long *set_kern_flags);
|
||||
int security_add_mnt_opt(const char *option, const char *val,
|
||||
int len, void **mnt_opts);
|
||||
int security_move_mount(const struct path *from_path, const struct path *to_path);
|
||||
int security_dentry_init_security(struct dentry *dentry, int mode,
|
||||
const struct qstr *name,
|
||||
@ -418,7 +416,7 @@ int security_task_fix_setgid(struct cred *new, const struct cred *old,
|
||||
int security_task_setpgid(struct task_struct *p, pid_t pgid);
|
||||
int security_task_getpgid(struct task_struct *p);
|
||||
int security_task_getsid(struct task_struct *p);
|
||||
void security_task_getsecid_subj(struct task_struct *p, u32 *secid);
|
||||
void security_current_getsecid_subj(u32 *secid);
|
||||
void security_task_getsecid_obj(struct task_struct *p, u32 *secid);
|
||||
int security_task_setnice(struct task_struct *p, int nice);
|
||||
int security_task_setioprio(struct task_struct *p, int ioprio);
|
||||
@ -711,12 +709,6 @@ static inline int security_sb_clone_mnt_opts(const struct super_block *oldsb,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int security_add_mnt_opt(const char *option, const char *val,
|
||||
int len, void **mnt_opts)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int security_move_mount(const struct path *from_path,
|
||||
const struct path *to_path)
|
||||
{
|
||||
@ -1119,7 +1111,7 @@ static inline int security_task_getsid(struct task_struct *p)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void security_task_getsecid_subj(struct task_struct *p, u32 *secid)
|
||||
static inline void security_current_getsecid_subj(u32 *secid)
|
||||
{
|
||||
*secid = 0;
|
||||
}
|
||||
|
@ -2131,7 +2131,7 @@ int audit_log_task_context(struct audit_buffer *ab)
|
||||
int error;
|
||||
u32 sid;
|
||||
|
||||
security_task_getsecid_subj(current, &sid);
|
||||
security_current_getsecid_subj(&sid);
|
||||
if (!sid)
|
||||
return 0;
|
||||
|
||||
@ -2352,7 +2352,7 @@ int audit_signal_info(int sig, struct task_struct *t)
|
||||
audit_sig_uid = auid;
|
||||
else
|
||||
audit_sig_uid = uid;
|
||||
security_task_getsecid_subj(current, &audit_sig_sid);
|
||||
security_current_getsecid_subj(&audit_sig_sid);
|
||||
}
|
||||
|
||||
return audit_signal_info_syscall(t);
|
||||
|
@ -1368,8 +1368,7 @@ int audit_filter(int msgtype, unsigned int listtype)
|
||||
case AUDIT_SUBJ_SEN:
|
||||
case AUDIT_SUBJ_CLR:
|
||||
if (f->lsm_rule) {
|
||||
security_task_getsecid_subj(current,
|
||||
&sid);
|
||||
security_current_getsecid_subj(&sid);
|
||||
result = security_audit_rule_match(sid,
|
||||
f->type, f->op, f->lsm_rule);
|
||||
}
|
||||
|
@ -666,7 +666,16 @@ static int audit_filter_rules(struct task_struct *tsk,
|
||||
logged upon error */
|
||||
if (f->lsm_rule) {
|
||||
if (need_sid) {
|
||||
security_task_getsecid_subj(tsk, &sid);
|
||||
/* @tsk should always be equal to
|
||||
* @current with the exception of
|
||||
* fork()/copy_process() in which case
|
||||
* the new @tsk creds are still a dup
|
||||
* of @current's creds so we can still
|
||||
* use security_current_getsecid_subj()
|
||||
* here even though it always refs
|
||||
* @current's creds
|
||||
*/
|
||||
security_current_getsecid_subj(&sid);
|
||||
need_sid = 0;
|
||||
}
|
||||
result = security_audit_rule_match(sid, f->type,
|
||||
|
@ -1537,7 +1537,7 @@ int __init netlbl_unlabel_defconf(void)
|
||||
/* Only the kernel is allowed to call this function and the only time
|
||||
* it is called is at bootup before the audit subsystem is reporting
|
||||
* messages so don't worry to much about these values. */
|
||||
security_task_getsecid_subj(current, &audit_info.secid);
|
||||
security_current_getsecid_subj(&audit_info.secid);
|
||||
audit_info.loginuid = GLOBAL_ROOT_UID;
|
||||
audit_info.sessionid = 0;
|
||||
|
||||
|
@ -32,7 +32,7 @@
|
||||
*/
|
||||
static inline void netlbl_netlink_auditinfo(struct netlbl_audit *audit_info)
|
||||
{
|
||||
security_task_getsecid_subj(current, &audit_info->secid);
|
||||
security_current_getsecid_subj(&audit_info->secid);
|
||||
audit_info->loginuid = audit_get_loginuid(current);
|
||||
audit_info->sessionid = audit_get_sessionid(current);
|
||||
}
|
||||
|
@ -728,7 +728,14 @@ static void apparmor_bprm_committed_creds(struct linux_binprm *bprm)
|
||||
return;
|
||||
}
|
||||
|
||||
static void apparmor_task_getsecid(struct task_struct *p, u32 *secid)
|
||||
static void apparmor_current_getsecid_subj(u32 *secid)
|
||||
{
|
||||
struct aa_label *label = aa_get_current_label();
|
||||
*secid = label->secid;
|
||||
aa_put_label(label);
|
||||
}
|
||||
|
||||
static void apparmor_task_getsecid_obj(struct task_struct *p, u32 *secid)
|
||||
{
|
||||
struct aa_label *label = aa_get_task_label(p);
|
||||
*secid = label->secid;
|
||||
@ -1252,8 +1259,8 @@ static struct security_hook_list apparmor_hooks[] __lsm_ro_after_init = {
|
||||
|
||||
LSM_HOOK_INIT(task_free, apparmor_task_free),
|
||||
LSM_HOOK_INIT(task_alloc, apparmor_task_alloc),
|
||||
LSM_HOOK_INIT(task_getsecid_subj, apparmor_task_getsecid),
|
||||
LSM_HOOK_INIT(task_getsecid_obj, apparmor_task_getsecid),
|
||||
LSM_HOOK_INIT(current_getsecid_subj, apparmor_current_getsecid_subj),
|
||||
LSM_HOOK_INIT(task_getsecid_obj, apparmor_task_getsecid_obj),
|
||||
LSM_HOOK_INIT(task_setrlimit, apparmor_task_setrlimit),
|
||||
LSM_HOOK_INIT(task_kill, apparmor_task_kill),
|
||||
|
||||
|
@ -76,7 +76,7 @@ int ima_must_appraise(struct user_namespace *mnt_userns, struct inode *inode,
|
||||
if (!ima_appraise)
|
||||
return 0;
|
||||
|
||||
security_task_getsecid_subj(current, &secid);
|
||||
security_current_getsecid_subj(&secid);
|
||||
return ima_match_policy(mnt_userns, inode, current_cred(), secid,
|
||||
func, mask, IMA_APPRAISE | IMA_HASH, NULL,
|
||||
NULL, NULL, NULL);
|
||||
|
@ -408,7 +408,7 @@ int ima_file_mmap(struct file *file, unsigned long prot)
|
||||
u32 secid;
|
||||
|
||||
if (file && (prot & PROT_EXEC)) {
|
||||
security_task_getsecid_subj(current, &secid);
|
||||
security_current_getsecid_subj(&secid);
|
||||
return process_measurement(file, current_cred(), secid, NULL,
|
||||
0, MAY_EXEC, MMAP_CHECK);
|
||||
}
|
||||
@ -446,7 +446,7 @@ int ima_file_mprotect(struct vm_area_struct *vma, unsigned long prot)
|
||||
!(prot & PROT_EXEC) || (vma->vm_flags & VM_EXEC))
|
||||
return 0;
|
||||
|
||||
security_task_getsecid_subj(current, &secid);
|
||||
security_current_getsecid_subj(&secid);
|
||||
inode = file_inode(vma->vm_file);
|
||||
action = ima_get_action(file_mnt_user_ns(vma->vm_file), inode,
|
||||
current_cred(), secid, MAY_EXEC, MMAP_CHECK,
|
||||
@ -487,7 +487,7 @@ int ima_bprm_check(struct linux_binprm *bprm)
|
||||
int ret;
|
||||
u32 secid;
|
||||
|
||||
security_task_getsecid_subj(current, &secid);
|
||||
security_current_getsecid_subj(&secid);
|
||||
ret = process_measurement(bprm->file, current_cred(), secid, NULL, 0,
|
||||
MAY_EXEC, BPRM_CHECK);
|
||||
if (ret)
|
||||
@ -512,7 +512,7 @@ int ima_file_check(struct file *file, int mask)
|
||||
{
|
||||
u32 secid;
|
||||
|
||||
security_task_getsecid_subj(current, &secid);
|
||||
security_current_getsecid_subj(&secid);
|
||||
return process_measurement(file, current_cred(), secid, NULL, 0,
|
||||
mask & (MAY_READ | MAY_WRITE | MAY_EXEC |
|
||||
MAY_APPEND), FILE_CHECK);
|
||||
@ -709,7 +709,7 @@ int ima_read_file(struct file *file, enum kernel_read_file_id read_id,
|
||||
|
||||
/* Read entire file for all partial reads. */
|
||||
func = read_idmap[read_id] ?: FILE_CHECK;
|
||||
security_task_getsecid_subj(current, &secid);
|
||||
security_current_getsecid_subj(&secid);
|
||||
return process_measurement(file, current_cred(), secid, NULL,
|
||||
0, MAY_READ, func);
|
||||
}
|
||||
@ -752,7 +752,7 @@ int ima_post_read_file(struct file *file, void *buf, loff_t size,
|
||||
}
|
||||
|
||||
func = read_idmap[read_id] ?: FILE_CHECK;
|
||||
security_task_getsecid_subj(current, &secid);
|
||||
security_current_getsecid_subj(&secid);
|
||||
return process_measurement(file, current_cred(), secid, buf, size,
|
||||
MAY_READ, func);
|
||||
}
|
||||
@ -905,7 +905,7 @@ int process_buffer_measurement(struct user_namespace *mnt_userns,
|
||||
* buffer measurements.
|
||||
*/
|
||||
if (func) {
|
||||
security_task_getsecid_subj(current, &secid);
|
||||
security_current_getsecid_subj(&secid);
|
||||
action = ima_get_action(mnt_userns, inode, current_cred(),
|
||||
secid, 0, func, &pcr, &template,
|
||||
func_data, NULL);
|
||||
|
@ -994,14 +994,6 @@ int security_sb_clone_mnt_opts(const struct super_block *oldsb,
|
||||
}
|
||||
EXPORT_SYMBOL(security_sb_clone_mnt_opts);
|
||||
|
||||
int security_add_mnt_opt(const char *option, const char *val, int len,
|
||||
void **mnt_opts)
|
||||
{
|
||||
return call_int_hook(sb_add_mnt_opt, -EINVAL,
|
||||
option, val, len, mnt_opts);
|
||||
}
|
||||
EXPORT_SYMBOL(security_add_mnt_opt);
|
||||
|
||||
int security_move_mount(const struct path *from_path, const struct path *to_path)
|
||||
{
|
||||
return call_int_hook(move_mount, 0, from_path, to_path);
|
||||
@ -1808,12 +1800,12 @@ int security_task_getsid(struct task_struct *p)
|
||||
return call_int_hook(task_getsid, 0, p);
|
||||
}
|
||||
|
||||
void security_task_getsecid_subj(struct task_struct *p, u32 *secid)
|
||||
void security_current_getsecid_subj(u32 *secid)
|
||||
{
|
||||
*secid = 0;
|
||||
call_void_hook(task_getsecid_subj, p, secid);
|
||||
call_void_hook(current_getsecid_subj, secid);
|
||||
}
|
||||
EXPORT_SYMBOL(security_task_getsecid_subj);
|
||||
EXPORT_SYMBOL(security_current_getsecid_subj);
|
||||
|
||||
void security_task_getsecid_obj(struct task_struct *p, u32 *secid)
|
||||
{
|
||||
|
@ -229,19 +229,6 @@ static inline u32 cred_sid(const struct cred *cred)
|
||||
return tsec->sid;
|
||||
}
|
||||
|
||||
/*
|
||||
* get the subjective security ID of a task
|
||||
*/
|
||||
static inline u32 task_sid_subj(const struct task_struct *task)
|
||||
{
|
||||
u32 sid;
|
||||
|
||||
rcu_read_lock();
|
||||
sid = cred_sid(rcu_dereference(task->cred));
|
||||
rcu_read_unlock();
|
||||
return sid;
|
||||
}
|
||||
|
||||
/*
|
||||
* get the objective security ID of a task
|
||||
*/
|
||||
@ -988,82 +975,54 @@ static int selinux_sb_clone_mnt_opts(const struct super_block *oldsb,
|
||||
static int selinux_add_opt(int token, const char *s, void **mnt_opts)
|
||||
{
|
||||
struct selinux_mnt_opts *opts = *mnt_opts;
|
||||
bool is_alloc_opts = false;
|
||||
|
||||
if (token == Opt_seclabel) /* eaten and completely ignored */
|
||||
if (token == Opt_seclabel)
|
||||
/* eaten and completely ignored */
|
||||
return 0;
|
||||
if (!s)
|
||||
return -ENOMEM;
|
||||
|
||||
if (!opts) {
|
||||
opts = kzalloc(sizeof(struct selinux_mnt_opts), GFP_KERNEL);
|
||||
opts = kzalloc(sizeof(*opts), GFP_KERNEL);
|
||||
if (!opts)
|
||||
return -ENOMEM;
|
||||
*mnt_opts = opts;
|
||||
is_alloc_opts = true;
|
||||
}
|
||||
if (!s)
|
||||
return -ENOMEM;
|
||||
|
||||
switch (token) {
|
||||
case Opt_context:
|
||||
if (opts->context || opts->defcontext)
|
||||
goto Einval;
|
||||
goto err;
|
||||
opts->context = s;
|
||||
break;
|
||||
case Opt_fscontext:
|
||||
if (opts->fscontext)
|
||||
goto Einval;
|
||||
goto err;
|
||||
opts->fscontext = s;
|
||||
break;
|
||||
case Opt_rootcontext:
|
||||
if (opts->rootcontext)
|
||||
goto Einval;
|
||||
goto err;
|
||||
opts->rootcontext = s;
|
||||
break;
|
||||
case Opt_defcontext:
|
||||
if (opts->context || opts->defcontext)
|
||||
goto Einval;
|
||||
goto err;
|
||||
opts->defcontext = s;
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
Einval:
|
||||
pr_warn(SEL_MOUNT_FAIL_MSG);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static int selinux_add_mnt_opt(const char *option, const char *val, int len,
|
||||
void **mnt_opts)
|
||||
{
|
||||
int token = Opt_error;
|
||||
int rc, i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(tokens); i++) {
|
||||
if (strcmp(option, tokens[i].name) == 0) {
|
||||
token = tokens[i].opt;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (token == Opt_error)
|
||||
return -EINVAL;
|
||||
|
||||
if (token != Opt_seclabel) {
|
||||
val = kmemdup_nul(val, len, GFP_KERNEL);
|
||||
if (!val) {
|
||||
rc = -ENOMEM;
|
||||
goto free_opt;
|
||||
}
|
||||
}
|
||||
rc = selinux_add_opt(token, val, mnt_opts);
|
||||
if (unlikely(rc)) {
|
||||
kfree(val);
|
||||
goto free_opt;
|
||||
}
|
||||
return rc;
|
||||
|
||||
free_opt:
|
||||
if (*mnt_opts) {
|
||||
selinux_free_mnt_opts(*mnt_opts);
|
||||
err:
|
||||
if (is_alloc_opts) {
|
||||
kfree(opts);
|
||||
*mnt_opts = NULL;
|
||||
}
|
||||
return rc;
|
||||
pr_warn(SEL_MOUNT_FAIL_MSG);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static int show_sid(struct seq_file *m, u32 sid)
|
||||
@ -4210,9 +4169,9 @@ static int selinux_task_getsid(struct task_struct *p)
|
||||
PROCESS__GETSESSION, NULL);
|
||||
}
|
||||
|
||||
static void selinux_task_getsecid_subj(struct task_struct *p, u32 *secid)
|
||||
static void selinux_current_getsecid_subj(u32 *secid)
|
||||
{
|
||||
*secid = task_sid_subj(p);
|
||||
*secid = current_sid();
|
||||
}
|
||||
|
||||
static void selinux_task_getsecid_obj(struct task_struct *p, u32 *secid)
|
||||
@ -7164,7 +7123,7 @@ static struct security_hook_list selinux_hooks[] __lsm_ro_after_init = {
|
||||
LSM_HOOK_INIT(task_setpgid, selinux_task_setpgid),
|
||||
LSM_HOOK_INIT(task_getpgid, selinux_task_getpgid),
|
||||
LSM_HOOK_INIT(task_getsid, selinux_task_getsid),
|
||||
LSM_HOOK_INIT(task_getsecid_subj, selinux_task_getsecid_subj),
|
||||
LSM_HOOK_INIT(current_getsecid_subj, selinux_current_getsecid_subj),
|
||||
LSM_HOOK_INIT(task_getsecid_obj, selinux_task_getsecid_obj),
|
||||
LSM_HOOK_INIT(task_setnice, selinux_task_setnice),
|
||||
LSM_HOOK_INIT(task_setioprio, selinux_task_setioprio),
|
||||
@ -7303,7 +7262,6 @@ static struct security_hook_list selinux_hooks[] __lsm_ro_after_init = {
|
||||
LSM_HOOK_INIT(fs_context_dup, selinux_fs_context_dup),
|
||||
LSM_HOOK_INIT(fs_context_parse_param, selinux_fs_context_parse_param),
|
||||
LSM_HOOK_INIT(sb_eat_lsm_opts, selinux_sb_eat_lsm_opts),
|
||||
LSM_HOOK_INIT(sb_add_mnt_opt, selinux_add_mnt_opt),
|
||||
#ifdef CONFIG_SECURITY_NETWORK_XFRM
|
||||
LSM_HOOK_INIT(xfrm_policy_clone_security, selinux_xfrm_policy_clone),
|
||||
#endif
|
||||
|
@ -570,7 +570,7 @@ void sidtab_sid2str_put(struct sidtab *s, struct sidtab_entry *entry,
|
||||
goto out_unlock;
|
||||
}
|
||||
|
||||
cache = kmalloc(sizeof(struct sidtab_str_cache) + str_len, GFP_ATOMIC);
|
||||
cache = kmalloc(struct_size(cache, str, str_len), GFP_ATOMIC);
|
||||
if (!cache)
|
||||
goto out_unlock;
|
||||
|
||||
|
@ -89,7 +89,7 @@ static int selinux_xfrm_alloc_user(struct xfrm_sec_ctx **ctxp,
|
||||
if (str_len >= PAGE_SIZE)
|
||||
return -ENOMEM;
|
||||
|
||||
ctx = kmalloc(sizeof(*ctx) + str_len + 1, gfp);
|
||||
ctx = kmalloc(struct_size(ctx, ctx_str, str_len + 1), gfp);
|
||||
if (!ctx)
|
||||
return -ENOMEM;
|
||||
|
||||
@ -360,7 +360,7 @@ int selinux_xfrm_state_alloc_acquire(struct xfrm_state *x,
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
ctx = kmalloc(sizeof(*ctx) + str_len, GFP_ATOMIC);
|
||||
ctx = kmalloc(struct_size(ctx, ctx_str, str_len), GFP_ATOMIC);
|
||||
if (!ctx) {
|
||||
rc = -ENOMEM;
|
||||
goto out;
|
||||
|
@ -389,22 +389,6 @@ static inline struct smack_known *smk_of_task(const struct task_smack *tsp)
|
||||
return tsp->smk_task;
|
||||
}
|
||||
|
||||
static inline struct smack_known *smk_of_task_struct_subj(
|
||||
const struct task_struct *t)
|
||||
{
|
||||
struct smack_known *skp;
|
||||
const struct cred *cred;
|
||||
|
||||
rcu_read_lock();
|
||||
|
||||
cred = rcu_dereference(t->cred);
|
||||
skp = smk_of_task(smack_cred(cred));
|
||||
|
||||
rcu_read_unlock();
|
||||
|
||||
return skp;
|
||||
}
|
||||
|
||||
static inline struct smack_known *smk_of_task_struct_obj(
|
||||
const struct task_struct *t)
|
||||
{
|
||||
|
@ -2067,15 +2067,14 @@ static int smack_task_getsid(struct task_struct *p)
|
||||
}
|
||||
|
||||
/**
|
||||
* smack_task_getsecid_subj - get the subjective secid of the task
|
||||
* @p: the task
|
||||
* smack_current_getsecid_subj - get the subjective secid of the current task
|
||||
* @secid: where to put the result
|
||||
*
|
||||
* Sets the secid to contain a u32 version of the task's subjective smack label.
|
||||
*/
|
||||
static void smack_task_getsecid_subj(struct task_struct *p, u32 *secid)
|
||||
static void smack_current_getsecid_subj(u32 *secid)
|
||||
{
|
||||
struct smack_known *skp = smk_of_task_struct_subj(p);
|
||||
struct smack_known *skp = smk_of_current();
|
||||
|
||||
*secid = skp->smk_secid;
|
||||
}
|
||||
@ -4807,7 +4806,7 @@ static struct security_hook_list smack_hooks[] __lsm_ro_after_init = {
|
||||
LSM_HOOK_INIT(task_setpgid, smack_task_setpgid),
|
||||
LSM_HOOK_INIT(task_getpgid, smack_task_getpgid),
|
||||
LSM_HOOK_INIT(task_getsid, smack_task_getsid),
|
||||
LSM_HOOK_INIT(task_getsecid_subj, smack_task_getsecid_subj),
|
||||
LSM_HOOK_INIT(current_getsecid_subj, smack_current_getsecid_subj),
|
||||
LSM_HOOK_INIT(task_getsecid_obj, smack_task_getsecid_obj),
|
||||
LSM_HOOK_INIT(task_setnice, smack_task_setnice),
|
||||
LSM_HOOK_INIT(task_setioprio, smack_task_setioprio),
|
||||
|
Loading…
Reference in New Issue
Block a user