@@ -421,6 +421,7 @@ static int smk_ptrace_rule_check(struct task_struct *tracer,
421
421
struct smk_audit_info ad , * saip = NULL ;
422
422
struct task_smack * tsp ;
423
423
struct smack_known * tracer_known ;
424
+ const struct cred * tracercred ;
424
425
425
426
if ((mode & PTRACE_MODE_NOAUDIT ) == 0 ) {
426
427
smk_ad_init (& ad , func , LSM_AUDIT_DATA_TASK );
@@ -429,7 +430,8 @@ static int smk_ptrace_rule_check(struct task_struct *tracer,
429
430
}
430
431
431
432
rcu_read_lock ();
432
- tsp = __task_cred (tracer )-> security ;
433
+ tracercred = __task_cred (tracer );
434
+ tsp = tracercred -> security ;
433
435
tracer_known = smk_of_task (tsp );
434
436
435
437
if ((mode & PTRACE_MODE_ATTACH ) &&
@@ -439,7 +441,7 @@ static int smk_ptrace_rule_check(struct task_struct *tracer,
439
441
rc = 0 ;
440
442
else if (smack_ptrace_rule == SMACK_PTRACE_DRACONIAN )
441
443
rc = - EACCES ;
442
- else if (capable (CAP_SYS_PTRACE ))
444
+ else if (smack_privileged_cred (CAP_SYS_PTRACE , tracercred ))
443
445
rc = 0 ;
444
446
else
445
447
rc = - EACCES ;
@@ -1841,6 +1843,7 @@ static int smack_file_send_sigiotask(struct task_struct *tsk,
1841
1843
{
1842
1844
struct smack_known * skp ;
1843
1845
struct smack_known * tkp = smk_of_task (tsk -> cred -> security );
1846
+ const struct cred * tcred ;
1844
1847
struct file * file ;
1845
1848
int rc ;
1846
1849
struct smk_audit_info ad ;
@@ -1854,8 +1857,12 @@ static int smack_file_send_sigiotask(struct task_struct *tsk,
1854
1857
skp = file -> f_security ;
1855
1858
rc = smk_access (skp , tkp , MAY_DELIVER , NULL );
1856
1859
rc = smk_bu_note ("sigiotask" , skp , tkp , MAY_DELIVER , rc );
1857
- if (rc != 0 && has_capability (tsk , CAP_MAC_OVERRIDE ))
1860
+
1861
+ rcu_read_lock ();
1862
+ tcred = __task_cred (tsk );
1863
+ if (rc != 0 && smack_privileged_cred (CAP_MAC_OVERRIDE , tcred ))
1858
1864
rc = 0 ;
1865
+ rcu_read_unlock ();
1859
1866
1860
1867
smk_ad_init (& ad , __func__ , LSM_AUDIT_DATA_TASK );
1861
1868
smk_ad_setfield_u_tsk (& ad , tsk );
@@ -3467,7 +3474,7 @@ static void smack_d_instantiate(struct dentry *opt_dentry, struct inode *inode)
3467
3474
*/
3468
3475
final = & smack_known_star ;
3469
3476
/*
3470
- * No break .
3477
+ * Fall through .
3471
3478
*
3472
3479
* If a smack value has been set we want to use it,
3473
3480
* but since tmpfs isn't giving us the opportunity
0 commit comments