nbd: fix ioctl permissions
Subsystems (2)
PATCH 1/1 nbd: fix ioctl permissions
Hi Marcelo,
Here's a patch for nbd that Rogier recently sent me. It allows non-root to do BLKGETSIZE, et al. on nbd devices, which he needs for his data recovery applications.
Tested against 2.4.29. Please apply.
Thanks,
Paul
From: Rogier Wolff <[email protected]>
Signed-off-by Paul Clements <[email protected]>
Description: We shouldn't need CAP_SYS_ADMIN to ask for disk capacity and such.
===
drivers/block/nbd.c +14 -7
@@ -408,10 +408,7 @@int dev, error, temp;struct request sreq ; -/* Anyone capable of this syscall can do *real bad* things */ -if (!capable (CAP_SYS_ADMIN )) -return -EPERM ;if (!inode)return -EINVAL ; dev =MINOR (inode->i_rdev);
@@ -419,6 +416,20 @@return -ENODEV ; lo = &nbd_dev[dev]; + +/* these are innocent, but.... */ +switch (cmd) { +case BLKGETSIZE : +return put_user (nbd_bytesizes[dev] >>9 , (unsigned long *) arg); +case BLKGETSIZE64 : +return put_user ((u64 )nbd_bytesizes[dev], (u64 *) arg); + } + +/* ... anyone capable of any of the below ioctls can do *real bad* +things */ +if (!capable (CAP_SYS_ADMIN )) +return -EPERM ; +switch (cmd) {case NBD_DISCONNECT :printk ("NBD_DISCONNECT\n" );
@@ -524,10 +535,6 @@ dev, lo->queue_head.next, lo->queue_head.prev, requests_in, requests_out);return 0 ;#endif -case BLKGETSIZE : -return put_user (nbd_bytesizes[dev] >>9 , (unsigned long *) arg); -case BLKGETSIZE64 : -return put_user ((u64 )nbd_bytesizes[dev], (u64 *) arg); }return -EINVAL ; }