V4L: ivtv: fix decoder crash regression
(cherry picked from commit ac9575f75c)
The video_ioctl2 conversion of ivtv in kernel 2.6.27 introduced a bug
causing decoder commands to crash. The decoder commands should have been
handled from the video_ioctl2 default handler, ensuring correct mapping
of the argument between user and kernel space. Unfortunately they ended
up before the video_ioctl2 call, causing random crashes.
Thanks to hannes@linus.priv.at for testing and helping me track down the
cause!
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
ef956570e7
commit
bbbfbf6d74
@ -1750,6 +1750,18 @@ static int ivtv_default(struct file *file, void *fh, int cmd, void *arg)
|
||||
break;
|
||||
}
|
||||
|
||||
case IVTV_IOC_DMA_FRAME:
|
||||
case VIDEO_GET_PTS:
|
||||
case VIDEO_GET_FRAME_COUNT:
|
||||
case VIDEO_GET_EVENT:
|
||||
case VIDEO_PLAY:
|
||||
case VIDEO_STOP:
|
||||
case VIDEO_FREEZE:
|
||||
case VIDEO_CONTINUE:
|
||||
case VIDEO_COMMAND:
|
||||
case VIDEO_TRY_COMMAND:
|
||||
return ivtv_decoder_ioctls(file, cmd, (void *)arg);
|
||||
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
@ -1792,18 +1804,6 @@ static long ivtv_serialized_ioctl(struct ivtv *itv, struct file *filp,
|
||||
ivtv_vapi(itv, CX2341X_DEC_SET_AUDIO_MODE, 2, itv->audio_bilingual_mode, itv->audio_stereo_mode);
|
||||
return 0;
|
||||
|
||||
case IVTV_IOC_DMA_FRAME:
|
||||
case VIDEO_GET_PTS:
|
||||
case VIDEO_GET_FRAME_COUNT:
|
||||
case VIDEO_GET_EVENT:
|
||||
case VIDEO_PLAY:
|
||||
case VIDEO_STOP:
|
||||
case VIDEO_FREEZE:
|
||||
case VIDEO_CONTINUE:
|
||||
case VIDEO_COMMAND:
|
||||
case VIDEO_TRY_COMMAND:
|
||||
return ivtv_decoder_ioctls(filp, cmd, (void *)arg);
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user