3.16.62-rc1 review patch. If anyone has any objections, please let me know.
------------------
From: Haishuang Yan yanhaishuang@cmss.chinamobile.com
commit 17b463654f41f0aa334efd5a6efeab8a6e9496f7 upstream.
vxlan_fdb_append may return error, so add the proper check, otherwise it will cause memory leak.
Signed-off-by: Haishuang Yan yanhaishuang@cmss.chinamobile.com
Changes in v2: - Unnecessary to initialize rc to zero. Acked-by: Jiri Benc jbenc@redhat.com Signed-off-by: David S. Miller davem@davemloft.net Signed-off-by: Ben Hutchings ben@decadent.org.uk --- drivers/net/vxlan.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-)
--- a/drivers/net/vxlan.c +++ b/drivers/net/vxlan.c @@ -695,6 +695,7 @@ static int vxlan_fdb_create(struct vxlan struct vxlan_rdst *rd = NULL; struct vxlan_fdb *f; int notify = 0; + int rc;
f = __vxlan_find_mac(vxlan, mac); if (f) { @@ -729,8 +730,7 @@ static int vxlan_fdb_create(struct vxlan if ((flags & NLM_F_APPEND) && (is_multicast_ether_addr(f->eth_addr) || is_zero_ether_addr(f->eth_addr))) { - int rc = vxlan_fdb_append(f, ip, port, vni, ifindex, - &rd); + rc = vxlan_fdb_append(f, ip, port, vni, ifindex, &rd);
if (rc < 0) return rc; @@ -760,7 +760,11 @@ static int vxlan_fdb_create(struct vxlan INIT_LIST_HEAD(&f->remotes); memcpy(f->eth_addr, mac, ETH_ALEN);
- vxlan_fdb_append(f, ip, port, vni, ifindex, &rd); + rc = vxlan_fdb_append(f, ip, port, vni, ifindex, &rd); + if (rc < 0) { + kfree(f); + return rc; + }
++vxlan->addrcnt; hlist_add_head_rcu(&f->hlist,