Skip to content

Commit b6a8958

Browse files
committed
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security
Pull security subsystem fixes from James Morris. * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security: fcaps: clear the same personality flags as suid when fcaps are used mpi: Avoid using freed pointer in mpi_lshift_limbs() Smack: move label list initialization
2 parents 0db7bd8 + d52fc5d commit b6a8958

File tree

4 files changed

+41
-27
lines changed

4 files changed

+41
-27
lines changed

lib/mpi/mpi-bit.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -177,8 +177,8 @@ int mpi_rshift(MPI x, MPI a, unsigned n)
177177
*/
178178
int mpi_lshift_limbs(MPI a, unsigned int count)
179179
{
180-
mpi_ptr_t ap = a->d;
181-
int n = a->nlimbs;
180+
const int n = a->nlimbs;
181+
mpi_ptr_t ap;
182182
int i;
183183

184184
if (!count || !n)
@@ -187,6 +187,7 @@ int mpi_lshift_limbs(MPI a, unsigned int count)
187187
if (RESIZE_IF_NEEDED(a, n + count) < 0)
188188
return -ENOMEM;
189189

190+
ap = a->d;
190191
for (i = n - 1; i >= 0; i--)
191192
ap[i + count] = ap[i];
192193
for (i = 0; i < count; i++)

security/commoncap.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -505,6 +505,11 @@ int cap_bprm_set_creds(struct linux_binprm *bprm)
505505
}
506506
skip:
507507

508+
/* if we have fs caps, clear dangerous personality flags */
509+
if (!cap_issubset(new->cap_permitted, old->cap_permitted))
510+
bprm->per_clear |= PER_CLEAR_ON_SETID;
511+
512+
508513
/* Don't let someone trace a set[ug]id/setpcap binary with the revised
509514
* credentials unless they have the appropriate permit
510515
*/

security/smack/smack_lsm.c

Lines changed: 33 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3640,8 +3640,38 @@ struct security_operations smack_ops = {
36403640
};
36413641

36423642

3643-
static __init void init_smack_know_list(void)
3643+
static __init void init_smack_known_list(void)
36443644
{
3645+
/*
3646+
* Initialize CIPSO locks
3647+
*/
3648+
spin_lock_init(&smack_known_huh.smk_cipsolock);
3649+
spin_lock_init(&smack_known_hat.smk_cipsolock);
3650+
spin_lock_init(&smack_known_star.smk_cipsolock);
3651+
spin_lock_init(&smack_known_floor.smk_cipsolock);
3652+
spin_lock_init(&smack_known_invalid.smk_cipsolock);
3653+
spin_lock_init(&smack_known_web.smk_cipsolock);
3654+
/*
3655+
* Initialize rule list locks
3656+
*/
3657+
mutex_init(&smack_known_huh.smk_rules_lock);
3658+
mutex_init(&smack_known_hat.smk_rules_lock);
3659+
mutex_init(&smack_known_floor.smk_rules_lock);
3660+
mutex_init(&smack_known_star.smk_rules_lock);
3661+
mutex_init(&smack_known_invalid.smk_rules_lock);
3662+
mutex_init(&smack_known_web.smk_rules_lock);
3663+
/*
3664+
* Initialize rule lists
3665+
*/
3666+
INIT_LIST_HEAD(&smack_known_huh.smk_rules);
3667+
INIT_LIST_HEAD(&smack_known_hat.smk_rules);
3668+
INIT_LIST_HEAD(&smack_known_star.smk_rules);
3669+
INIT_LIST_HEAD(&smack_known_floor.smk_rules);
3670+
INIT_LIST_HEAD(&smack_known_invalid.smk_rules);
3671+
INIT_LIST_HEAD(&smack_known_web.smk_rules);
3672+
/*
3673+
* Create the known labels list
3674+
*/
36453675
list_add(&smack_known_huh.list, &smack_known_list);
36463676
list_add(&smack_known_hat.list, &smack_known_list);
36473677
list_add(&smack_known_star.list, &smack_known_list);
@@ -3676,16 +3706,8 @@ static __init int smack_init(void)
36763706
cred = (struct cred *) current->cred;
36773707
cred->security = tsp;
36783708

3679-
/* initialize the smack_know_list */
3680-
init_smack_know_list();
3681-
/*
3682-
* Initialize locks
3683-
*/
3684-
spin_lock_init(&smack_known_huh.smk_cipsolock);
3685-
spin_lock_init(&smack_known_hat.smk_cipsolock);
3686-
spin_lock_init(&smack_known_star.smk_cipsolock);
3687-
spin_lock_init(&smack_known_floor.smk_cipsolock);
3688-
spin_lock_init(&smack_known_invalid.smk_cipsolock);
3709+
/* initialize the smack_known_list */
3710+
init_smack_known_list();
36893711

36903712
/*
36913713
* Register with LSM

security/smack/smackfs.c

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1614,20 +1614,6 @@ static int __init init_smk_fs(void)
16141614
smk_cipso_doi();
16151615
smk_unlbl_ambient(NULL);
16161616

1617-
mutex_init(&smack_known_floor.smk_rules_lock);
1618-
mutex_init(&smack_known_hat.smk_rules_lock);
1619-
mutex_init(&smack_known_huh.smk_rules_lock);
1620-
mutex_init(&smack_known_invalid.smk_rules_lock);
1621-
mutex_init(&smack_known_star.smk_rules_lock);
1622-
mutex_init(&smack_known_web.smk_rules_lock);
1623-
1624-
INIT_LIST_HEAD(&smack_known_floor.smk_rules);
1625-
INIT_LIST_HEAD(&smack_known_hat.smk_rules);
1626-
INIT_LIST_HEAD(&smack_known_huh.smk_rules);
1627-
INIT_LIST_HEAD(&smack_known_invalid.smk_rules);
1628-
INIT_LIST_HEAD(&smack_known_star.smk_rules);
1629-
INIT_LIST_HEAD(&smack_known_web.smk_rules);
1630-
16311617
return err;
16321618
}
16331619

0 commit comments

Comments
 (0)