lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Thu, 23 May 2013 15:59:35 +0200
From:	Paolo Bonzini <pbonzini@...hat.com>
To:	linux-kernel@...r.kernel.org
Cc:	tj@...nel.org, "James E.J. Bottomley" <JBottomley@...allels.com>,
	linux-scsi@...r.kernel.org, Jens Axboe <axboe@...nel.dk>
Subject: [PATCH v3 part3 7/7] sg_io: cleanup and complete whitelist for disks

This splits entries for SBC commands that conflict with MMC, and adds
missing commands to the table from SBC and related standards.
Only commands that affect the medium are added:

- I added ATA PASS-THROUGH(16) because ATA PASS-THROUGH(12) is present;
using the (16) version is preferrable because (12) conflicts with the
destructive MMC command BLANK; see the sg_sat_identify man page for
example.

- WRITE SAME(16) and WRITE SAME(10) are used by discard and zero-out
feature.  For discard, the UNMAP command is already in the whitelist.
For zero-out, omitting them produces "WRITE SAME failed.  Manually
zeroing" errors in the log.

- COMPARE AND WRITE is used by cluster software.

- WRITE AND VERIFY(16) is needed to support >2TB disks, and the
corresponding 12-byte CDB is whitelisted already.  I didn't get reports
about _these_ command but I do get bug reports about >2TB disks.
SYNCHRONIZE CACHE(16) is similarly the 16-byte extension of another
10-byte command.

- similarly, in the case of VERIFY(12) and READ DEFECT DATA(12) the
same command was already whitelisted for another command length.

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" <JBottomley@...allels.com>
Cc: linux-scsi@...r.kernel.org
Cc: Jens Axboe <axboe@...nel.dk>
Signed-off-by: Paolo Bonzini <pbonzini@...hat.com>
---
 block/scsi_ioctl.c | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/block/scsi_ioctl.c b/block/scsi_ioctl.c
index 0bf0820..216cd17 100644
--- a/block/scsi_ioctl.c
+++ b/block/scsi_ioctl.c
@@ -170,6 +170,8 @@ static void blk_set_cmd_filter_defaults(struct blk_cmd_filter *filter)
 	sgio_bitmap_set(0x88, D|      W|  O|      B        , read);  /* READ(16) */
 	sgio_bitmap_set(0x8F, D|      W|  O|      B        , read);  /* VERIFY(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) */
 
 	/* block devices, write */
 
@@ -179,10 +181,18 @@ static void blk_set_cmd_filter_defaults(struct blk_cmd_filter *filter)
 	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(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(0x8A, D|      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) */
@@ -239,12 +249,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.8.1.4

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

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ