From: Xiaoke Wang Date: Mon, 13 Dec 2021 08:27:15 +0000 (+0800) Subject: thunderbolt: Check return value of kmemdup() in icm_handle_event() X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=3cc1c6de458e0e58c413c3c35802ca96e55bbdbe;p=linux.git thunderbolt: Check return value of kmemdup() in icm_handle_event() kmemdup() may return NULL if there is not enough memory available. Check this and bail out early in this case. While there move INIT_WORK() to happen after we have allocated all the memory needed for the event handling to avoid doing unnecessary work. Signed-off-by: Xiaoke Wang Signed-off-by: Mika Westerberg --- diff --git a/drivers/thunderbolt/icm.c b/drivers/thunderbolt/icm.c index 6255f1ef95994..fff0c740c8f33 100644 --- a/drivers/thunderbolt/icm.c +++ b/drivers/thunderbolt/icm.c @@ -1741,8 +1741,13 @@ static void icm_handle_event(struct tb *tb, enum tb_cfg_pkg_type type, if (!n) return; - INIT_WORK(&n->work, icm_handle_notification); n->pkg = kmemdup(buf, size, GFP_KERNEL); + if (!n->pkg) { + kfree(n); + return; + } + + INIT_WORK(&n->work, icm_handle_notification); n->tb = tb; queue_work(tb->wq, &n->work);