lkml.org 
[lkml]   [2021]   [May]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 065/323] media: i2c: adv7842: fix possible use-after-free in adv7842_remove()
    Date
    From: Yang Yingliang <yangyingliang@huawei.com>

    [ Upstream commit 4a15275b6a18597079f18241c87511406575179a ]

    This driver's remove path calls cancel_delayed_work(). However, that
    function does not wait until the work function finishes. This means
    that the callback function may still be running after the driver's
    remove function has finished, which would result in a use-after-free.

    Fix by calling cancel_delayed_work_sync(), which ensures that
    the work is properly cancelled, no longer running, and unable
    to re-schedule itself.

    Reported-by: Hulk Robot <hulkci@huawei.com>
    Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/media/i2c/adv7842.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    diff --git a/drivers/media/i2c/adv7842.c b/drivers/media/i2c/adv7842.c
    index dcce8d030e5d..c28bf94a7409 100644
    --- a/drivers/media/i2c/adv7842.c
    +++ b/drivers/media/i2c/adv7842.c
    @@ -3599,7 +3599,7 @@ static int adv7842_remove(struct i2c_client *client)
    struct adv7842_state *state = to_state(sd);

    adv7842_irq_enable(sd, false);
    - cancel_delayed_work(&state->delayed_work_enable_hotplug);
    + cancel_delayed_work_sync(&state->delayed_work_enable_hotplug);
    v4l2_device_unregister_subdev(sd);
    media_entity_cleanup(&sd->entity);
    adv7842_unregister_clients(sd);
    --
    2.30.2


    \
     
     \ /
      Last update: 2021-05-20 12:32    [from the cache]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and my Meterkast|Read the blog