IB/core: Fix potential memory leak while creating MAD agents
authorDaniel Jurgens <danielj@mellanox.com>
Sat, 2 Feb 2019 09:09:43 +0000 (11:09 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 8 May 2019 05:21:53 +0000 (07:21 +0200)
commit 6e88e672b69f0e627acdae74a527b730ea224b6b upstream.

If the MAD agents isn't allowed to manage the subnet, or fails to register
for the LSM notifier, the security context is leaked. Free the context in
these cases.

Fixes: 47a2b338fe63 ("IB/core: Enforce security on management datagrams")
Signed-off-by: Daniel Jurgens <danielj@mellanox.com>
Reviewed-by: Parav Pandit <parav@mellanox.com>
Reported-by: Parav Pandit <parav@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/infiniband/core/security.c

index 3de94b895d5b7e973c8463354af73fee5f283681..b79b61bd6ee4f2f256b4a5304f7c92cdfb4f87a6 100644 (file)
@@ -711,16 +711,20 @@ int ib_mad_agent_security_setup(struct ib_mad_agent *agent,
                                                agent->device->name,
                                                agent->port_num);
        if (ret)
-               return ret;
+               goto free_security;
 
        agent->lsm_nb.notifier_call = ib_mad_agent_security_change;
        ret = register_lsm_notifier(&agent->lsm_nb);
        if (ret)
-               return ret;
+               goto free_security;
 
        agent->smp_allowed = true;
        agent->lsm_nb_reg = true;
        return 0;
+
+free_security:
+       security_ib_free_security(agent->security);
+       return ret;
 }
 
 void ib_mad_agent_security_cleanup(struct ib_mad_agent *agent)