diff options
author | Kangjie Lu <kjlu@umn.edu> | 2019-03-15 07:11:22 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2019-03-16 19:43:14 +0100 |
commit | 0fff9bd47e1341b5c4db862cc39fc68ce45f165d (patch) | |
tree | 7e3801697acdf467bf5c7f7abe263b9cde96ba45 | |
parent | net: openvswitch: fix a NULL pointer dereference (diff) | |
download | linux-0fff9bd47e1341b5c4db862cc39fc68ce45f165d.tar.xz 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>
-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); |