summaryrefslogtreecommitdiff
path: root/drivers/media
diff options
context:
space:
mode:
authorYang Yingliang <yangyingliang@huawei.com>2021-04-06 15:48:12 +0200
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2021-05-22 10:38:18 +0200
commit1a4e1d660a6e63ae19f8c7600a8753bfb9cb2f96 (patch)
tree06b89774a4edf23d53b2808e8afed7394764ecfa /drivers/media
parent5f49160ef68d01ce992ae951438f5df02d51cb6e (diff)
media: i2c: adv7511-v4l2: fix possible use-after-free in adv7511_remove()
[ Upstream commit 2c9541720c66899adf6f3600984cf3ef151295ad ] 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>
Diffstat (limited to 'drivers/media')
-rw-r--r--drivers/media/i2c/adv7511-v4l2.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/media/i2c/adv7511-v4l2.c b/drivers/media/i2c/adv7511-v4l2.c
index b35400e4e9af..e85777dfe81d 100644
--- a/drivers/media/i2c/adv7511-v4l2.c
+++ b/drivers/media/i2c/adv7511-v4l2.c
@@ -1570,7 +1570,7 @@ static int adv7511_remove(struct i2c_client *client)
client->addr << 1, client->adapter->name);
adv7511_init_setup(sd);
- cancel_delayed_work(&state->edid_handler);
+ cancel_delayed_work_sync(&state->edid_handler);
i2c_unregister_device(state->i2c_edid);
i2c_unregister_device(state->i2c_pktmem);
destroy_workqueue(state->work_queue);