SELinux: remove needless sel_div function
authorEric Paris <eparis@redhat.com>
Wed, 4 Apr 2012 17:46:46 +0000 (13:46 -0400)
committerEric Paris <eparis@redhat.com>
Mon, 9 Apr 2012 16:22:57 +0000 (12:22 -0400)
I'm not really sure what the idea behind the sel_div function is, but it's
useless.  Since a and b are both unsigned, it's impossible for a % b < 0.
That means that part of the function never does anything.  Thus it's just a
normal /.  Just do that instead.  I don't even understand what that operation
was supposed to mean in the signed case however....

If it was signed:
sel_div(-2, 4) == ((-2 / 4) - ((-2 % 4) < 0))
  ((0)      - ((-2)     < 0))
  ((0)      - (1))
  (-1)

What actually happens:
sel_div(-2, 4) == ((18446744073709551614 / 4) - ((18446744073709551614 % 4) < 0))
  ((4611686018427387903)      - ((2 < 0))
  (4611686018427387903        - 0)
  ((unsigned int)4611686018427387903)
  (4294967295)

Neither makes a whole ton of sense to me.  So I'm getting rid of the
function entirely.

Signed-off-by: Eric Paris <eparis@redhat.com>
security/selinux/selinuxfs.c

index f4b5a0b..640feaa 100644 (file)
@@ -1533,11 +1533,6 @@ static int sel_make_initcon_files(struct dentry *dir)
        return 0;
 }
 
-static inline unsigned int sel_div(unsigned long a, unsigned long b)
-{
-       return a / b - (a % b < 0);
-}
-
 static inline unsigned long sel_class_to_ino(u16 class)
 {
        return (class * (SEL_VEC_MAX + 1)) | SEL_CLASS_INO_OFFSET;
@@ -1545,7 +1540,7 @@ static inline unsigned long sel_class_to_ino(u16 class)
 
 static inline u16 sel_ino_to_class(unsigned long ino)
 {
-       return sel_div(ino & SEL_INO_MASK, SEL_VEC_MAX + 1);
+       return (ino & SEL_INO_MASK) / (SEL_VEC_MAX + 1);
 }
 
 static inline unsigned long sel_perm_to_ino(u16 class, u32 perm)