Make tmp directory world readable (RHBZ#610880).
authorRichard Jones <rjones@redhat.com>
Fri, 2 Jul 2010 16:52:51 +0000 (17:52 +0100)
committerRichard Jones <rjones@redhat.com>
Wed, 7 Jul 2010 14:03:51 +0000 (15:03 +0100)
If you have a restrictive umask (0077 for example) then
files in the tmp directory would be created with 0600
permissions.  Example:

drwx------.  2 rjones rjones     4096 Jul  2 17:52 .
drwxrwxrwt. 57 root   root     102400 Jul  2 17:52 ..
-rw-------.  1 rjones rjones 86328832 Jul  2 17:52 initrd
lrwxrwxrwx.  1 rjones rjones       46 Jul  2 17:52 kernel -> /boot/vmlinuz-2.6.33-0.40.rc7.git0.fc13.x86_64

This in itself is not a problem.  However in virt-v2v we also
change UID:GID and the result is that qemu is unable to read
the initrd file:

qemu: could not load initial ram disk '/tmp/libguestfs2ssynP/initrd'

With this patch we make the tmp directory and the files
world readable.  After the patch:

$ ls -la /tmp/libguestfsJFVzPg/
total 116192
drwxr-xr-x.  2 rjones rjones      4096 Jul  2 18:03 .
drwxrwxrwt. 56 root   root      102400 Jul  2 18:03 ..
-rw-r--r--.  1 rjones rjones 118869504 Jul  2 18:03 initrd
lrwxrwxrwx.  1 rjones rjones        46 Jul  2 18:03 kernel -> /boot/vmlinuz-2.6.33-0.40.rc7.git0.fc13.x86_64

src/guestfs.c

index 1439361..85a042a 100644 (file)
@@ -982,6 +982,14 @@ guestfs__launch (guestfs_h *g)
     }
   }
 
+  /* Allow anyone to read the temporary directory.  There are no
+   * secrets in the kernel or initrd files.  The socket in this
+   * directory won't be readable but anyone can see it exists if they
+   * want. (RHBZ#610880).
+   */
+  if (chmod (g->tmpdir, 0755) == -1)
+    fprintf (stderr, "chmod: %s: %m (ignored)\n", g->tmpdir);
+
   /* First search g->path for the supermin appliance, and try to
    * synthesize a kernel and initrd from that.  If it fails, we
    * try the path search again looking for a backup ordinary
@@ -1590,7 +1598,11 @@ build_supermin_appliance (guestfs_h *g, const char *path,
   *initrd = safe_malloc (g, len + 8);
   snprintf (*initrd, len+8, "%s/initrd", g->tmpdir);
 
+  /* Set a sensible umask in the subprocess, so kernel and initrd
+   * output files are world-readable (RHBZ#610880).
+   */
   snprintf (cmd, sizeof cmd,
+            "umask 0002; "
             "febootstrap-supermin-helper%s "
             "-k '%s/kmod.whitelist' "
             "'%s/supermin.d' "