diff options
author | 2019-03-15 01:11:22 -0500 | |
---|---|---|
committer | 2019-03-16 11:43:14 -0700 | |
commit | 0fff9bd47e1341b5c4db862cc39fc68ce45f165d (patch) | |
tree | 7e3801697acdf467bf5c7f7abe263b9cde96ba45 /net/openvswitch | |
parent | net: openvswitch: fix a NULL pointer dereference (diff) | |
download | linux-0fff9bd47e1341b5c4db862cc39fc68ce45f165d.tar.gz linux-0fff9bd47e1341b5c4db862cc39fc68ce45f165d.tar.bz2 linux-0fff9bd47e1341b5c4db862cc39fc68ce45f165d.zip |
net: openvswitch: fix missing checks for nla_nest_start
nla_nest_start may fail and thus deserves a check.
The fix returns -EMSGSIZE when it fails.
Signed-off-by: Kangjie Lu <kjlu@umn.edu>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/openvswitch')
-rw-r--r-- | net/openvswitch/datapath.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/net/openvswitch/datapath.c b/net/openvswitch/datapath.c index 45d1469308b0..9dd158ab51b3 100644 --- a/net/openvswitch/datapath.c +++ b/net/openvswitch/datapath.c @@ -464,6 +464,10 @@ static int queue_userspace_packet(struct datapath *dp, struct sk_buff *skb, if (upcall_info->egress_tun_info) { nla = nla_nest_start(user_skb, OVS_PACKET_ATTR_EGRESS_TUN_KEY); + if (!nla) { + err = -EMSGSIZE; + goto out; + } err = ovs_nla_put_tunnel_info(user_skb, upcall_info->egress_tun_info); BUG_ON(err); @@ -472,6 +476,10 @@ static int queue_userspace_packet(struct datapath *dp, struct sk_buff *skb, if (upcall_info->actions_len) { nla = nla_nest_start(user_skb, OVS_PACKET_ATTR_ACTIONS); + if (!nla) { + err = -EMSGSIZE; + goto out; + } err = ovs_nla_put_actions(upcall_info->actions, upcall_info->actions_len, user_skb); |