From e10090489848902abd81125507a5aaf6599a5e82 Mon Sep 17 00:00:00 2001 From: Kai Makisara Date: Sun, 1 May 2005 18:11:55 +0300 Subject: [PATCH] --- yaml --- r: 2047 b: refs/heads/master c: 16c4b3e2071ad73e5cd2aa82961eed0414df6a7d h: refs/heads/master i: 2045: b0c8fb15146f27d55def9cc0555e9822b3bd4abd 2043: aa3c1ae13c83e65b98f3474f93244a97ec4119bd 2039: f93b14029f378fdfb08ba897f5f15c811b5d688c 2031: 0ee3316e684ea0342031c34f7a069e56e268205d 2015: 3961629057fa1ba22c496c93018180a59e2481ea 1983: a10713e6a823a11a0809112391464d1d7e0ba0d9 1919: ad4556a11030787e14084c53e76acdcb829a8be7 1791: 2d308cfa23ba972d80b5f43fd314fa8c2da39603 1535: 4587caf9727167d85fbe67f7b60481b22a1018b9 1023: 4a33e997c4dc3cd7e340898bcda07aca1f94243d v: v3 --- [refs] | 2 +- trunk/drivers/scsi/st.c | 19 +++++++++++++------ 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/[refs] b/[refs] index 0dd43362feb8..e7c16a94efb8 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: f80ed139343c37c897ae89c70f7736a6937172f5 +refs/heads/master: 16c4b3e2071ad73e5cd2aa82961eed0414df6a7d diff --git a/trunk/drivers/scsi/st.c b/trunk/drivers/scsi/st.c index 265d1eed64fa..03b902c20e09 100644 --- a/trunk/drivers/scsi/st.c +++ b/trunk/drivers/scsi/st.c @@ -17,7 +17,7 @@ Last modified: 18-JAN-1998 Richard Gooch Devfs support */ -static char *verstr = "20050312"; +static char *verstr = "20050501"; #include @@ -29,6 +29,7 @@ static char *verstr = "20050312"; #include #include #include +#include #include #include #include @@ -50,6 +51,7 @@ static char *verstr = "20050312"; #include #include #include +#include /* The driver prints some debugging information on the console if DEBUG @@ -3463,7 +3465,10 @@ static int st_ioctl(struct inode *inode, struct file *file, case SCSI_IOCTL_GET_BUS_NUMBER: break; default: - if (!capable(CAP_SYS_ADMIN)) + if ((cmd_in == SG_IO || + cmd_in == SCSI_IOCTL_SEND_COMMAND || + cmd_in == CDROM_SEND_PACKET) && + !capable(CAP_SYS_RAWIO)) i = -EPERM; else i = scsi_cmd_ioctl(file, STp->disk, cmd_in, p); @@ -3471,10 +3476,12 @@ static int st_ioctl(struct inode *inode, struct file *file, return i; break; } - if (!capable(CAP_SYS_ADMIN) && - (cmd_in == SCSI_IOCTL_START_UNIT || cmd_in == SCSI_IOCTL_STOP_UNIT)) - return -EPERM; - return scsi_ioctl(STp->device, cmd_in, p); + retval = scsi_ioctl(STp->device, cmd_in, p); + if (!retval && cmd_in == SCSI_IOCTL_STOP_UNIT) { /* unload */ + STp->rew_at_close = 0; + STp->ready = ST_NO_TAPE; + } + return retval; out: up(&STp->lock);