[openib-general] [patch] userspace/management/diags/src/sminfo.c - cmdline processing fix

Sasha Khapyorsky sashak at voltaire.com
Tue Jan 17 02:10:00 PST 2006


Hello Hal,

There is small bug in sminfo's cmdline processing, this will segfault
when option argument is missing (like 'sminfo -a'). The "fast and dirty"
fix is inlined.

The same problem exists with most diag tools, so I think we need to
rework AGRBEGIN { ... } ARGEND stuff (actually remove it from
libibcommon since it is used by diag tools only). I can do it if there
are no objections.

Regards,
Sasha.


This fast fix for invalid ARGF() usage in sminfo.c.

Signed-off-by: Sasha Khapyorsky <sashak at voltaire.com>

Index: diags/src/sminfo.c
===================================================================
--- diags/src/sminfo.c	(revision 5017)
+++ diags/src/sminfo.c	(working copy)
@@ -49,6 +49,8 @@
 
 #define IBERROR(fmt, args...)	iberror(__FUNCTION__, fmt, ## args)
 
+#define SAFE_ARGF() (*(argv+1) ? ARGF() : ( usage(), NULL ) )
+
 static void
 iberror(const char *fn, char *msg, ...)
 {
@@ -116,10 +118,10 @@
 
 	ARGBEGIN {
 	case 'C':
-		ca = ARGF();
+		ca = SAFE_ARGF();
 		break;
 	case 'P':
-		ca_port = strtoul(ARGF(), 0, 0);
+		ca_port = strtoul(SAFE_ARGF(), 0, 0);
 		break;
 	case 'd':
 		ibdebug++;
@@ -137,17 +139,17 @@
 		dest_type = IB_DEST_GUID;
 		break;
 	case 't':
-		timeout = strtoul(ARGF(), 0, 0);
+		timeout = strtoul(SAFE_ARGF(), 0, 0);
 		madrpc_set_timeout(timeout);
 		break;
 	case 'a':
-		act = strtoul(ARGF(), 0, 0);
+		act = strtoul(SAFE_ARGF(), 0, 0);
 		break;
 	case 's':
-		state = strtoul(ARGF(), 0, 0);
+		state = strtoul(SAFE_ARGF(), 0, 0);
 		break;
 	case 'p':
-		prio = strtoul(ARGF(), 0, 0);
+		prio = strtoul(SAFE_ARGF(), 0, 0);
 		break;
 	case 'V':
 		fprintf(stderr, "%s %s\n", argv0, get_build_version() );



More information about the general mailing list