diff options
author | Trent Piepho <xyzzy@speakeasy.org> | 2007-01-30 18:25:41 -0800 |
---|---|---|
committer | Trent Piepho <xyzzy@speakeasy.org> | 2007-01-30 18:25:41 -0800 |
commit | 0b945b64fba3381dfc97c66722fe76193f0008d3 (patch) | |
tree | e1e4420bd109756179544bda17819bee53d32ba1 /linux/drivers/media/video/saa7127.c | |
parent | 89d170b32b5620e4c3be940b825188493bd8f597 (diff) | |
download | mediapointer-dvb-s2-0b945b64fba3381dfc97c66722fe76193f0008d3.tar.gz mediapointer-dvb-s2-0b945b64fba3381dfc97c66722fe76193f0008d3.tar.bz2 |
Add checks for CAP_SYS_ADMIN to VIDIOC_DBG_G_REGISTER
From: Trent Piepho <xyzzy@speakeasy.org>
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>
Diffstat (limited to 'linux/drivers/media/video/saa7127.c')
-rw-r--r-- | linux/drivers/media/video/saa7127.c | 14 |
1 files changed, 4 insertions, 10 deletions
diff --git a/linux/drivers/media/video/saa7127.c b/linux/drivers/media/video/saa7127.c index 70d898697..e1e697579 100644 --- a/linux/drivers/media/video/saa7127.c +++ b/linux/drivers/media/video/saa7127.c @@ -627,15 +627,6 @@ static int saa7127_command(struct i2c_client *client, #ifdef CONFIG_VIDEO_ADV_DEBUG case VIDIOC_DBG_G_REGISTER: - { - struct v4l2_register *reg = arg; - - if (reg->i2c_id != I2C_DRIVERID_SAA7127) - return -EINVAL; - reg->val = saa7127_read(client, reg->reg & 0xff); - break; - } - case VIDIOC_DBG_S_REGISTER: { struct v4l2_register *reg = arg; @@ -644,7 +635,10 @@ static int saa7127_command(struct i2c_client *client, return -EINVAL; if (!capable(CAP_SYS_ADMIN)) return -EPERM; - saa7127_write(client, reg->reg & 0xff, reg->val & 0xff); + if (cmd == VIDIOC_DBG_G_REGISTER) + reg->val = saa7127_read(client, reg->reg & 0xff); + else + saa7127_write(client, reg->reg & 0xff, reg->val & 0xff); break; } #endif |