aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/saa7127.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/saa7127.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/saa7127.c')
-rw-r--r--drivers/media/video/saa7127.c14
1 files changed, 4 insertions, 10 deletions
diff --git a/drivers/media/video/saa7127.c b/drivers/media/video/saa7127.c
index 304375ade4a9..bd9c4f3ad02e 100644
--- a/drivers/media/video/saa7127.c
+++ b/drivers/media/video/saa7127.c
@@ -615,15 +615,6 @@ static int saa7127_command(struct i2c_client *client,
615 615
616#ifdef CONFIG_VIDEO_ADV_DEBUG 616#ifdef CONFIG_VIDEO_ADV_DEBUG
617 case VIDIOC_DBG_G_REGISTER: 617 case VIDIOC_DBG_G_REGISTER:
618 {
619 struct v4l2_register *reg = arg;
620
621 if (reg->i2c_id != I2C_DRIVERID_SAA7127)
622 return -EINVAL;
623 reg->val = saa7127_read(client, reg->reg & 0xff);
624 break;
625 }
626
627 case VIDIOC_DBG_S_REGISTER: 618 case VIDIOC_DBG_S_REGISTER:
628 { 619 {
629 struct v4l2_register *reg = arg; 620 struct v4l2_register *reg = arg;
@@ -632,7 +623,10 @@ static int saa7127_command(struct i2c_client *client,
632 return -EINVAL; 623 return -EINVAL;
633 if (!capable(CAP_SYS_ADMIN)) 624 if (!capable(CAP_SYS_ADMIN))
634 return -EPERM; 625 return -EPERM;
635 saa7127_write(client, reg->reg & 0xff, reg->val & 0xff); 626 if (cmd == VIDIOC_DBG_G_REGISTER)
627 reg->val = saa7127_read(client, reg->reg & 0xff);
628 else
629 saa7127_write(client, reg->reg & 0xff, reg->val & 0xff);
636 break; 630 break;
637 } 631 }
638#endif 632#endif