mlxsw: spectrum_switchdev: Check status of memory allocation
We can't rely on kzalloc() always succeeding, so check its return value.
Suppresses the following smatch error:
mlxsw_sp_switchdev_event() error: potential null dereference
'switchdev_work->fdb_info.addr'. (kzalloc returns
null)
Fixes: af06137892
("mlxsw: spectrum_switchdev: Add support for learning FDB through notification")
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>
This commit is contained in:
parent
a9265b804d
commit
6f497930af
@ -1916,6 +1916,8 @@ static int mlxsw_sp_switchdev_event(struct notifier_block *unused,
|
|||||||
memcpy(&switchdev_work->fdb_info, ptr,
|
memcpy(&switchdev_work->fdb_info, ptr,
|
||||||
sizeof(switchdev_work->fdb_info));
|
sizeof(switchdev_work->fdb_info));
|
||||||
switchdev_work->fdb_info.addr = kzalloc(ETH_ALEN, GFP_ATOMIC);
|
switchdev_work->fdb_info.addr = kzalloc(ETH_ALEN, GFP_ATOMIC);
|
||||||
|
if (!switchdev_work->fdb_info.addr)
|
||||||
|
goto err_addr_alloc;
|
||||||
ether_addr_copy((u8 *)switchdev_work->fdb_info.addr,
|
ether_addr_copy((u8 *)switchdev_work->fdb_info.addr,
|
||||||
fdb_info->addr);
|
fdb_info->addr);
|
||||||
/* Take a reference on the device. This can be either
|
/* Take a reference on the device. This can be either
|
||||||
@ -1932,6 +1934,10 @@ static int mlxsw_sp_switchdev_event(struct notifier_block *unused,
|
|||||||
mlxsw_core_schedule_work(&switchdev_work->work);
|
mlxsw_core_schedule_work(&switchdev_work->work);
|
||||||
|
|
||||||
return NOTIFY_DONE;
|
return NOTIFY_DONE;
|
||||||
|
|
||||||
|
err_addr_alloc:
|
||||||
|
kfree(switchdev_work);
|
||||||
|
return NOTIFY_BAD;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct notifier_block mlxsw_sp_switchdev_notifier = {
|
static struct notifier_block mlxsw_sp_switchdev_notifier = {
|
||||||
|
Loading…
Reference in New Issue
Block a user