Commit 39f37095 authored by Dan Carpenter's avatar Dan Carpenter Committed by David S. Miller

lwtunnel: fix error path in lwtunnel_fill_encap()

We recently added a check to see if nla_nest_start() fails.  There are
two issues with that.  First, if it fails then I don't think we should
call nla_nest_cancel().  Second, it's slightly convoluted but the
current code returns success but we should return -EMSGSIZE instead.

Fixes: a50fe0ff ("lwtunnel: check return value of nla_nest_start")
Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
Acked-by: default avatarDavid Ahern <dsa@cumulusnetworks.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 77041e89
...@@ -203,7 +203,7 @@ int lwtunnel_fill_encap(struct sk_buff *skb, struct lwtunnel_state *lwtstate) ...@@ -203,7 +203,7 @@ int lwtunnel_fill_encap(struct sk_buff *skb, struct lwtunnel_state *lwtstate)
{ {
const struct lwtunnel_encap_ops *ops; const struct lwtunnel_encap_ops *ops;
struct nlattr *nest; struct nlattr *nest;
int ret = -EINVAL; int ret;
if (!lwtstate) if (!lwtstate)
return 0; return 0;
...@@ -212,10 +212,11 @@ int lwtunnel_fill_encap(struct sk_buff *skb, struct lwtunnel_state *lwtstate) ...@@ -212,10 +212,11 @@ int lwtunnel_fill_encap(struct sk_buff *skb, struct lwtunnel_state *lwtstate)
lwtstate->type > LWTUNNEL_ENCAP_MAX) lwtstate->type > LWTUNNEL_ENCAP_MAX)
return 0; return 0;
ret = -EOPNOTSUPP;
nest = nla_nest_start(skb, RTA_ENCAP); nest = nla_nest_start(skb, RTA_ENCAP);
if (!nest) if (!nest)
goto nla_put_failure; return -EMSGSIZE;
ret = -EOPNOTSUPP;
rcu_read_lock(); rcu_read_lock();
ops = rcu_dereference(lwtun_encaps[lwtstate->type]); ops = rcu_dereference(lwtun_encaps[lwtstate->type]);
if (likely(ops && ops->fill_encap)) if (likely(ops && ops->fill_encap))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment