summaryrefslogtreecommitdiffstats
path: root/drivers/media/video/upd64031a.c
diff options
context:
space:
mode:
authorTrent Piepho <xyzzy@speakeasy.org>2007-01-30 23:25:41 -0300
committerMauro Carvalho Chehab <mchehab@infradead.org>2007-02-21 13:35:10 -0200
commit62d50addf0774115adaa9e01e09099c3d7daa13d (patch)
tree5490c0acef3aa645c6974437b3ca7a508ed755a3 /drivers/media/video/upd64031a.c
parente7b58f5259a81dbd9fbfea79408d272f44eb894f (diff)
downloadtalos-obmc-linux-62d50addf0774115adaa9e01e09099c3d7daa13d.tar.gz
talos-obmc-linux-62d50addf0774115adaa9e01e09099c3d7daa13d.zip
V4L/DVB (5163): Add checks for CAP_SYS_ADMIN to VIDIOC_DBG_G_REGISTER
Before, root privileges were only needed to set hardware registers, not to read them. On some hardware, reading from the wrong place at the wrong time can hang the machine. So, to be consistent, root privileges are required to read registers on all hardware. Signed-off-by: Trent Piepho <xyzzy@speakeasy.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Diffstat (limited to 'drivers/media/video/upd64031a.c')
-rw-r--r--drivers/media/video/upd64031a.c16
1 files changed, 4 insertions, 12 deletions
diff --git a/drivers/media/video/upd64031a.c b/drivers/media/video/upd64031a.c
index 0eee82ba52bc..b3b5fd536dc3 100644
--- a/drivers/media/video/upd64031a.c
+++ b/drivers/media/video/upd64031a.c
@@ -163,26 +163,18 @@ static int upd64031a_command(struct i2c_client *client, unsigned int cmd, void *
#ifdef CONFIG_VIDEO_ADV_DEBUG
case VIDIOC_DBG_G_REGISTER:
- {
- struct v4l2_register *reg = arg;
-
- if (reg->i2c_id != I2C_DRIVERID_UPD64031A)
- return -EINVAL;
- reg->val = upd64031a_read(client, reg->reg & 0xff);
- break;
- }
-
case VIDIOC_DBG_S_REGISTER:
{
struct v4l2_register *reg = arg;
- u8 addr = reg->reg & 0xff;
- u8 val = reg->val & 0xff;
if (reg->i2c_id != I2C_DRIVERID_UPD64031A)
return -EINVAL;
if (!capable(CAP_SYS_ADMIN))
return -EPERM;
- upd64031a_write(client, addr, val);
+ if (cmd == VIDIOC_DBG_G_REGISTER)
+ reg->val = upd64031a_read(client, reg->reg & 0xff);
+ else
+ upd64031a_write(client, reg->reg & 0xff, reg->val & 0xff);
break;
}
#endif
OpenPOWER on IntegriCloud