Author: jimharris
Date: Thu Jul  4 00:00:59 2013
New Revision: 252667
URL: http://svnweb.freebsd.org/changeset/base/252667

Log:
  MFC r252274:
  
    Ensure that a device node is specified when invoking the identify or reset
    commands.
  
    Also improve the checking of device node names, so that better error
    messages are displayed when incorrect names are specified.
  
  Sponsored by: Intel

Modified:
  stable/9/sbin/nvmecontrol/identify.c
  stable/9/sbin/nvmecontrol/nvmecontrol.c
  stable/9/sbin/nvmecontrol/reset.c
Directory Properties:
  stable/9/sbin/nvmecontrol/   (props changed)

Modified: stable/9/sbin/nvmecontrol/identify.c
==============================================================================
--- stable/9/sbin/nvmecontrol/identify.c        Wed Jul  3 23:59:08 2013        
(r252666)
+++ stable/9/sbin/nvmecontrol/identify.c        Thu Jul  4 00:00:59 2013        
(r252667)
@@ -200,6 +200,10 @@ identify_ctrlr(int argc, char *argv[])
                }
        }
 
+       /* Check that a controller was specified. */
+       if (optind >= argc)
+               identify_usage();
+
        open_dev(argv[optind], &fd, 1, 1);
        read_controller_data(fd, &cdata);
        close(fd);
@@ -245,6 +249,10 @@ identify_ns(int argc, char *argv[])
                }
        }
 
+       /* Check that a namespace was specified. */
+       if (optind >= argc)
+               identify_usage();
+
        /*
         * Check if the specified device node exists before continuing.
         *  This is a cleaner check for cases where the correct controller

Modified: stable/9/sbin/nvmecontrol/nvmecontrol.c
==============================================================================
--- stable/9/sbin/nvmecontrol/nvmecontrol.c     Wed Jul  3 23:59:08 2013        
(r252666)
+++ stable/9/sbin/nvmecontrol/nvmecontrol.c     Thu Jul  4 00:00:59 2013        
(r252667)
@@ -126,10 +126,22 @@ open_dev(const char *str, int *fd, int s
        struct stat     devstat;
        char            full_path[64];
 
+       if (!strnstr(str, NVME_CTRLR_PREFIX, strlen(NVME_CTRLR_PREFIX))) {
+               if (show_error)
+                       fprintf(stderr,
+                           "Controller/namespace IDs must begin with '%s'.\n",
+                           NVME_CTRLR_PREFIX);
+               if (exit_on_error)
+                       exit(EX_USAGE);
+               else
+                       return (EX_USAGE);
+       }
+
        snprintf(full_path, sizeof(full_path), "/dev/%s", str);
        if (stat(full_path, &devstat) != 0) {
                if (show_error)
-                       fprintf(stderr, "error\n");
+                       fprintf(stderr, "Could not stat %s. errno=%d (%s)\n",
+                           full_path, errno, strerror(errno));
                if (exit_on_error)
                        exit(EX_NOINPUT);
                else
@@ -139,8 +151,8 @@ open_dev(const char *str, int *fd, int s
        *fd = open(full_path, O_RDWR);
        if (*fd < 0) {
                if (show_error)
-                       printf("Could not open %s. errno=%d (%s)\n", full_path,
-                           errno, strerror(errno));
+                       fprintf(stderr, "Could not open %s. errno=%d (%s)\n",
+                           full_path, errno, strerror(errno));
                if (exit_on_error)
                        exit(EX_NOPERM);
                else

Modified: stable/9/sbin/nvmecontrol/reset.c
==============================================================================
--- stable/9/sbin/nvmecontrol/reset.c   Wed Jul  3 23:59:08 2013        
(r252666)
+++ stable/9/sbin/nvmecontrol/reset.c   Thu Jul  4 00:00:59 2013        
(r252667)
@@ -60,6 +60,10 @@ reset(int argc, char *argv[])
                }
        }
 
+       /* Check that a controller was specified. */
+       if (optind >= argc)
+               reset_usage();
+
        open_dev(argv[optind], &fd, 1, 1);
        if (ioctl(fd, NVME_RESET_CONTROLLER) < 0) {
                printf("Reset request to %s failed. errno=%d (%s)\n",
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to