]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
IB/core: Fix memory leak in cm_req_handler error flows
authorMatan Barak <matanb@mellanox.com>
Tue, 29 Jul 2014 13:42:37 +0000 (16:42 +0300)
committerMukesh Kacker <mukesh.kacker@oracle.com>
Tue, 7 Jul 2015 21:45:22 +0000 (14:45 -0700)
In cm_req_handler error flows, sometimes
cm_id_priv->timewait_info isn't free'd.

Thanks to Yohad Tor for this fix.

Signed-off-by: Matan Barak <matanb@mellanox.com>
(Ported from Mellanox OFED 2.4)

Signed-off-by: Mukesh Kacker <mukesh.kacker@oracle.com>
drivers/infiniband/core/cm.c

index 8947def09b1c067a5e1c0546c27bba039cfcf0c0..302bf8c93eb5eb29197fc92fa414a776666e1dcc 100644 (file)
@@ -1553,8 +1553,7 @@ static int cm_req_handler(struct cm_work *work)
        listen_cm_id_priv = cm_match_req(work, cm_id_priv);
        if (!listen_cm_id_priv) {
                ret = -EINVAL;
-               kfree(cm_id_priv->timewait_info);
-               goto destroy;
+               goto free_timeinfo;
        }
 
        cm_id_priv->id.cm_handler = listen_cm_id_priv->id.cm_handler;
@@ -1607,6 +1606,8 @@ static int cm_req_handler(struct cm_work *work)
 rejected:
        atomic_dec(&cm_id_priv->refcount);
        cm_deref_id(listen_cm_id_priv);
+free_timeinfo:
+       kfree(cm_id_priv->timewait_info);
 destroy:
        ib_destroy_cm_id(cm_id);
        return ret;