|
@@ -3420,8 +3420,6 @@ static int fd_getgeo(struct block_device *bdev, struct hd_geometry *geo)
|
|
|
static int fd_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd,
|
|
|
unsigned long param)
|
|
|
{
|
|
|
-#define FD_IOCTL_ALLOWED (mode & (FMODE_WRITE|FMODE_WRITE_IOCTL))
|
|
|
-
|
|
|
int drive = (long)bdev->bd_disk->private_data;
|
|
|
int type = ITYPE(UDRS->fd_device);
|
|
|
int i;
|
|
@@ -3454,7 +3452,7 @@ static int fd_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd,
|
|
|
return ret;
|
|
|
|
|
|
/* permission checks */
|
|
|
- if (((cmd & 0x40) && !FD_IOCTL_ALLOWED) ||
|
|
|
+ if (((cmd & 0x40) && !(mode & (FMODE_WRITE | FMODE_WRITE_IOCTL))) ||
|
|
|
((cmd & 0x80) && !capable(CAP_SYS_ADMIN)))
|
|
|
return -EPERM;
|
|
|
|