mirror of
https://github.com/torvalds/linux.git
synced 2026-09-23 05:04:02 +02:00
media: video-i2c: fix kthread error pointer left in kthread_vid_cap on failure
kthread_run() returns an ERR_PTR on failure, not NULL.
When start_streaming() fails, data->kthread_vid_cap is left holding
this error pointer instead of being cleared.
This causes two subsequent bugs:
1. A future call to start_streaming() sees a non-NULL kthread_vid_cap
and returns 0 (success) immediately, without actually starting the
capture thread.
2. A call to stop_streaming() checks 'kthread_vid_cap == NULL' which
is false for an error pointer, and proceeds to call kthread_stop()
on the error pointer, leading to a kernel crash.
Fix this by resetting kthread_vid_cap to NULL on failure before
jumping to the error path.
Fixes: 5cebaac609 ("media: video-i2c: add video-i2c driver")
Cc: stable@vger.kernel.org
Signed-off-by: Uday Khare <udaykhare77@gmail.com>
Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
This commit is contained in:
parent
4e1d07cfc1
commit
76e379754b
|
|
@ -523,8 +523,12 @@ static int start_streaming(struct vb2_queue *vq, unsigned int count)
|
|||
data->kthread_vid_cap = kthread_run(video_i2c_thread_vid_cap, data,
|
||||
"%s-vid-cap", data->v4l2_dev.name);
|
||||
ret = PTR_ERR_OR_ZERO(data->kthread_vid_cap);
|
||||
if (!ret)
|
||||
return 0;
|
||||
if (ret) {
|
||||
data->kthread_vid_cap = NULL;
|
||||
goto error_rpm_put;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
error_rpm_put:
|
||||
pm_runtime_put_autosuspend(dev);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user