aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/tvp5150.c
diff options
context:
space:
mode:
authorTrent Piepho <xyzzy@speakeasy.org>2007-01-30 21:25:41 -0500
committerMauro Carvalho Chehab <mchehab@infradead.org>2007-02-21 10:35:10 -0500
commit62d50addf0774115adaa9e01e09099c3d7daa13d (patch)
tree5490c0acef3aa645c6974437b3ca7a508ed755a3 /drivers/media/video/tvp5150.c
parente7b58f5259a81dbd9fbfea79408d272f44eb894f (diff)
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/tvp5150.c')
-rw-r--r--drivers/media/video/tvp5150.c14
1 files changed, 4 insertions, 10 deletions
diff --git a/drivers/media/video/tvp5150.c b/drivers/media/video/tvp5150.c
index 65d4389690a0..886b5df7c9d1 100644
--- a/drivers/media/video/tvp5150.c
+++ b/drivers/media/video/tvp5150.c
@@ -951,15 +951,6 @@ static int tvp5150_command(struct i2c_client *c,
951 951
952#ifdef CONFIG_VIDEO_ADV_DEBUG 952#ifdef CONFIG_VIDEO_ADV_DEBUG
953 case VIDIOC_DBG_G_REGISTER: 953 case VIDIOC_DBG_G_REGISTER:
954 {
955 struct v4l2_register *reg = arg;
956
957 if (reg->i2c_id != I2C_DRIVERID_TVP5150)
958 return -EINVAL;
959 reg->val = tvp5150_read(c, reg->reg & 0xff);
960 break;
961 }
962
963 case VIDIOC_DBG_S_REGISTER: 954 case VIDIOC_DBG_S_REGISTER:
964 { 955 {
965 struct v4l2_register *reg = arg; 956 struct v4l2_register *reg = arg;
@@ -968,7 +959,10 @@ static int tvp5150_command(struct i2c_client *c,
968 return -EINVAL; 959 return -EINVAL;
969 if (!capable(CAP_SYS_ADMIN)) 960 if (!capable(CAP_SYS_ADMIN))
970 return -EPERM; 961 return -EPERM;
971 tvp5150_write(c, reg->reg & 0xff, reg->val & 0xff); 962 if (cmd == VIDIOC_DBG_G_REGISTER)
963 reg->val = tvp5150_read(c, reg->reg & 0xff);
964 else
965 tvp5150_write(c, reg->reg & 0xff, reg->val & 0xff);
972 break; 966 break;
973 } 967 }
974#endif 968#endif