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: a50fe0ffd7 ("lwtunnel: check return value of nla_nest_start")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Acked-by: David Ahern <dsa@cumulusnetworks.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
77041e89ce
commit
39f3709599
@@ -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)
|
|||||||
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))
|
||||||
|
|||||||
Reference in New Issue
Block a user