[stgt] (another?) tgtd segfault

FUJITA Tomonori fujita.tomonori at lab.ntt.co.jp
Fri Aug 13 10:00:33 CEST 2010


On Tue, 10 Aug 2010 01:32:41 +0100
Pete Batard <pbatard at gmail.com> wrote:

> Not sure if this is related to the issue previously reported by Tomasz.
> 
> Platform: Linux (Slackware 13.0), ARM (Marvell Feroceon), Kernel 2.6.31.3
> 
> When issuing the following command:
> 
> tgtadm --lld iscsi --mode target --op new --tid 1 --target sheeva:disk1
> 
> I am observing the following in 1.0.7, as well as with tgtd compiled 
> from the latest git:
> ----------------------------------------------------------------------
> root at sheeva:~# gdb --args tgtd -f -d 4
> GNU gdb 6.8
> Copyright (C) 2008 Free Software Foundation, Inc.
> License GPLv3+: GNU GPL version 3 or later 
> <http://gnu.org/licenses/gpl.html>
> This is free software: you are free to change and redistribute it.
> There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
> and "show warranty" for details.
> This GDB was configured as "arm-slackware-linux-gnueabi"...
> (gdb) run
> Starting program: /usr/sbin/tgtd -f -d 4
> [Thread debugging using libthread_db enabled]
> tgtd: bs_init(312) use signalfd notification
> tgtd: tgt_mgmt(346) 143 0 1 0 1 0 ffffffffffffffff 
> targetname=sheeva:disk1 4559
> tgtd: tgt_device_create(445) 1 0
> [New Thread 0x40020350 (LWP 4559)]
> 
> Program received signal SIGSEGV, Segmentation fault.
> [Switching to Thread 0x40020350 (LWP 4559)]
> 0x400f8b7c in strspn () from /lib/libc.so.6
> ----------------------------------------------------------------------

The above works fine on my x86_64 box with 1.0.7 (and the latest git).

Looks like tgtd crashes somewhere in tgt_device_create().

This patch works?

diff --git a/usr/target.c b/usr/target.c
index bb5b0c8..e006501 100644
--- a/usr/target.c
+++ b/usr/target.c
@@ -434,7 +434,7 @@ int tgt_device_create(int tid, int dev_type, uint64_t lun, char *params,
 		      int backing)
 {
 	char *p, *path = NULL, *bstype = NULL, *bsoflags = NULL;
-	int ret = 0, lu_bsoflags;
+	int ret = 0, lu_bsoflags = 0;
 	struct target *target;
 	struct scsi_lu *lu, *pos;
 	struct device_type_template *t;
@@ -497,10 +497,12 @@ int tgt_device_create(int tid, int dev_type, uint64_t lun, char *params,
 		goto out;
 	}
 
-	lu_bsoflags = str_to_open_flags(bsoflags);
-	if (lu_bsoflags == -1) {
-		ret = TGTADM_INVALID_REQUEST;
-		goto out;
+	if (bsoflags) {
+		lu_bsoflags = str_to_open_flags(bsoflags);
+		if (lu_bsoflags == -1) {
+			ret = TGTADM_INVALID_REQUEST;
+			goto out;
+		}
 	}
 
 	if (lu_bsoflags && !(bst->bs_oflags_supported & lu_bsoflags)) {

--
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