mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 03:40:35 +09:00
ANDROID: check dir value of xfrm_userpolicy_id
Check user provided dir value to prevent out-of-bound access which may occur if dir is not less than XFRM_POLICY_MAX. (url: http://seclists.org/bugtraq/2017/Jul/30) Bug: 64257838 Signed-off-by: Suren Baghdasaryan <surenb@google.com> Change-Id: I5bbdf95e14a61bdf5207977d9a5a4465bc848da0
This commit is contained in:
committed by
Amit Pundir
parent
8eddd2bacf
commit
5ff061cb68
@@ -1691,6 +1691,10 @@ static struct sk_buff *xfrm_policy_netlink(struct sk_buff *in_skb,
|
||||
struct sk_buff *skb;
|
||||
int err;
|
||||
|
||||
err = verify_policy_dir(dir);
|
||||
if (err)
|
||||
return ERR_PTR(err);
|
||||
|
||||
skb = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
|
||||
if (!skb)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
@@ -2216,6 +2220,10 @@ static int xfrm_do_migrate(struct sk_buff *skb, struct nlmsghdr *nlh,
|
||||
int n = 0;
|
||||
struct net *net = sock_net(skb->sk);
|
||||
|
||||
err = verify_policy_dir(pi->dir);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
if (attrs[XFRMA_MIGRATE] == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
@@ -2331,6 +2339,11 @@ static int xfrm_send_migrate(const struct xfrm_selector *sel, u8 dir, u8 type,
|
||||
{
|
||||
struct net *net = &init_net;
|
||||
struct sk_buff *skb;
|
||||
int err;
|
||||
|
||||
err = verify_policy_dir(dir);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
skb = nlmsg_new(xfrm_migrate_msgsize(num_migrate, !!k), GFP_ATOMIC);
|
||||
if (skb == NULL)
|
||||
@@ -2985,6 +2998,11 @@ out_free_skb:
|
||||
|
||||
static int xfrm_send_policy_notify(struct xfrm_policy *xp, int dir, const struct km_event *c)
|
||||
{
|
||||
int err;
|
||||
|
||||
err = verify_policy_dir(dir);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
switch (c->event) {
|
||||
case XFRM_MSG_NEWPOLICY:
|
||||
|
||||
Reference in New Issue
Block a user