diff options
Diffstat (limited to 'security')
-rw-r--r-- | security/selinux/selinuxfs.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/security/selinux/selinuxfs.c b/security/selinux/selinuxfs.c index 097bc0409553..aca099aa2ed3 100644 --- a/security/selinux/selinuxfs.c +++ b/security/selinux/selinuxfs.c | |||
@@ -105,6 +105,7 @@ enum sel_inos { | |||
105 | static unsigned long sel_last_ino = SEL_INO_NEXT - 1; | 105 | static unsigned long sel_last_ino = SEL_INO_NEXT - 1; |
106 | 106 | ||
107 | #define SEL_INITCON_INO_OFFSET 0x01000000 | 107 | #define SEL_INITCON_INO_OFFSET 0x01000000 |
108 | #define SEL_BOOL_INO_OFFSET 0x02000000 | ||
108 | #define SEL_INO_MASK 0x00ffffff | 109 | #define SEL_INO_MASK 0x00ffffff |
109 | 110 | ||
110 | #define TMPBUFLEN 12 | 111 | #define TMPBUFLEN 12 |
@@ -782,8 +783,6 @@ static struct inode *sel_make_inode(struct super_block *sb, int mode) | |||
782 | return ret; | 783 | return ret; |
783 | } | 784 | } |
784 | 785 | ||
785 | #define BOOL_INO_OFFSET 30 | ||
786 | |||
787 | static ssize_t sel_read_bool(struct file *filep, char __user *buf, | 786 | static ssize_t sel_read_bool(struct file *filep, char __user *buf, |
788 | size_t count, loff_t *ppos) | 787 | size_t count, loff_t *ppos) |
789 | { | 788 | { |
@@ -811,14 +810,14 @@ static ssize_t sel_read_bool(struct file *filep, char __user *buf, | |||
811 | } | 810 | } |
812 | 811 | ||
813 | inode = filep->f_path.dentry->d_inode; | 812 | inode = filep->f_path.dentry->d_inode; |
814 | cur_enforcing = security_get_bool_value(inode->i_ino - BOOL_INO_OFFSET); | 813 | cur_enforcing = security_get_bool_value(inode->i_ino&SEL_INO_MASK); |
815 | if (cur_enforcing < 0) { | 814 | if (cur_enforcing < 0) { |
816 | ret = cur_enforcing; | 815 | ret = cur_enforcing; |
817 | goto out; | 816 | goto out; |
818 | } | 817 | } |
819 | 818 | ||
820 | length = scnprintf(page, PAGE_SIZE, "%d %d", cur_enforcing, | 819 | length = scnprintf(page, PAGE_SIZE, "%d %d", cur_enforcing, |
821 | bool_pending_values[inode->i_ino - BOOL_INO_OFFSET]); | 820 | bool_pending_values[inode->i_ino&SEL_INO_MASK]); |
822 | ret = simple_read_from_buffer(buf, count, ppos, page, length); | 821 | ret = simple_read_from_buffer(buf, count, ppos, page, length); |
823 | out: | 822 | out: |
824 | mutex_unlock(&sel_mutex); | 823 | mutex_unlock(&sel_mutex); |
@@ -870,7 +869,7 @@ static ssize_t sel_write_bool(struct file *filep, const char __user *buf, | |||
870 | new_value = 1; | 869 | new_value = 1; |
871 | 870 | ||
872 | inode = filep->f_path.dentry->d_inode; | 871 | inode = filep->f_path.dentry->d_inode; |
873 | bool_pending_values[inode->i_ino - BOOL_INO_OFFSET] = new_value; | 872 | bool_pending_values[inode->i_ino&SEL_INO_MASK] = new_value; |
874 | length = count; | 873 | length = count; |
875 | 874 | ||
876 | out: | 875 | out: |
@@ -1034,7 +1033,7 @@ static int sel_make_bools(void) | |||
1034 | isec->sid = sid; | 1033 | isec->sid = sid; |
1035 | isec->initialized = 1; | 1034 | isec->initialized = 1; |
1036 | inode->i_fop = &sel_bool_ops; | 1035 | inode->i_fop = &sel_bool_ops; |
1037 | inode->i_ino = i + BOOL_INO_OFFSET; | 1036 | inode->i_ino = i|SEL_BOOL_INO_OFFSET; |
1038 | d_add(dentry, inode); | 1037 | d_add(dentry, inode); |
1039 | } | 1038 | } |
1040 | bool_num = num; | 1039 | bool_num = num; |