From: Sabrina Dubroca Date: Fri, 22 Apr 2016 09:28:06 +0000 (+0200) Subject: macsec: fix memory leaks around rx_handler (un)registration X-Git-Tag: v4.1.12-92~24^2~73 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=bf336e48adc7b42552174fbae4bf5ae6aeb0b1dc;p=users%2Fjedix%2Flinux-maple.git macsec: fix memory leaks around rx_handler (un)registration We leak a struct macsec_rxh_data when we unregister the rx_handler in macsec_dellink. We also leak a struct macsec_rxh_data in register_macsec_dev if we fail to register the rx_handler. Fixes: c09440f7dcb3 ("macsec: introduce IEEE 802.1AE driver") Signed-off-by: Sabrina Dubroca Acked-by: Hannes Frederic Sowa Signed-off-by: David S. Miller (cherry picked from commit 960d5848dbf1245cc3a310109897937207411c0c) Orabug: 24614549 Signed-off-by: Ethan Zhao Signed-off-by: Dhaval Giani --- diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c index 542fb60cd6b8a..742a65d727800 100644 --- a/drivers/net/macsec.c +++ b/drivers/net/macsec.c @@ -2931,8 +2931,10 @@ static void macsec_dellink(struct net_device *dev, struct list_head *head) unregister_netdevice_queue(dev, head); list_del_rcu(&macsec->secys); - if (list_empty(&rxd->secys)) + if (list_empty(&rxd->secys)) { netdev_rx_handler_unregister(real_dev); + kfree(rxd); + } macsec_del_dev(macsec); } @@ -2954,8 +2956,10 @@ static int register_macsec_dev(struct net_device *real_dev, err = netdev_rx_handler_register(real_dev, macsec_handle_frame, rxd); - if (err < 0) + if (err < 0) { + kfree(rxd); return err; + } } list_add_tail_rcu(&macsec->secys, &rxd->secys);