Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris...
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 25 Jan 2008 16:44:29 +0000 (08:44 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 25 Jan 2008 16:44:29 +0000 (08:44 -0800)
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/selinux-2.6:
  selinux: make mls_compute_sid always polyinstantiate
  security/selinux: constify function pointer tables and fields
  security: add a secctx_to_secid() hook
  security: call security_file_permission from rw_verify_area
  security: remove security_sb_post_mountroot hook
  Security: remove security.h include from mm.h
  Security: remove security_file_mmap hook sparse-warnings (NULL as 0).
  Security: add get, set, and cloning of superblock security information
  security/selinux: Add missing "space"

1  2 
init/do_mounts.c

diff --combined init/do_mounts.c
index 2ae5b84623992719c511256445876f15ce73f76b,31b2185ce3047a607b276bd83a1314ac06168e0f..1161dfd7b0d3d23a4f9968c973a5f578b42c341d
@@@ -55,6 -55,69 +55,6 @@@ static int __init readwrite(char *str
  __setup("ro", readonly);
  __setup("rw", readwrite);
  
 -static dev_t try_name(char *name, int part)
 -{
 -      char path[64];
 -      char buf[32];
 -      int range;
 -      dev_t res;
 -      char *s;
 -      int len;
 -      int fd;
 -      unsigned int maj, min;
 -
 -      /* read device number from .../dev */
 -
 -      sprintf(path, "/sys/block/%s/dev", name);
 -      fd = sys_open(path, 0, 0);
 -      if (fd < 0)
 -              goto fail;
 -      len = sys_read(fd, buf, 32);
 -      sys_close(fd);
 -      if (len <= 0 || len == 32 || buf[len - 1] != '\n')
 -              goto fail;
 -      buf[len - 1] = '\0';
 -      if (sscanf(buf, "%u:%u", &maj, &min) == 2) {
 -              /*
 -               * Try the %u:%u format -- see print_dev_t()
 -               */
 -              res = MKDEV(maj, min);
 -              if (maj != MAJOR(res) || min != MINOR(res))
 -                      goto fail;
 -      } else {
 -              /*
 -               * Nope.  Try old-style "0321"
 -               */
 -              res = new_decode_dev(simple_strtoul(buf, &s, 16));
 -              if (*s)
 -                      goto fail;
 -      }
 -
 -      /* if it's there and we are not looking for a partition - that's it */
 -      if (!part)
 -              return res;
 -
 -      /* otherwise read range from .../range */
 -      sprintf(path, "/sys/block/%s/range", name);
 -      fd = sys_open(path, 0, 0);
 -      if (fd < 0)
 -              goto fail;
 -      len = sys_read(fd, buf, 32);
 -      sys_close(fd);
 -      if (len <= 0 || len == 32 || buf[len - 1] != '\n')
 -              goto fail;
 -      buf[len - 1] = '\0';
 -      range = simple_strtoul(buf, &s, 10);
 -      if (*s)
 -              goto fail;
 -
 -      /* if partition is within range - we got it */
 -      if (part < range)
 -              return res + part;
 -fail:
 -      return 0;
 -}
 -
  /*
   *    Convert a name into device number.  We accept the following variants:
   *
   *    5) /dev/<disk_name>p<decimal> - same as the above, that form is
   *       used when disk name of partitioned disk ends on a digit.
   *
 - *    If name doesn't have fall into the categories above, we return 0.
 - *    Sysfs is used to check if something is a disk name - it has
 - *    all known disks under bus/block/devices.  If the disk name
 - *    contains slashes, name of sysfs node has them replaced with
 - *    bangs.  try_name() does the actual checks, assuming that sysfs
 - *    is mounted on rootfs /sys.
 + *    If name doesn't have fall into the categories above, we return (0,0).
 + *    block_class is used to check if something is a disk name. If the disk
 + *    name contains slashes, the device name has them replaced with
 + *    bangs.
   */
  
  dev_t name_to_dev_t(char *name)
        char s[32];
        char *p;
        dev_t res = 0;
 -      int part;
 -
 -#ifdef CONFIG_SYSFS
 -      int mkdir_err = sys_mkdir("/sys", 0700);
 -      if (sys_mount("sysfs", "/sys", "sysfs", 0, NULL) < 0)
 -              goto out;
 -#endif
  
        if (strncmp(name, "/dev/", 5) != 0) {
                unsigned maj, min;
                }
                goto done;
        }
 +
        name += 5;
        res = Root_NFS;
        if (strcmp(name, "nfs") == 0)
        for (p = s; *p; p++)
                if (*p == '/')
                        *p = '!';
 -      res = try_name(s, 0);
 -      if (res)
 -              goto done;
 -
 -      while (p > s && isdigit(p[-1]))
 -              p--;
 -      if (p == s || !*p || *p == '0')
 -              goto fail;
 -      part = simple_strtoul(p, NULL, 10);
 -      *p = '\0';
 -      res = try_name(s, part);
 +      res = blk_lookup_devt(s);
        if (res)
                goto done;
  
 -      if (p < s + 2 || !isdigit(p[-2]) || p[-1] != 'p')
 -              goto fail;
 -      p[-1] = '\0';
 -      res = try_name(s, part);
 +fail:
 +      return 0;
  done:
 -#ifdef CONFIG_SYSFS
 -      sys_umount("/sys", 0);
 -out:
 -      if (!mkdir_err)
 -              sys_rmdir("/sys");
 -#endif
        return res;
 -fail:
 -      res = 0;
 -      goto done;
  }
  
  static int __init root_dev_setup(char *line)
@@@ -378,6 -470,5 +378,5 @@@ void __init prepare_namespace(void
  out:
        sys_mount(".", "/", NULL, MS_MOVE, NULL);
        sys_chroot(".");
-       security_sb_post_mountroot();
  }