Commit ba86af37 authored by Shang XiaoJing's avatar Shang XiaoJing Committed by David S. Miller

net: lan966x: Fix potential null-ptr-deref in lan966x_stats_init()

lan966x_stats_init() calls create_singlethread_workqueue() and not
checked the ret value, which may return NULL. And a null-ptr-deref may
happen:

lan966x_stats_init()
    create_singlethread_workqueue() # failed, lan966x->stats_queue is NULL
    queue_delayed_work()
        queue_delayed_work_on()
            __queue_delayed_work()  # warning here, but continue
                __queue_work()      # access wq->flags, null-ptr-deref

Check the ret value and return -ENOMEM if it is NULL.

Fixes: 12c2d0a5 ("net: lan966x: add ethtool configuration and statistics")
Signed-off-by: default avatarShang XiaoJing <shangxiaojing@huawei.com>
Reviewed-by: default avatarHoratiu Vultur <horatiu.vultur@microchip.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 4e0c19fc
...@@ -716,6 +716,9 @@ int lan966x_stats_init(struct lan966x *lan966x) ...@@ -716,6 +716,9 @@ int lan966x_stats_init(struct lan966x *lan966x)
snprintf(queue_name, sizeof(queue_name), "%s-stats", snprintf(queue_name, sizeof(queue_name), "%s-stats",
dev_name(lan966x->dev)); dev_name(lan966x->dev));
lan966x->stats_queue = create_singlethread_workqueue(queue_name); lan966x->stats_queue = create_singlethread_workqueue(queue_name);
if (!lan966x->stats_queue)
return -ENOMEM;
INIT_DELAYED_WORK(&lan966x->stats_work, lan966x_check_stats_work); INIT_DELAYED_WORK(&lan966x->stats_work, lan966x_check_stats_work);
queue_delayed_work(lan966x->stats_queue, &lan966x->stats_work, queue_delayed_work(lan966x->stats_queue, &lan966x->stats_work,
LAN966X_STATS_CHECK_DELAY); LAN966X_STATS_CHECK_DELAY);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment