Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
This commit is contained in:
@@ -317,7 +317,7 @@ static int tunnel_key_init(struct net *net, struct nlattr *nla,
|
||||
&metadata->u.tun_info,
|
||||
opts_len, extack);
|
||||
if (ret < 0)
|
||||
goto err_out;
|
||||
goto release_tun_meta;
|
||||
}
|
||||
|
||||
metadata->u.tun_info.mode |= IP_TUNNEL_INFO_TX;
|
||||
@@ -333,23 +333,24 @@ static int tunnel_key_init(struct net *net, struct nlattr *nla,
|
||||
&act_tunnel_key_ops, bind, true);
|
||||
if (ret) {
|
||||
NL_SET_ERR_MSG(extack, "Cannot create TC IDR");
|
||||
goto err_out;
|
||||
goto release_tun_meta;
|
||||
}
|
||||
|
||||
ret = ACT_P_CREATED;
|
||||
} else if (!ovr) {
|
||||
tcf_idr_release(*a, bind);
|
||||
NL_SET_ERR_MSG(extack, "TC IDR already exists");
|
||||
return -EEXIST;
|
||||
ret = -EEXIST;
|
||||
goto release_tun_meta;
|
||||
}
|
||||
|
||||
t = to_tunnel_key(*a);
|
||||
|
||||
params_new = kzalloc(sizeof(*params_new), GFP_KERNEL);
|
||||
if (unlikely(!params_new)) {
|
||||
tcf_idr_release(*a, bind);
|
||||
NL_SET_ERR_MSG(extack, "Cannot allocate tunnel key parameters");
|
||||
return -ENOMEM;
|
||||
ret = -ENOMEM;
|
||||
exists = true;
|
||||
goto release_tun_meta;
|
||||
}
|
||||
params_new->tcft_action = parm->t_action;
|
||||
params_new->tcft_enc_metadata = metadata;
|
||||
@@ -367,6 +368,9 @@ static int tunnel_key_init(struct net *net, struct nlattr *nla,
|
||||
|
||||
return ret;
|
||||
|
||||
release_tun_meta:
|
||||
dst_release(&metadata->dst);
|
||||
|
||||
err_out:
|
||||
if (exists)
|
||||
tcf_idr_release(*a, bind);
|
||||
@@ -408,8 +412,10 @@ static int tunnel_key_geneve_opts_dump(struct sk_buff *skb,
|
||||
nla_put_u8(skb, TCA_TUNNEL_KEY_ENC_OPT_GENEVE_TYPE,
|
||||
opt->type) ||
|
||||
nla_put(skb, TCA_TUNNEL_KEY_ENC_OPT_GENEVE_DATA,
|
||||
opt->length * 4, opt + 1))
|
||||
opt->length * 4, opt + 1)) {
|
||||
nla_nest_cancel(skb, start);
|
||||
return -EMSGSIZE;
|
||||
}
|
||||
|
||||
len -= sizeof(struct geneve_opt) + opt->length * 4;
|
||||
src += sizeof(struct geneve_opt) + opt->length * 4;
|
||||
@@ -423,7 +429,7 @@ static int tunnel_key_opts_dump(struct sk_buff *skb,
|
||||
const struct ip_tunnel_info *info)
|
||||
{
|
||||
struct nlattr *start;
|
||||
int err;
|
||||
int err = -EINVAL;
|
||||
|
||||
if (!info->options_len)
|
||||
return 0;
|
||||
@@ -435,9 +441,11 @@ static int tunnel_key_opts_dump(struct sk_buff *skb,
|
||||
if (info->key.tun_flags & TUNNEL_GENEVE_OPT) {
|
||||
err = tunnel_key_geneve_opts_dump(skb, info);
|
||||
if (err)
|
||||
return err;
|
||||
goto err_out;
|
||||
} else {
|
||||
return -EINVAL;
|
||||
err_out:
|
||||
nla_nest_cancel(skb, start);
|
||||
return err;
|
||||
}
|
||||
|
||||
nla_nest_end(skb, start);
|
||||
|
Reference in New Issue
Block a user