mlxsw: core: Add missing rollback in error path
authorIdo Schimmel <idosch@mellanox.com>
Mon, 28 Nov 2016 17:01:25 +0000 (18:01 +0100)
committerDavid S. Miller <davem@davemloft.net>
Wed, 30 Nov 2016 01:48:51 +0000 (20:48 -0500)
Without this rollback, the thermal zone is still registered during the
error path, whereas its private data is freed upon the destruction of
the underlying bus device due to the use of devm_kzalloc(). This results
in use after free.

Fix this by calling mlxsw_thermal_fini() from the appropriate place in
the error path.

Fixes: a50c1e35650b ("mlxsw: core: Implement thermal zone")
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlxsw/core.c

index b21f88c66d1df5f686cb2483e09d539acb341d21..7a0ad39f2d0a1314185d99b09a6bedb9c8a7b35a 100644 (file)
@@ -1157,6 +1157,7 @@ err_debugfs_init:
        if (mlxsw_core->driver->fini)
                mlxsw_core->driver->fini(mlxsw_core);
 err_driver_init:
+       mlxsw_thermal_fini(mlxsw_core->thermal);
 err_thermal_init:
 err_hwmon_init:
        devlink_unregister(devlink);