[PATCH] Fix segfault if device_type set to pt but bstype not sg or bsg

Andy Grover <[email protected]>
Newsgroups org.kernel.vger.stgt
Message-ID <[email protected]>
If bstype not set to sg or bsg, it will default to rdwr, and we will
call target_cmd_perform instead of target_cmd_perform_passthrough when
accessing the device, which crashes tgtd. There's an existing check for
setting bstype without setting dev_type, but also add a check the other
way, setting dev_type without setting bstype to a valid value for pt.

Add an error message to the existing check, as well.

Signed-off-by: Andy Grover <[email protected]>
---
 usr/target.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/usr/target.c b/usr/target.c
index 0f3066b..6dce46b 100644
--- a/usr/target.c
+++ b/usr/target.c
@@ -547,6 +547,16 @@ tgtadm_err tgt_device_create(int tid, int dev_type, uint64_t lun, char *params,
 	if ((!strncmp(bst->bs_name, "bsg", 3) ||
 	     !strncmp(bst->bs_name, "sg", 2)) &&
 	    dev_type != TYPE_PT) {
+		eprintf("Must set device type to pt for bsg/sg bstype\n");
+		adm_err = TGTADM_INVALID_REQUEST;
+		goto out;
+	}
+
+	if (!(!strncmp(bst->bs_name, "bsg", 3) ||
+	     !strncmp(bst->bs_name, "sg", 2)) &&
+	    dev_type == TYPE_PT) {
+		eprintf("Must set bstype to bsg or sg for devicetype pt, not %s\n",
+			bst->bs_name);
 		adm_err = TGTADM_INVALID_REQUEST;
 		goto out;
 	}
-- 
1.8.5.3
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.