aboutsummaryrefslogtreecommitdiffstats
path: root/security/tomoyo
diff options
context:
space:
mode:
Diffstat (limited to 'security/tomoyo')
-rw-r--r--security/tomoyo/common.c61
-rw-r--r--security/tomoyo/common.h12
-rw-r--r--security/tomoyo/file.c47
-rw-r--r--security/tomoyo/tomoyo.c61
-rw-r--r--security/tomoyo/tomoyo.h12
5 files changed, 132 insertions, 61 deletions
diff --git a/security/tomoyo/common.c b/security/tomoyo/common.c
index e0d0354008b7..6c6061682438 100644
--- a/security/tomoyo/common.c
+++ b/security/tomoyo/common.c
@@ -842,52 +842,27 @@ bool tomoyo_domain_quota_is_ok(struct tomoyo_domain_info * const domain)
842 if (ptr->type & TOMOYO_ACL_DELETED) 842 if (ptr->type & TOMOYO_ACL_DELETED)
843 continue; 843 continue;
844 switch (tomoyo_acl_type2(ptr)) { 844 switch (tomoyo_acl_type2(ptr)) {
845 struct tomoyo_single_path_acl_record *acl1; 845 struct tomoyo_single_path_acl_record *acl;
846 struct tomoyo_double_path_acl_record *acl2; 846 u32 perm;
847 u16 perm; 847 u8 i;
848 case TOMOYO_TYPE_SINGLE_PATH_ACL: 848 case TOMOYO_TYPE_SINGLE_PATH_ACL:
849 acl1 = container_of(ptr, 849 acl = container_of(ptr,
850 struct tomoyo_single_path_acl_record, 850 struct tomoyo_single_path_acl_record,
851 head); 851 head);
852 perm = acl1->perm; 852 perm = acl->perm | (((u32) acl->perm_high) << 16);
853 if (perm & (1 << TOMOYO_TYPE_EXECUTE_ACL)) 853 for (i = 0; i < TOMOYO_MAX_SINGLE_PATH_OPERATION; i++)
854 count++; 854 if (perm & (1 << i))
855 if (perm & 855 count++;
856 ((1 << TOMOYO_TYPE_READ_ACL) | 856 if (perm & (1 << TOMOYO_TYPE_READ_WRITE_ACL))
857 (1 << TOMOYO_TYPE_WRITE_ACL))) 857 count -= 2;
858 count++;
859 if (perm & (1 << TOMOYO_TYPE_CREATE_ACL))
860 count++;
861 if (perm & (1 << TOMOYO_TYPE_UNLINK_ACL))
862 count++;
863 if (perm & (1 << TOMOYO_TYPE_MKDIR_ACL))
864 count++;
865 if (perm & (1 << TOMOYO_TYPE_RMDIR_ACL))
866 count++;
867 if (perm & (1 << TOMOYO_TYPE_MKFIFO_ACL))
868 count++;
869 if (perm & (1 << TOMOYO_TYPE_MKSOCK_ACL))
870 count++;
871 if (perm & (1 << TOMOYO_TYPE_MKBLOCK_ACL))
872 count++;
873 if (perm & (1 << TOMOYO_TYPE_MKCHAR_ACL))
874 count++;
875 if (perm & (1 << TOMOYO_TYPE_TRUNCATE_ACL))
876 count++;
877 if (perm & (1 << TOMOYO_TYPE_SYMLINK_ACL))
878 count++;
879 if (perm & (1 << TOMOYO_TYPE_REWRITE_ACL))
880 count++;
881 break; 858 break;
882 case TOMOYO_TYPE_DOUBLE_PATH_ACL: 859 case TOMOYO_TYPE_DOUBLE_PATH_ACL:
883 acl2 = container_of(ptr, 860 perm = container_of(ptr,
884 struct tomoyo_double_path_acl_record, 861 struct tomoyo_double_path_acl_record,
885 head); 862 head)->perm;
886 perm = acl2->perm; 863 for (i = 0; i < TOMOYO_MAX_DOUBLE_PATH_OPERATION; i++)
887 if (perm & (1 << TOMOYO_TYPE_LINK_ACL)) 864 if (perm & (1 << i))
888 count++; 865 count++;
889 if (perm & (1 << TOMOYO_TYPE_RENAME_ACL))
890 count++;
891 break; 866 break;
892 } 867 }
893 } 868 }
@@ -1426,7 +1401,7 @@ static bool tomoyo_print_single_path_acl(struct tomoyo_io_buffer *head,
1426 u8 bit; 1401 u8 bit;
1427 const char *atmark = ""; 1402 const char *atmark = "";
1428 const char *filename; 1403 const char *filename;
1429 const u16 perm = ptr->perm; 1404 const u32 perm = ptr->perm | (((u32) ptr->perm_high) << 16);
1430 1405
1431 filename = ptr->filename->name; 1406 filename = ptr->filename->name;
1432 for (bit = head->read_bit; bit < TOMOYO_MAX_SINGLE_PATH_OPERATION; 1407 for (bit = head->read_bit; bit < TOMOYO_MAX_SINGLE_PATH_OPERATION;
diff --git a/security/tomoyo/common.h b/security/tomoyo/common.h
index 92169d29b2db..bd10f9fa3511 100644
--- a/security/tomoyo/common.h
+++ b/security/tomoyo/common.h
@@ -108,7 +108,7 @@ struct tomoyo_path_info_with_data {
108 * (b) type & 0x80 : whether the entry is marked as "deleted". 108 * (b) type & 0x80 : whether the entry is marked as "deleted".
109 * 109 *
110 * Packing "struct tomoyo_acl_info" allows 110 * Packing "struct tomoyo_acl_info" allows
111 * "struct tomoyo_single_path_acl_record" to embed "u16" and 111 * "struct tomoyo_single_path_acl_record" to embed "u8" + "u16" and
112 * "struct tomoyo_double_path_acl_record" to embed "u8" 112 * "struct tomoyo_double_path_acl_record" to embed "u8"
113 * without enlarging their structure size. 113 * without enlarging their structure size.
114 */ 114 */
@@ -184,10 +184,13 @@ struct tomoyo_domain_info {
184 * Directives held by this structure are "allow_read/write", "allow_execute", 184 * Directives held by this structure are "allow_read/write", "allow_execute",
185 * "allow_read", "allow_write", "allow_create", "allow_unlink", "allow_mkdir", 185 * "allow_read", "allow_write", "allow_create", "allow_unlink", "allow_mkdir",
186 * "allow_rmdir", "allow_mkfifo", "allow_mksock", "allow_mkblock", 186 * "allow_rmdir", "allow_mkfifo", "allow_mksock", "allow_mkblock",
187 * "allow_mkchar", "allow_truncate", "allow_symlink" and "allow_rewrite". 187 * "allow_mkchar", "allow_truncate", "allow_symlink", "allow_rewrite",
188 * "allow_chmod", "allow_chown", "allow_chgrp", "allow_chroot", "allow_mount"
189 * and "allow_unmount".
188 */ 190 */
189struct tomoyo_single_path_acl_record { 191struct tomoyo_single_path_acl_record {
190 struct tomoyo_acl_info head; /* type = TOMOYO_TYPE_SINGLE_PATH_ACL */ 192 struct tomoyo_acl_info head; /* type = TOMOYO_TYPE_SINGLE_PATH_ACL */
193 u8 perm_high;
191 u16 perm; 194 u16 perm;
192 /* Pointer to single pathname. */ 195 /* Pointer to single pathname. */
193 const struct tomoyo_path_info *filename; 196 const struct tomoyo_path_info *filename;
@@ -195,7 +198,7 @@ struct tomoyo_single_path_acl_record {
195 198
196/* 199/*
197 * tomoyo_double_path_acl_record is a structure which is used for holding an 200 * tomoyo_double_path_acl_record is a structure which is used for holding an
198 * entry with two pathnames operation (i.e. link() and rename()). 201 * entry with two pathnames operation (i.e. link(), rename() and pivot_root()).
199 * It has following fields. 202 * It has following fields.
200 * 203 *
201 * (1) "head" which is a "struct tomoyo_acl_info". 204 * (1) "head" which is a "struct tomoyo_acl_info".
@@ -203,7 +206,8 @@ struct tomoyo_single_path_acl_record {
203 * (3) "filename1" is the source/old pathname. 206 * (3) "filename1" is the source/old pathname.
204 * (4) "filename2" is the destination/new pathname. 207 * (4) "filename2" is the destination/new pathname.
205 * 208 *
206 * Directives held by this structure are "allow_rename" and "allow_link". 209 * Directives held by this structure are "allow_rename", "allow_link" and
210 * "allow_pivot_root".
207 */ 211 */
208struct tomoyo_double_path_acl_record { 212struct tomoyo_double_path_acl_record {
209 struct tomoyo_acl_info head; /* type = TOMOYO_TYPE_DOUBLE_PATH_ACL */ 213 struct tomoyo_acl_info head; /* type = TOMOYO_TYPE_DOUBLE_PATH_ACL */
diff --git a/security/tomoyo/file.c b/security/tomoyo/file.c
index 8346938809b1..482f0e7ed997 100644
--- a/security/tomoyo/file.c
+++ b/security/tomoyo/file.c
@@ -81,12 +81,20 @@ static const char *tomoyo_sp_keyword[TOMOYO_MAX_SINGLE_PATH_OPERATION] = {
81 [TOMOYO_TYPE_TRUNCATE_ACL] = "truncate", 81 [TOMOYO_TYPE_TRUNCATE_ACL] = "truncate",
82 [TOMOYO_TYPE_SYMLINK_ACL] = "symlink", 82 [TOMOYO_TYPE_SYMLINK_ACL] = "symlink",
83 [TOMOYO_TYPE_REWRITE_ACL] = "rewrite", 83 [TOMOYO_TYPE_REWRITE_ACL] = "rewrite",
84 [TOMOYO_TYPE_IOCTL_ACL] = "ioctl",
85 [TOMOYO_TYPE_CHMOD_ACL] = "chmod",
86 [TOMOYO_TYPE_CHOWN_ACL] = "chown",
87 [TOMOYO_TYPE_CHGRP_ACL] = "chgrp",
88 [TOMOYO_TYPE_CHROOT_ACL] = "chroot",
89 [TOMOYO_TYPE_MOUNT_ACL] = "mount",
90 [TOMOYO_TYPE_UMOUNT_ACL] = "unmount",
84}; 91};
85 92
86/* Keyword array for double path operations. */ 93/* Keyword array for double path operations. */
87static const char *tomoyo_dp_keyword[TOMOYO_MAX_DOUBLE_PATH_OPERATION] = { 94static const char *tomoyo_dp_keyword[TOMOYO_MAX_DOUBLE_PATH_OPERATION] = {
88 [TOMOYO_TYPE_LINK_ACL] = "link", 95 [TOMOYO_TYPE_LINK_ACL] = "link",
89 [TOMOYO_TYPE_RENAME_ACL] = "rename", 96 [TOMOYO_TYPE_RENAME_ACL] = "rename",
97 [TOMOYO_TYPE_PIVOT_ROOT_ACL] = "pivot_root",
90}; 98};
91 99
92/** 100/**
@@ -655,7 +663,7 @@ static int tomoyo_check_single_path_acl2(const struct tomoyo_domain_info *
655 domain, 663 domain,
656 const struct tomoyo_path_info * 664 const struct tomoyo_path_info *
657 filename, 665 filename,
658 const u16 perm, 666 const u32 perm,
659 const bool may_use_pattern) 667 const bool may_use_pattern)
660{ 668{
661 struct tomoyo_acl_info *ptr; 669 struct tomoyo_acl_info *ptr;
@@ -668,8 +676,13 @@ static int tomoyo_check_single_path_acl2(const struct tomoyo_domain_info *
668 continue; 676 continue;
669 acl = container_of(ptr, struct tomoyo_single_path_acl_record, 677 acl = container_of(ptr, struct tomoyo_single_path_acl_record,
670 head); 678 head);
671 if (!(acl->perm & perm)) 679 if (perm <= 0xFFFF) {
672 continue; 680 if (!(acl->perm & perm))
681 continue;
682 } else {
683 if (!(acl->perm_high & (perm >> 16)))
684 continue;
685 }
673 if (may_use_pattern || !acl->filename->is_patterned) { 686 if (may_use_pattern || !acl->filename->is_patterned) {
674 if (!tomoyo_path_matches_pattern(filename, 687 if (!tomoyo_path_matches_pattern(filename,
675 acl->filename)) 688 acl->filename))
@@ -697,7 +710,7 @@ static int tomoyo_check_file_acl(const struct tomoyo_domain_info *domain,
697 const struct tomoyo_path_info *filename, 710 const struct tomoyo_path_info *filename,
698 const u8 operation) 711 const u8 operation)
699{ 712{
700 u16 perm = 0; 713 u32 perm = 0;
701 714
702 if (!tomoyo_check_flags(domain, TOMOYO_MAC_FOR_FILE)) 715 if (!tomoyo_check_flags(domain, TOMOYO_MAC_FOR_FILE))
703 return 0; 716 return 0;
@@ -830,13 +843,13 @@ static int tomoyo_update_single_path_acl(const u8 type, const char *filename,
830 struct tomoyo_domain_info * 843 struct tomoyo_domain_info *
831 const domain, const bool is_delete) 844 const domain, const bool is_delete)
832{ 845{
833 static const u16 rw_mask = 846 static const u32 rw_mask =
834 (1 << TOMOYO_TYPE_READ_ACL) | (1 << TOMOYO_TYPE_WRITE_ACL); 847 (1 << TOMOYO_TYPE_READ_ACL) | (1 << TOMOYO_TYPE_WRITE_ACL);
835 const struct tomoyo_path_info *saved_filename; 848 const struct tomoyo_path_info *saved_filename;
836 struct tomoyo_acl_info *ptr; 849 struct tomoyo_acl_info *ptr;
837 struct tomoyo_single_path_acl_record *acl; 850 struct tomoyo_single_path_acl_record *acl;
838 int error = -ENOMEM; 851 int error = -ENOMEM;
839 const u16 perm = 1 << type; 852 const u32 perm = 1 << type;
840 853
841 if (!domain) 854 if (!domain)
842 return -EINVAL; 855 return -EINVAL;
@@ -858,7 +871,10 @@ static int tomoyo_update_single_path_acl(const u8 type, const char *filename,
858 /* Special case. Clear all bits if marked as deleted. */ 871 /* Special case. Clear all bits if marked as deleted. */
859 if (ptr->type & TOMOYO_ACL_DELETED) 872 if (ptr->type & TOMOYO_ACL_DELETED)
860 acl->perm = 0; 873 acl->perm = 0;
861 acl->perm |= perm; 874 if (perm <= 0xFFFF)
875 acl->perm |= perm;
876 else
877 acl->perm_high |= (perm >> 16);
862 if ((acl->perm & rw_mask) == rw_mask) 878 if ((acl->perm & rw_mask) == rw_mask)
863 acl->perm |= 1 << TOMOYO_TYPE_READ_WRITE_ACL; 879 acl->perm |= 1 << TOMOYO_TYPE_READ_WRITE_ACL;
864 else if (acl->perm & (1 << TOMOYO_TYPE_READ_WRITE_ACL)) 880 else if (acl->perm & (1 << TOMOYO_TYPE_READ_WRITE_ACL))
@@ -871,7 +887,10 @@ static int tomoyo_update_single_path_acl(const u8 type, const char *filename,
871 acl = tomoyo_alloc_acl_element(TOMOYO_TYPE_SINGLE_PATH_ACL); 887 acl = tomoyo_alloc_acl_element(TOMOYO_TYPE_SINGLE_PATH_ACL);
872 if (!acl) 888 if (!acl)
873 goto out; 889 goto out;
874 acl->perm = perm; 890 if (perm <= 0xFFFF)
891 acl->perm = perm;
892 else
893 acl->perm_high = (perm >> 16);
875 if (perm == (1 << TOMOYO_TYPE_READ_WRITE_ACL)) 894 if (perm == (1 << TOMOYO_TYPE_READ_WRITE_ACL))
876 acl->perm |= rw_mask; 895 acl->perm |= rw_mask;
877 acl->filename = saved_filename; 896 acl->filename = saved_filename;
@@ -887,12 +906,15 @@ static int tomoyo_update_single_path_acl(const u8 type, const char *filename,
887 head); 906 head);
888 if (acl->filename != saved_filename) 907 if (acl->filename != saved_filename)
889 continue; 908 continue;
890 acl->perm &= ~perm; 909 if (perm <= 0xFFFF)
910 acl->perm &= ~perm;
911 else
912 acl->perm_high &= ~(perm >> 16);
891 if ((acl->perm & rw_mask) != rw_mask) 913 if ((acl->perm & rw_mask) != rw_mask)
892 acl->perm &= ~(1 << TOMOYO_TYPE_READ_WRITE_ACL); 914 acl->perm &= ~(1 << TOMOYO_TYPE_READ_WRITE_ACL);
893 else if (!(acl->perm & (1 << TOMOYO_TYPE_READ_WRITE_ACL))) 915 else if (!(acl->perm & (1 << TOMOYO_TYPE_READ_WRITE_ACL)))
894 acl->perm &= ~rw_mask; 916 acl->perm &= ~rw_mask;
895 if (!acl->perm) 917 if (!acl->perm && !acl->perm_high)
896 ptr->type |= TOMOYO_ACL_DELETED; 918 ptr->type |= TOMOYO_ACL_DELETED;
897 error = 0; 919 error = 0;
898 break; 920 break;
@@ -1172,7 +1194,7 @@ int tomoyo_check_open_permission(struct tomoyo_domain_info *domain,
1172} 1194}
1173 1195
1174/** 1196/**
1175 * tomoyo_check_1path_perm - Check permission for "create", "unlink", "mkdir", "rmdir", "mkfifo", "mksock", "mkblock", "mkchar", "truncate" and "symlink". 1197 * tomoyo_check_1path_perm - Check permission for "create", "unlink", "mkdir", "rmdir", "mkfifo", "mksock", "mkblock", "mkchar", "truncate", "symlink", "ioctl", "chmod", "chown", "chgrp", "chroot", "mount" and "unmount".
1176 * 1198 *
1177 * @domain: Pointer to "struct tomoyo_domain_info". 1199 * @domain: Pointer to "struct tomoyo_domain_info".
1178 * @operation: Type of operation. 1200 * @operation: Type of operation.
@@ -1196,6 +1218,7 @@ int tomoyo_check_1path_perm(struct tomoyo_domain_info *domain,
1196 switch (operation) { 1218 switch (operation) {
1197 case TOMOYO_TYPE_MKDIR_ACL: 1219 case TOMOYO_TYPE_MKDIR_ACL:
1198 case TOMOYO_TYPE_RMDIR_ACL: 1220 case TOMOYO_TYPE_RMDIR_ACL:
1221 case TOMOYO_TYPE_CHROOT_ACL:
1199 if (!buf->is_dir) { 1222 if (!buf->is_dir) {
1200 /* 1223 /*
1201 * tomoyo_get_path() reserves space for appending "/." 1224 * tomoyo_get_path() reserves space for appending "/."
@@ -1249,7 +1272,7 @@ int tomoyo_check_rewrite_permission(struct tomoyo_domain_info *domain,
1249} 1272}
1250 1273
1251/** 1274/**
1252 * tomoyo_check_2path_perm - Check permission for "rename" and "link". 1275 * tomoyo_check_2path_perm - Check permission for "rename", "link" and "pivot_root".
1253 * 1276 *
1254 * @domain: Pointer to "struct tomoyo_domain_info". 1277 * @domain: Pointer to "struct tomoyo_domain_info".
1255 * @operation: Type of operation. 1278 * @operation: Type of operation.
diff --git a/security/tomoyo/tomoyo.c b/security/tomoyo/tomoyo.c
index 8a00ade85166..ad9555fc3765 100644
--- a/security/tomoyo/tomoyo.c
+++ b/security/tomoyo/tomoyo.c
@@ -194,6 +194,60 @@ static int tomoyo_dentry_open(struct file *f, const struct cred *cred)
194 return tomoyo_check_open_permission(tomoyo_domain(), &f->f_path, flags); 194 return tomoyo_check_open_permission(tomoyo_domain(), &f->f_path, flags);
195} 195}
196 196
197static int tomoyo_file_ioctl(struct file *file, unsigned int cmd,
198 unsigned long arg)
199{
200 return tomoyo_check_1path_perm(tomoyo_domain(), TOMOYO_TYPE_IOCTL_ACL,
201 &file->f_path);
202}
203
204static int tomoyo_path_chmod(struct dentry *dentry, struct vfsmount *mnt,
205 mode_t mode)
206{
207 struct path path = { mnt, dentry };
208 return tomoyo_check_1path_perm(tomoyo_domain(), TOMOYO_TYPE_CHMOD_ACL,
209 &path);
210}
211
212static int tomoyo_path_chown(struct path *path, uid_t uid, gid_t gid)
213{
214 int error = 0;
215 if (uid != (uid_t) -1)
216 error = tomoyo_check_1path_perm(tomoyo_domain(),
217 TOMOYO_TYPE_CHOWN_ACL, path);
218 if (!error && gid != (gid_t) -1)
219 error = tomoyo_check_1path_perm(tomoyo_domain(),
220 TOMOYO_TYPE_CHGRP_ACL, path);
221 return error;
222}
223
224static int tomoyo_path_chroot(struct path *path)
225{
226 return tomoyo_check_1path_perm(tomoyo_domain(), TOMOYO_TYPE_CHROOT_ACL,
227 path);
228}
229
230static int tomoyo_sb_mount(char *dev_name, struct path *path,
231 char *type, unsigned long flags, void *data)
232{
233 return tomoyo_check_1path_perm(tomoyo_domain(), TOMOYO_TYPE_MOUNT_ACL,
234 path);
235}
236
237static int tomoyo_sb_umount(struct vfsmount *mnt, int flags)
238{
239 struct path path = { mnt, mnt->mnt_root };
240 return tomoyo_check_1path_perm(tomoyo_domain(), TOMOYO_TYPE_UMOUNT_ACL,
241 &path);
242}
243
244static int tomoyo_sb_pivotroot(struct path *old_path, struct path *new_path)
245{
246 return tomoyo_check_2path_perm(tomoyo_domain(),
247 TOMOYO_TYPE_PIVOT_ROOT_ACL,
248 new_path, old_path);
249}
250
197/* 251/*
198 * tomoyo_security_ops is a "struct security_operations" which is used for 252 * tomoyo_security_ops is a "struct security_operations" which is used for
199 * registering TOMOYO. 253 * registering TOMOYO.
@@ -215,6 +269,13 @@ static struct security_operations tomoyo_security_ops = {
215 .path_mknod = tomoyo_path_mknod, 269 .path_mknod = tomoyo_path_mknod,
216 .path_link = tomoyo_path_link, 270 .path_link = tomoyo_path_link,
217 .path_rename = tomoyo_path_rename, 271 .path_rename = tomoyo_path_rename,
272 .file_ioctl = tomoyo_file_ioctl,
273 .path_chmod = tomoyo_path_chmod,
274 .path_chown = tomoyo_path_chown,
275 .path_chroot = tomoyo_path_chroot,
276 .sb_mount = tomoyo_sb_mount,
277 .sb_umount = tomoyo_sb_umount,
278 .sb_pivotroot = tomoyo_sb_pivotroot,
218}; 279};
219 280
220static int __init tomoyo_init(void) 281static int __init tomoyo_init(void)
diff --git a/security/tomoyo/tomoyo.h b/security/tomoyo/tomoyo.h
index ed758325b1ae..bf3986addc1a 100644
--- a/security/tomoyo/tomoyo.h
+++ b/security/tomoyo/tomoyo.h
@@ -62,11 +62,19 @@ int tomoyo_find_next_domain(struct linux_binprm *bprm);
62#define TOMOYO_TYPE_TRUNCATE_ACL 12 62#define TOMOYO_TYPE_TRUNCATE_ACL 12
63#define TOMOYO_TYPE_SYMLINK_ACL 13 63#define TOMOYO_TYPE_SYMLINK_ACL 13
64#define TOMOYO_TYPE_REWRITE_ACL 14 64#define TOMOYO_TYPE_REWRITE_ACL 14
65#define TOMOYO_MAX_SINGLE_PATH_OPERATION 15 65#define TOMOYO_TYPE_IOCTL_ACL 15
66#define TOMOYO_TYPE_CHMOD_ACL 16
67#define TOMOYO_TYPE_CHOWN_ACL 17
68#define TOMOYO_TYPE_CHGRP_ACL 18
69#define TOMOYO_TYPE_CHROOT_ACL 19
70#define TOMOYO_TYPE_MOUNT_ACL 20
71#define TOMOYO_TYPE_UMOUNT_ACL 21
72#define TOMOYO_MAX_SINGLE_PATH_OPERATION 22
66 73
67#define TOMOYO_TYPE_LINK_ACL 0 74#define TOMOYO_TYPE_LINK_ACL 0
68#define TOMOYO_TYPE_RENAME_ACL 1 75#define TOMOYO_TYPE_RENAME_ACL 1
69#define TOMOYO_MAX_DOUBLE_PATH_OPERATION 2 76#define TOMOYO_TYPE_PIVOT_ROOT_ACL 2
77#define TOMOYO_MAX_DOUBLE_PATH_OPERATION 3
70 78
71#define TOMOYO_DOMAINPOLICY 0 79#define TOMOYO_DOMAINPOLICY 0
72#define TOMOYO_EXCEPTIONPOLICY 1 80#define TOMOYO_EXCEPTIONPOLICY 1