mlxsw: spectrum_switchdev: Check status of memory allocation
authorIdo Schimmel <idosch@mellanox.com>
Wed, 12 Jul 2017 07:12:55 +0000 (09:12 +0200)
committerDavid S. Miller <davem@davemloft.net>
Wed, 12 Jul 2017 15:15:52 +0000 (08:15 -0700)
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: af061378924f ("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>
drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c

index 4733fe918315fadb596976677358a575ea9107a2..656b2d3f1bee0e8aa5b1f328d5066d60f5e96099 100644 (file)
@@ -1916,6 +1916,8 @@ static int mlxsw_sp_switchdev_event(struct notifier_block *unused,
                memcpy(&switchdev_work->fdb_info, ptr,
                       sizeof(switchdev_work->fdb_info));
                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,
                                fdb_info->addr);
                /* 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);
 
        return NOTIFY_DONE;
+
+err_addr_alloc:
+       kfree(switchdev_work);
+       return NOTIFY_BAD;
 }
 
 static struct notifier_block mlxsw_sp_switchdev_notifier = {