mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 11:11:45 -04:00
selinux: add gfp argument to security_xfrm_policy_alloc and fix callers
security_xfrm_policy_alloc can be called in atomic context so the allocation should be done with GFP_ATOMIC. Add an argument to let the callers choose the appropriate way. In order to do so a gfp argument needs to be added to the method xfrm_policy_alloc_security in struct security_operations and to the internal function selinux_xfrm_alloc_user. After that switch to GFP_ATOMIC in the atomic callers and leave GFP_KERNEL as before for the rest. The path that needed the gfp argument addition is: security_xfrm_policy_alloc -> security_ops.xfrm_policy_alloc_security -> all users of xfrm_policy_alloc_security (e.g. selinux_xfrm_policy_alloc) -> selinux_xfrm_alloc_user (here the allocation used to be GFP_KERNEL only) Now adding a gfp argument to selinux_xfrm_alloc_user requires us to also add it to security_context_to_sid which is used inside and prior to this patch did only GFP_KERNEL allocation. So add gfp argument to security_context_to_sid and adjust all of its callers as well. CC: Paul Moore <[email protected]> CC: Dave Jones <[email protected]> CC: Steffen Klassert <[email protected]> CC: Fan Du <[email protected]> CC: David S. Miller <[email protected]> CC: LSM list <[email protected]> CC: SELinux list <[email protected]> Signed-off-by: Nikolay Aleksandrov <[email protected]> Acked-by: Paul Moore <[email protected]> Signed-off-by: Steffen Klassert <[email protected]>
This commit is contained in:
parent
87536a81e1
commit
52a4c6404f
11 changed files with 59 additions and 38 deletions
|
|
@ -2239,7 +2239,7 @@ static int pfkey_spdadd(struct sock *sk, struct sk_buff *skb, const struct sadb_
|
|||
goto out;
|
||||
}
|
||||
|
||||
err = security_xfrm_policy_alloc(&xp->security, uctx);
|
||||
err = security_xfrm_policy_alloc(&xp->security, uctx, GFP_KERNEL);
|
||||
kfree(uctx);
|
||||
|
||||
if (err)
|
||||
|
|
@ -2341,7 +2341,7 @@ static int pfkey_spddelete(struct sock *sk, struct sk_buff *skb, const struct sa
|
|||
if (!uctx)
|
||||
return -ENOMEM;
|
||||
|
||||
err = security_xfrm_policy_alloc(&pol_ctx, uctx);
|
||||
err = security_xfrm_policy_alloc(&pol_ctx, uctx, GFP_KERNEL);
|
||||
kfree(uctx);
|
||||
if (err)
|
||||
return err;
|
||||
|
|
@ -3241,7 +3241,7 @@ static struct xfrm_policy *pfkey_compile_policy(struct sock *sk, int opt,
|
|||
if ((*dir = verify_sec_ctx_len(p)))
|
||||
goto out;
|
||||
uctx = pfkey_sadb2xfrm_user_sec_ctx(sec_ctx, GFP_ATOMIC);
|
||||
*dir = security_xfrm_policy_alloc(&xp->security, uctx);
|
||||
*dir = security_xfrm_policy_alloc(&xp->security, uctx, GFP_ATOMIC);
|
||||
kfree(uctx);
|
||||
|
||||
if (*dir)
|
||||
|
|
|
|||
Loading…
Reference in a new issue