Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Three cases of simple overlapping changes. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@ -2151,7 +2151,6 @@ struct dst_entry *xfrm_lookup(struct net *net, struct dst_entry *dst_orig,
|
||||
goto no_transform;
|
||||
}
|
||||
|
||||
dst_hold(&xdst->u.dst);
|
||||
route = xdst->route;
|
||||
}
|
||||
}
|
||||
@ -3209,9 +3208,15 @@ int xfrm_migrate(const struct xfrm_selector *sel, u8 dir, u8 type,
|
||||
struct xfrm_state *x_new[XFRM_MAX_DEPTH];
|
||||
struct xfrm_migrate *mp;
|
||||
|
||||
/* Stage 0 - sanity checks */
|
||||
if ((err = xfrm_migrate_check(m, num_migrate)) < 0)
|
||||
goto out;
|
||||
|
||||
if (dir >= XFRM_POLICY_MAX) {
|
||||
err = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* Stage 1 - find policy */
|
||||
if ((pol = xfrm_migrate_policy_find(sel, dir, type, net)) == NULL) {
|
||||
err = -ENOENT;
|
||||
|
@ -1629,6 +1629,7 @@ int
|
||||
xfrm_tmpl_sort(struct xfrm_tmpl **dst, struct xfrm_tmpl **src, int n,
|
||||
unsigned short family, struct net *net)
|
||||
{
|
||||
int i;
|
||||
int err = 0;
|
||||
struct xfrm_state_afinfo *afinfo = xfrm_state_get_afinfo(family);
|
||||
if (!afinfo)
|
||||
@ -1637,6 +1638,9 @@ xfrm_tmpl_sort(struct xfrm_tmpl **dst, struct xfrm_tmpl **src, int n,
|
||||
spin_lock_bh(&net->xfrm.xfrm_state_lock); /*FIXME*/
|
||||
if (afinfo->tmpl_sort)
|
||||
err = afinfo->tmpl_sort(dst, src, n);
|
||||
else
|
||||
for (i = 0; i < n; i++)
|
||||
dst[i] = src[i];
|
||||
spin_unlock_bh(&net->xfrm.xfrm_state_lock);
|
||||
rcu_read_unlock();
|
||||
return err;
|
||||
@ -1647,6 +1651,7 @@ int
|
||||
xfrm_state_sort(struct xfrm_state **dst, struct xfrm_state **src, int n,
|
||||
unsigned short family)
|
||||
{
|
||||
int i;
|
||||
int err = 0;
|
||||
struct xfrm_state_afinfo *afinfo = xfrm_state_get_afinfo(family);
|
||||
struct net *net = xs_net(*src);
|
||||
@ -1657,6 +1662,9 @@ xfrm_state_sort(struct xfrm_state **dst, struct xfrm_state **src, int n,
|
||||
spin_lock_bh(&net->xfrm.xfrm_state_lock);
|
||||
if (afinfo->state_sort)
|
||||
err = afinfo->state_sort(dst, src, n);
|
||||
else
|
||||
for (i = 0; i < n; i++)
|
||||
dst[i] = src[i];
|
||||
spin_unlock_bh(&net->xfrm.xfrm_state_lock);
|
||||
rcu_read_unlock();
|
||||
return err;
|
||||
|
@ -799,7 +799,7 @@ static int copy_user_offload(struct xfrm_state_offload *xso, struct sk_buff *skb
|
||||
return -EMSGSIZE;
|
||||
|
||||
xuo = nla_data(attr);
|
||||
|
||||
memset(xuo, 0, sizeof(*xuo));
|
||||
xuo->ifindex = xso->dev->ifindex;
|
||||
xuo->flags = xso->flags;
|
||||
|
||||
@ -1875,6 +1875,7 @@ static int build_aevent(struct sk_buff *skb, struct xfrm_state *x, const struct
|
||||
return -EMSGSIZE;
|
||||
|
||||
id = nlmsg_data(nlh);
|
||||
memset(&id->sa_id, 0, sizeof(id->sa_id));
|
||||
memcpy(&id->sa_id.daddr, &x->id.daddr, sizeof(x->id.daddr));
|
||||
id->sa_id.spi = x->id.spi;
|
||||
id->sa_id.family = x->props.family;
|
||||
@ -2584,6 +2585,8 @@ static int build_expire(struct sk_buff *skb, struct xfrm_state *x, const struct
|
||||
ue = nlmsg_data(nlh);
|
||||
copy_to_user_state(x, &ue->state);
|
||||
ue->hard = (c->data.hard != 0) ? 1 : 0;
|
||||
/* clear the padding bytes */
|
||||
memset(&ue->hard + 1, 0, sizeof(*ue) - offsetofend(typeof(*ue), hard));
|
||||
|
||||
err = xfrm_mark_put(skb, &x->mark);
|
||||
if (err)
|
||||
@ -2723,6 +2726,7 @@ static int xfrm_notify_sa(struct xfrm_state *x, const struct km_event *c)
|
||||
struct nlattr *attr;
|
||||
|
||||
id = nlmsg_data(nlh);
|
||||
memset(id, 0, sizeof(*id));
|
||||
memcpy(&id->daddr, &x->id.daddr, sizeof(id->daddr));
|
||||
id->spi = x->id.spi;
|
||||
id->family = x->props.family;
|
||||
|
Reference in New Issue
Block a user