procd: initd: fix path allocation in early_insmod
[project/procd.git] / initd / zram.c
index 49480af..da1795a 100644 (file)
@@ -53,23 +53,23 @@ static int
 early_insmod(char *module)
 {
        pid_t pid = fork();
+       char *modprobe[] = { "/sbin/modprobe", NULL, NULL };
 
        if (!pid) {
-               char *modprobe[] = { "/usr/sbin/modprobe", NULL, NULL };
                char *path;
                struct utsname ver;
 
                uname(&ver);
-               path = alloca(sizeof(module) + strlen(ver.release) + 1);
+               path = alloca(strlen(module) + strlen(ver.release) + 1);
                sprintf(path, module, ver.release);
                modprobe[1] = path;
                execvp(modprobe[0], modprobe);
-               ERROR("Can't exec /usr/sbin/modprobe\n");
+               ERROR("Can't exec %s\n", modprobe[0]);
                exit(-1);
        }
 
        if (pid <= 0) {
-               ERROR("Can't exec /usr/sbin/modprobe\n");
+               ERROR("Can't exec %s\n", modprobe[0]);
                return -1;
        } else {
                waitpid(pid, NULL, 0);
@@ -107,10 +107,10 @@ mount_zram_on_tmp(void)
        pid = fork();
        if (!pid) {
                execvp(mkfs[0], mkfs);
-               ERROR("Can't exec /sbin/mkfs.ext4\n");
+               ERROR("Can't exec %s\n", mkfs[0]);
                exit(-1);
        } else if (pid <= 0) {
-               ERROR("Can't exec /sbin/mkfs.ext4\n");
+               ERROR("Can't exec %s\n", mkfs[0]);
                return -1;
        } else {
                waitpid(pid, NULL, 0);
@@ -124,5 +124,11 @@ mount_zram_on_tmp(void)
 
        LOG("Using up to %ld kB of RAM as ZRAM storage on /mnt\n", zramsize);
 
+       ret = chmod("/tmp", 01777);
+       if (ret < 0) {
+               ERROR("Can't set /tmp mode to 1777: %s\n", strerror(errno));
+               return errno;
+       }
+
        return 0;
 }