[stgt] [PATCH] RFC prevent tgtd from segfault when attempting to configure passthrough device
Mark Harvey
markh794 at gmail.com
Thu Jul 8 03:44:05 CEST 2010
This was one way to resolve the segfault if .cmd_passthrough() is NULL
>From cd9c358476090d1a1758aba03157c30e60c53e57 Mon Sep 17 00:00:00 2001
From: Mark Harvey <markh794 at gmail.com>
Date: Thu, 8 Jul 2010 06:48:02 +1000
Subject: Prevent segfault if passthrough params not correct.
If user neglects to supply '--device_type=pt' when creating a
passthrough device, tgtd would segfault due to .cmd_passthrough() being NULL
Signed-off-by: Mark Harvey <markh794 at gmail.com>
---
usr/bs_sg.c | 8 ++++++++
usr/mmc.c | 1 +
usr/osd.c | 1 +
usr/sbc.c | 1 +
usr/scc.c | 6 ++++++
usr/smc.c | 1 +
usr/ssc.c | 2 +-
usr/tgtd.h | 1 +
8 files changed, 20 insertions(+), 1 deletions(-)
diff --git a/usr/bs_sg.c b/usr/bs_sg.c
index bee6df5..9e519c0 100644
--- a/usr/bs_sg.c
+++ b/usr/bs_sg.c
@@ -89,6 +89,14 @@ static int graceful_write(int fd, void *p_write,
int to_write)
return 0;
}
+/* Used by other target types to prevent segfault if .cmd_passthrough() null */
+int bs_sg_error(int host_no, struct scsi_cmd *cmd)
+{
+ eprintf("++++ Backing store incorrectly configured ++++\n");
+ eprintf("++++ Need to add \'--device-type=pt\' ++++\n");
+ return -1;
+}
+
static int bs_sg_rw(int host_no, struct scsi_cmd *cmd)
{
int ret;
diff --git a/usr/mmc.c b/usr/mmc.c
index 0e34167..a8f6c03 100644
--- a/usr/mmc.c
+++ b/usr/mmc.c
@@ -2305,6 +2305,7 @@ static struct device_type_template mmc_template = {
.lu_online = mmc_lu_online,
.lu_offline = mmc_lu_offline,
.lu_exit = spc_lu_exit,
+ .cmd_passthrough = bs_sg_error,
.ops = {
{spc_test_unit,},
{spc_illegal_op,},
diff --git a/usr/osd.c b/usr/osd.c
index d81c6cf..22c7fc7 100644
--- a/usr/osd.c
+++ b/usr/osd.c
@@ -60,6 +60,7 @@ static struct device_type_template osd_template = {
.lu_online = spc_lu_online,
.lu_offline = spc_lu_offline,
.lu_exit = spc_lu_exit,
+ .cmd_passthrough = bs_sg_error,
.ops = {
/* 0x00 */
{spc_test_unit,},
diff --git a/usr/sbc.c b/usr/sbc.c
index a048d53..2798600 100644
--- a/usr/sbc.c
+++ b/usr/sbc.c
@@ -269,6 +269,7 @@ static struct device_type_template sbc_template = {
.lu_online = spc_lu_online,
.lu_offline = spc_lu_offline,
.lu_exit = spc_lu_exit,
+ .cmd_passthrough = bs_sg_error,
.ops = {
{spc_test_unit,},
{spc_illegal_op,},
diff --git a/usr/scc.c b/usr/scc.c
index 27bc07b..fe404df 100644
--- a/usr/scc.c
+++ b/usr/scc.c
@@ -52,6 +52,11 @@ static int scc_lu_init(struct scsi_lu *lu)
return 0;
}
+static int scc_cmd_passthrough(int host_id, struct scsi_cmd *cmd)
+{
+ return -1;
+}
+
static struct device_type_template scc_template = {
.type = TYPE_RAID,
.lu_init = scc_lu_init,
@@ -59,6 +64,7 @@ static struct device_type_template scc_template = {
.lu_online = spc_lu_online,
.lu_offline = spc_lu_offline,
.lu_exit = spc_lu_exit,
+ .cmd_passthrough = scc_cmd_passthrough,
.ops = {
{spc_test_unit,},
{spc_illegal_op,},
diff --git a/usr/smc.c b/usr/smc.c
index c0f25d6..1e76edf 100644
--- a/usr/smc.c
+++ b/usr/smc.c
@@ -787,6 +787,7 @@ struct device_type_template smc_template = {
.lu_online = spc_lu_online,
.lu_offline = spc_lu_offline,
.lu_config = smc_lu_config,
+ .cmd_passthrough = bs_sg_error,
.ops = {
{spc_test_unit,},
{spc_illegal_op,},
diff --git a/usr/ssc.c b/usr/ssc.c
index 84fa317..4adde2b 100644
--- a/usr/ssc.c
+++ b/usr/ssc.c
@@ -168,7 +168,7 @@ static struct device_type_template ssc_template = {
.lu_online = spc_lu_online,
.lu_offline = spc_lu_offline,
.lu_exit = spc_lu_exit,
-
+ .cmd_passthrough = bs_sg_error,
.ops = {
{spc_test_unit,},
{ssc_rw,},
diff --git a/usr/tgtd.h b/usr/tgtd.h
index 9c44994..5386438 100644
--- a/usr/tgtd.h
+++ b/usr/tgtd.h
@@ -349,4 +349,5 @@ int do_tgt_event_modify(int efd, struct list_head
*list, int fd, int events);
int run_ext_program(const char *cmd,
void (*callback)(void *data, int result), void *data);
+int bs_sg_error(int host_id, struct scsi_cmd *cmd);
#endif
--
1.6.3.3
--
To unsubscribe from this list: send the line "unsubscribe stgt" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
More information about the stgt
mailing list