mount - Generate correct argv[0] for crunches
authorMatthew Dillon <dillon@apollo.backplane.com>
Thu, 10 Apr 2014 01:12:43 +0000 (18:12 -0700)
committerMatthew Dillon <dillon@apollo.backplane.com>
Thu, 10 Apr 2014 01:15:12 +0000 (18:15 -0700)
* The crunchgen consolidated binary uses argv[0] to determine which program
  to actually run.  The 'mount' program was putting the vfstype in argv[0]
  instead of "mount_<vfstype>".

* This caused crunchgen to run 'hammer' instead of 'mount_hammer'.

* Fixes installer encrypted installs with hammer roots.

sbin/mount/mount.c

index 7673aa3..4820897 100644 (file)
@@ -361,7 +361,10 @@ mountfs(const char *vfstype, const char *spec, const char *name, int flags,
        struct statfs sf;
        pid_t pid;
        int argc, i, status;
-       char *optbuf, execname[MAXPATHLEN + 1], mntpath[MAXPATHLEN];
+       char *optbuf;
+       char *argv0;
+       char execname[MAXPATHLEN + 1];
+       char mntpath[MAXPATHLEN];
 
 #if __GNUC__
        (void)&optbuf;
@@ -399,8 +402,10 @@ mountfs(const char *vfstype, const char *spec, const char *name, int flags,
        if (flags & MNT_UPDATE)
                optbuf = catopt(optbuf, "update");
 
+       asprintf(&argv0, "mount_%s", vfstype);
+
        argc = 0;
-       argv[argc++] = vfstype;
+       argv[argc++] = argv0;
        mangle(optbuf, &argc, argv);
        argv[argc++] = spec;
        argv[argc++] = name;
@@ -422,8 +427,8 @@ mountfs(const char *vfstype, const char *spec, const char *name, int flags,
        case 0:                                 /* Child. */
                /* Go find an executable. */
                for (edir = edirs; *edir; edir++) {
-                       snprintf(execname,
-                           sizeof(execname), "%s/mount_%s", *edir, vfstype);
+                       snprintf(execname, sizeof(execname),
+                                "%s/mount_%s", *edir, vfstype);
                        execv(execname, __DECONST(char * const *, argv));
                }
                if (errno == ENOENT) {