Problem: The help command is a lie.

mini:~> memconfig      
Valid commands are :
    list
    set
    clear
Use help <command> for command-specific help
mini:~> memconfig help list
memconfig: can't open /dev/mem: Permission denied

Fix: Only open /dev/mem if we're going to use it.

Index: memconfig.c
===================================================================
RCS file: /home/tedu/cvs/src/usr.sbin/memconfig/memconfig.c,v
retrieving revision 1.13
diff -u -r1.13 memconfig.c
--- memconfig.c 20 Apr 2010 16:10:27 -0000      1.13
+++ memconfig.c 6 Jun 2011 00:21:38 -0000
@@ -106,17 +106,18 @@
 int
 main(int argc, char *argv[])
 {
-       int      i, memfd;
+       int      i, memfd = -1;
 
        if (argc < 2) {
                help(NULL);
        } else {
-               if ((memfd = open("/dev/mem", O_RDONLY)) == -1)
-                       err(1, "can't open /dev/mem");
-
                for (i = 0; functions[i].cmd != NULL; i++)
                        if (!strcmp(argv[1], functions[i].cmd))
                                break;
+               
+               if ((functions[i].func != helpfunc) &&
+                   (memfd = open("/dev/mem", O_RDONLY)) == -1)
+                       err(1, "can't open /dev/mem");
                functions[i].func(memfd, argc - 1, argv + 1);
                close(memfd);
        }

Reply via email to