This adds missing commands to the table from SBC and related standards.
Only commands that affect the medium are added.  Commands that affect
other state of the LUN are all privileged, with the sole exception of START
STOP UNIT (which has always been allowed for all file descriptors.  I do not
really agree with that and it's probably an artifact of when /dev/cdrom had
r--r--r-- permissions, but I'm not trying to change that.

Cc: "James E.J. Bottomley" <jbottom...@parallels.com>
Cc: linux-s...@kernel.org
Cc: Jens Axboe <ax...@kernel.dk>
Signed-off-by: Paolo Bonzini <pbonz...@redhat.com>
---
 block/scsi_ioctl.c |   23 +++++++++++++++++++++--
 1 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/block/scsi_ioctl.c b/block/scsi_ioctl.c
index 49cd98a..74f3678 100644
--- a/block/scsi_ioctl.c
+++ b/block/scsi_ioctl.c
@@ -166,25 +166,44 @@ static void blk_set_cmd_filter_defaults(struct 
blk_cmd_filter *filter)
        sgio_bitmap_set(0x08, D|T|    W|  O                  , read);  // 
READ(6)
        sgio_bitmap_set(0x25, D|      W|R|O|      B|K        , read);  // READ 
CAPACITY(10)
        sgio_bitmap_set(0x28, D|      W|R|O|      B|K        , read);  // 
READ(10)
+       sgio_bitmap_set(0x29, D|      W|R|O                  , read);  // READ 
GENERATION
+       sgio_bitmap_set(0x2D,             O                  , read);  // READ 
UPDATED BLOCK
        sgio_bitmap_set(0x2F, D|      W|R|O                  , read);  // 
VERIFY(10)
+       sgio_bitmap_set(0x34, D|      W|  O|        K        , read);  // 
PRE-FETCH(10)
        sgio_bitmap_set(0x37, D|          O                  , read);  // READ 
DEFECT DATA(10)
        sgio_bitmap_set(0x3E, D|      W|  O                  , read);  // READ 
LONG(10)
        sgio_bitmap_set(0x88, D|T|    W|  O|      B          , read);  // 
READ(16)
        sgio_bitmap_set(0x8F, D|T|    W|  O|      B          , read);  // 
VERIFY(16)
+       sgio_bitmap_set(0x90, D|      W|  O|      B          , read);  // 
PRE-FETCH(16)
        sgio_bitmap_set(0xA8, D|      W|R|O                  , read);  // 
READ(12)
+       sgio_bitmap_set(0xAF, D|      W|  O                  , read);  // 
VERIFY(12)
+       sgio_bitmap_set(0xB7, D|          O                  , read);  // READ 
DEFECT DATA(12)
 
        /* write */
 
        sgio_bitmap_set(0x04, D|        R|O                  , write); // 
FORMAT UNIT
+       sgio_bitmap_set(0x07, D|      W|  O                  , write); // 
REASSIGN BLOCKS
        sgio_bitmap_set(0x0A, D|T|    W|  O                  , write); // 
WRITE(6)
        sgio_bitmap_set(0x2A, D|      W|R|O|      B|K        , write); // 
WRITE(10)
+       sgio_bitmap_set(0x2C, D|        R|O                  , write); // 
ERASE(10)
        sgio_bitmap_set(0x2E, D|      W|R|O|      B|K        , write); // WRITE 
AND VERIFY(10)
        sgio_bitmap_set(0x35, D|      W|R|O|      B|K        , write); // 
SYNCHRONIZE CACHE(10)
+       sgio_bitmap_set(0x38,         W|  O|        K        , write); // 
MEDIUM SCAN
+       sgio_bitmap_set(0x3D,             O                  , write); // 
UPDATE BLOCK
        sgio_bitmap_set(0x3F, D|      W|  O                  , write); // WRITE 
LONG(10)
+       sgio_bitmap_set(0x41, D                              , write); // WRITE 
SAME(10)
        sgio_bitmap_set(0x42, D                              , write); // UNMAP
        sgio_bitmap_set(0x48, D|                  B          , write); // 
SANITIZE
        sgio_bitmap_set(0x51, D                              , write); // 
XPWRITE(10)
+       sgio_bitmap_set(0x53, D                              , write); // 
XDWRITEREAD(10)
+       sgio_bitmap_set(0x85, D|                  B          , write); // ATA 
PASS-THROUGH(16)
+       sgio_bitmap_set(0x89, D                              , write); // 
COMPARE AND WRITE
+       sgio_bitmap_set(0x8B, D                              , write); // 
ORWRITE
        sgio_bitmap_set(0x8A, D|T|    W|  O|      B          , write); // 
WRITE(16)
+       sgio_bitmap_set(0x8E, D|      W|  O|      B          , write); // WRITE 
AND VERIFY(16)
+       sgio_bitmap_set(0x91, D|      W|  O|      B          , write); // 
SYNCHRONIZE CACHE(16)
+       sgio_bitmap_set(0x93, D                              , write); // WRITE 
SAME(16)
+       sgio_bitmap_set(0xA1, D|                  B          , write); // ATA 
PASS-THROUGH(12)
        sgio_bitmap_set(0xAA, D|      W|R|O                  , write); // 
WRITE(12)
        sgio_bitmap_set(0xAC,             O                  , write); // 
ERASE(12)
        sgio_bitmap_set(0xAE, D|      W|  O                  , write); // WRITE 
AND VERIFY(12)
@@ -241,12 +260,12 @@ static void blk_set_cmd_filter_defaults(struct 
blk_cmd_filter *filter)
        sgio_bitmap_set(0xBD,           R                    , read);  // 
MECHANISM STATUS
        sgio_bitmap_set(0xBE,           R                    , read);  // READ 
CD
 
-       sgio_bitmap_set(0x53, D|        R                    , write); // 
RESERVE TRACK / XDWRITEREAD(10)
+       sgio_bitmap_set(0x53,           R                    , write); // 
RESERVE TRACK
        sgio_bitmap_set(0x54,           R                    , write); // SEND 
OPC INFORMATION
        sgio_bitmap_set(0x58,           R                    , write); // 
REPAIR TRACK
        sgio_bitmap_set(0x5B,           R                    , write); // CLOSE 
TRACK/SESSION
        sgio_bitmap_set(0x5D,           R                    , write); // SEND 
CUE SHEET
-       sgio_bitmap_set(0xA1, D|        R|        B          , write); // BLANK 
/ ATA PASS-THROUGH(12)
+       sgio_bitmap_set(0xA1,           R                    , write); // BLANK
        sgio_bitmap_set(0xA2,           R                    , write); // SEND 
EVENT
        sgio_bitmap_set(0xA3,           R                    , write); // SEND 
KEY
        sgio_bitmap_set(0xA6,           R                    , write); // 
LOAD/UNLOAD C/DVD
-- 
1.7.1


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to