V4L/DVB (11260): v4l2-ioctl: Check format for S_PARM and G_PARM

Return EINVAL if VIDIOC_S/G_PARM is called for a buffer type that the
driver doesn't define a ->vidioc_try_fmt_XXX() method for.  Several other
ioctls, like QUERYBUF, QBUF, and DQBUF, etc.  do this too.  It saves each
driver from having to check if the buffer type is one that it supports.

Signed-off-by: Trent Piepho <xyzzy@speakeasy.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
Trent Piepho 2009-03-28 22:25:35 -03:00 committed by Mauro Carvalho Chehab
parent 3fd8ab30c1
commit 34796bc009
1 changed files with 7 additions and 0 deletions

View File

@ -1551,6 +1551,9 @@ static long __video_do_ioctl(struct file *file,
struct v4l2_streamparm *p = arg;
if (ops->vidioc_g_parm) {
ret = check_fmt(ops, p->type);
if (ret)
break;
ret = ops->vidioc_g_parm(file, fh, p);
} else {
if (p->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
@ -1570,6 +1573,10 @@ static long __video_do_ioctl(struct file *file,
if (!ops->vidioc_s_parm)
break;
ret = check_fmt(ops, p->type);
if (ret)
break;
dbgarg(cmd, "type=%d\n", p->type);
ret = ops->vidioc_s_parm(file, fh, p);
break;