ima_policy.c (bad4417b692ede5cf31105b329cea1544875b526) | ima_policy.c (3dd0c8d06511c7c61c62305fcf431ca28884d263) |
---|---|
1/* 2 * Copyright (C) 2008 IBM Corporation 3 * Author: Mimi Zohar <zohar@us.ibm.com> 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation, version 2 of the License. 8 * --- 50 unchanged lines hidden (view full) --- 59 int action; 60 unsigned int flags; 61 enum ima_hooks func; 62 int mask; 63 unsigned long fsmagic; 64 u8 fsuuid[16]; 65 kuid_t uid; 66 kuid_t fowner; | 1/* 2 * Copyright (C) 2008 IBM Corporation 3 * Author: Mimi Zohar <zohar@us.ibm.com> 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation, version 2 of the License. 8 * --- 50 unchanged lines hidden (view full) --- 59 int action; 60 unsigned int flags; 61 enum ima_hooks func; 62 int mask; 63 unsigned long fsmagic; 64 u8 fsuuid[16]; 65 kuid_t uid; 66 kuid_t fowner; |
67 bool (*uid_op)(kuid_t, kuid_t); /* Handlers for operators */ 68 bool (*fowner_op)(kuid_t, kuid_t); /* uid_eq(), uid_gt(), uid_lt() */ |
|
67 int pcr; 68 struct { 69 void *rule; /* LSM file metadata specific */ 70 void *args_p; /* audit value */ 71 int type; /* audit type */ 72 } lsm[MAX_LSM_RULES]; 73}; 74 --- 23 unchanged lines hidden (view full) --- 98}; 99 100static struct ima_rule_entry original_measurement_rules[] __ro_after_init = { 101 {.action = MEASURE, .func = MMAP_CHECK, .mask = MAY_EXEC, 102 .flags = IMA_FUNC | IMA_MASK}, 103 {.action = MEASURE, .func = BPRM_CHECK, .mask = MAY_EXEC, 104 .flags = IMA_FUNC | IMA_MASK}, 105 {.action = MEASURE, .func = FILE_CHECK, .mask = MAY_READ, | 69 int pcr; 70 struct { 71 void *rule; /* LSM file metadata specific */ 72 void *args_p; /* audit value */ 73 int type; /* audit type */ 74 } lsm[MAX_LSM_RULES]; 75}; 76 --- 23 unchanged lines hidden (view full) --- 100}; 101 102static struct ima_rule_entry original_measurement_rules[] __ro_after_init = { 103 {.action = MEASURE, .func = MMAP_CHECK, .mask = MAY_EXEC, 104 .flags = IMA_FUNC | IMA_MASK}, 105 {.action = MEASURE, .func = BPRM_CHECK, .mask = MAY_EXEC, 106 .flags = IMA_FUNC | IMA_MASK}, 107 {.action = MEASURE, .func = FILE_CHECK, .mask = MAY_READ, |
106 .uid = GLOBAL_ROOT_UID, .flags = IMA_FUNC | IMA_MASK | IMA_UID}, | 108 .uid = GLOBAL_ROOT_UID, .uid_op = &uid_eq, 109 .flags = IMA_FUNC | IMA_MASK | IMA_UID}, |
107 {.action = MEASURE, .func = MODULE_CHECK, .flags = IMA_FUNC}, 108 {.action = MEASURE, .func = FIRMWARE_CHECK, .flags = IMA_FUNC}, 109}; 110 111static struct ima_rule_entry default_measurement_rules[] __ro_after_init = { 112 {.action = MEASURE, .func = MMAP_CHECK, .mask = MAY_EXEC, 113 .flags = IMA_FUNC | IMA_MASK}, 114 {.action = MEASURE, .func = BPRM_CHECK, .mask = MAY_EXEC, 115 .flags = IMA_FUNC | IMA_MASK}, 116 {.action = MEASURE, .func = FILE_CHECK, .mask = MAY_READ, | 110 {.action = MEASURE, .func = MODULE_CHECK, .flags = IMA_FUNC}, 111 {.action = MEASURE, .func = FIRMWARE_CHECK, .flags = IMA_FUNC}, 112}; 113 114static struct ima_rule_entry default_measurement_rules[] __ro_after_init = { 115 {.action = MEASURE, .func = MMAP_CHECK, .mask = MAY_EXEC, 116 .flags = IMA_FUNC | IMA_MASK}, 117 {.action = MEASURE, .func = BPRM_CHECK, .mask = MAY_EXEC, 118 .flags = IMA_FUNC | IMA_MASK}, 119 {.action = MEASURE, .func = FILE_CHECK, .mask = MAY_READ, |
117 .uid = GLOBAL_ROOT_UID, .flags = IMA_FUNC | IMA_INMASK | IMA_EUID}, | 120 .uid = GLOBAL_ROOT_UID, .uid_op = &uid_eq, 121 .flags = IMA_FUNC | IMA_INMASK | IMA_EUID}, |
118 {.action = MEASURE, .func = FILE_CHECK, .mask = MAY_READ, | 122 {.action = MEASURE, .func = FILE_CHECK, .mask = MAY_READ, |
119 .uid = GLOBAL_ROOT_UID, .flags = IMA_FUNC | IMA_INMASK | IMA_UID}, | 123 .uid = GLOBAL_ROOT_UID, .uid_op = &uid_eq, 124 .flags = IMA_FUNC | IMA_INMASK | IMA_UID}, |
120 {.action = MEASURE, .func = MODULE_CHECK, .flags = IMA_FUNC}, 121 {.action = MEASURE, .func = FIRMWARE_CHECK, .flags = IMA_FUNC}, 122 {.action = MEASURE, .func = POLICY_CHECK, .flags = IMA_FUNC}, 123}; 124 125static struct ima_rule_entry default_appraise_rules[] __ro_after_init = { 126 {.action = DONT_APPRAISE, .fsmagic = PROC_SUPER_MAGIC, .flags = IMA_FSMAGIC}, 127 {.action = DONT_APPRAISE, .fsmagic = SYSFS_MAGIC, .flags = IMA_FSMAGIC}, --- 6 unchanged lines hidden (view full) --- 134 {.action = DONT_APPRAISE, .fsmagic = SELINUX_MAGIC, .flags = IMA_FSMAGIC}, 135 {.action = DONT_APPRAISE, .fsmagic = NSFS_MAGIC, .flags = IMA_FSMAGIC}, 136 {.action = DONT_APPRAISE, .fsmagic = CGROUP_SUPER_MAGIC, .flags = IMA_FSMAGIC}, 137#ifdef CONFIG_IMA_WRITE_POLICY 138 {.action = APPRAISE, .func = POLICY_CHECK, 139 .flags = IMA_FUNC | IMA_DIGSIG_REQUIRED}, 140#endif 141#ifndef CONFIG_IMA_APPRAISE_SIGNED_INIT | 125 {.action = MEASURE, .func = MODULE_CHECK, .flags = IMA_FUNC}, 126 {.action = MEASURE, .func = FIRMWARE_CHECK, .flags = IMA_FUNC}, 127 {.action = MEASURE, .func = POLICY_CHECK, .flags = IMA_FUNC}, 128}; 129 130static struct ima_rule_entry default_appraise_rules[] __ro_after_init = { 131 {.action = DONT_APPRAISE, .fsmagic = PROC_SUPER_MAGIC, .flags = IMA_FSMAGIC}, 132 {.action = DONT_APPRAISE, .fsmagic = SYSFS_MAGIC, .flags = IMA_FSMAGIC}, --- 6 unchanged lines hidden (view full) --- 139 {.action = DONT_APPRAISE, .fsmagic = SELINUX_MAGIC, .flags = IMA_FSMAGIC}, 140 {.action = DONT_APPRAISE, .fsmagic = NSFS_MAGIC, .flags = IMA_FSMAGIC}, 141 {.action = DONT_APPRAISE, .fsmagic = CGROUP_SUPER_MAGIC, .flags = IMA_FSMAGIC}, 142#ifdef CONFIG_IMA_WRITE_POLICY 143 {.action = APPRAISE, .func = POLICY_CHECK, 144 .flags = IMA_FUNC | IMA_DIGSIG_REQUIRED}, 145#endif 146#ifndef CONFIG_IMA_APPRAISE_SIGNED_INIT |
142 {.action = APPRAISE, .fowner = GLOBAL_ROOT_UID, .flags = IMA_FOWNER}, | 147 {.action = APPRAISE, .fowner = GLOBAL_ROOT_UID, .fowner_op = &uid_eq, 148 .flags = IMA_FOWNER}, |
143#else 144 /* force signature */ | 149#else 150 /* force signature */ |
145 {.action = APPRAISE, .fowner = GLOBAL_ROOT_UID, | 151 {.action = APPRAISE, .fowner = GLOBAL_ROOT_UID, .fowner_op = &uid_eq, |
146 .flags = IMA_FOWNER | IMA_DIGSIG_REQUIRED}, 147#endif 148}; 149 150static LIST_HEAD(ima_default_rules); 151static LIST_HEAD(ima_policy_rules); 152static LIST_HEAD(ima_temp_rules); 153static struct list_head *ima_rules; --- 81 unchanged lines hidden (view full) --- 235 (!(rule->mask & mask) && func != POST_SETATTR)) 236 return false; 237 if ((rule->flags & IMA_FSMAGIC) 238 && rule->fsmagic != inode->i_sb->s_magic) 239 return false; 240 if ((rule->flags & IMA_FSUUID) && 241 memcmp(rule->fsuuid, inode->i_sb->s_uuid, sizeof(rule->fsuuid))) 242 return false; | 152 .flags = IMA_FOWNER | IMA_DIGSIG_REQUIRED}, 153#endif 154}; 155 156static LIST_HEAD(ima_default_rules); 157static LIST_HEAD(ima_policy_rules); 158static LIST_HEAD(ima_temp_rules); 159static struct list_head *ima_rules; --- 81 unchanged lines hidden (view full) --- 241 (!(rule->mask & mask) && func != POST_SETATTR)) 242 return false; 243 if ((rule->flags & IMA_FSMAGIC) 244 && rule->fsmagic != inode->i_sb->s_magic) 245 return false; 246 if ((rule->flags & IMA_FSUUID) && 247 memcmp(rule->fsuuid, inode->i_sb->s_uuid, sizeof(rule->fsuuid))) 248 return false; |
243 if ((rule->flags & IMA_UID) && !uid_eq(rule->uid, cred->uid)) | 249 if ((rule->flags & IMA_UID) && !rule->uid_op(cred->uid, rule->uid)) |
244 return false; 245 if (rule->flags & IMA_EUID) { 246 if (has_capability_noaudit(current, CAP_SETUID)) { | 250 return false; 251 if (rule->flags & IMA_EUID) { 252 if (has_capability_noaudit(current, CAP_SETUID)) { |
247 if (!uid_eq(rule->uid, cred->euid) 248 && !uid_eq(rule->uid, cred->suid) 249 && !uid_eq(rule->uid, cred->uid)) | 253 if (!rule->uid_op(cred->euid, rule->uid) 254 && !rule->uid_op(cred->suid, rule->uid) 255 && !rule->uid_op(cred->uid, rule->uid)) |
250 return false; | 256 return false; |
251 } else if (!uid_eq(rule->uid, cred->euid)) | 257 } else if (!rule->uid_op(cred->euid, rule->uid)) |
252 return false; 253 } 254 | 258 return false; 259 } 260 |
255 if ((rule->flags & IMA_FOWNER) && !uid_eq(rule->fowner, inode->i_uid)) | 261 if ((rule->flags & IMA_FOWNER) && 262 !rule->fowner_op(inode->i_uid, rule->fowner)) |
256 return false; 257 for (i = 0; i < MAX_LSM_RULES; i++) { 258 int rc = 0; 259 u32 osid, sid; 260 int retried = 0; 261 262 if (!rule->lsm[i].rule) 263 continue; --- 217 unchanged lines hidden (view full) --- 481enum { 482 Opt_err = -1, 483 Opt_measure = 1, Opt_dont_measure, 484 Opt_appraise, Opt_dont_appraise, 485 Opt_audit, 486 Opt_obj_user, Opt_obj_role, Opt_obj_type, 487 Opt_subj_user, Opt_subj_role, Opt_subj_type, 488 Opt_func, Opt_mask, Opt_fsmagic, | 263 return false; 264 for (i = 0; i < MAX_LSM_RULES; i++) { 265 int rc = 0; 266 u32 osid, sid; 267 int retried = 0; 268 269 if (!rule->lsm[i].rule) 270 continue; --- 217 unchanged lines hidden (view full) --- 488enum { 489 Opt_err = -1, 490 Opt_measure = 1, Opt_dont_measure, 491 Opt_appraise, Opt_dont_appraise, 492 Opt_audit, 493 Opt_obj_user, Opt_obj_role, Opt_obj_type, 494 Opt_subj_user, Opt_subj_role, Opt_subj_type, 495 Opt_func, Opt_mask, Opt_fsmagic, |
489 Opt_fsuuid, Opt_uid, Opt_euid, Opt_fowner, | 496 Opt_fsuuid, Opt_uid_eq, Opt_euid_eq, Opt_fowner_eq, 497 Opt_uid_gt, Opt_euid_gt, Opt_fowner_gt, 498 Opt_uid_lt, Opt_euid_lt, Opt_fowner_lt, |
490 Opt_appraise_type, Opt_permit_directio, 491 Opt_pcr 492}; 493 494static match_table_t policy_tokens = { 495 {Opt_measure, "measure"}, 496 {Opt_dont_measure, "dont_measure"}, 497 {Opt_appraise, "appraise"}, --- 4 unchanged lines hidden (view full) --- 502 {Opt_obj_type, "obj_type=%s"}, 503 {Opt_subj_user, "subj_user=%s"}, 504 {Opt_subj_role, "subj_role=%s"}, 505 {Opt_subj_type, "subj_type=%s"}, 506 {Opt_func, "func=%s"}, 507 {Opt_mask, "mask=%s"}, 508 {Opt_fsmagic, "fsmagic=%s"}, 509 {Opt_fsuuid, "fsuuid=%s"}, | 499 Opt_appraise_type, Opt_permit_directio, 500 Opt_pcr 501}; 502 503static match_table_t policy_tokens = { 504 {Opt_measure, "measure"}, 505 {Opt_dont_measure, "dont_measure"}, 506 {Opt_appraise, "appraise"}, --- 4 unchanged lines hidden (view full) --- 511 {Opt_obj_type, "obj_type=%s"}, 512 {Opt_subj_user, "subj_user=%s"}, 513 {Opt_subj_role, "subj_role=%s"}, 514 {Opt_subj_type, "subj_type=%s"}, 515 {Opt_func, "func=%s"}, 516 {Opt_mask, "mask=%s"}, 517 {Opt_fsmagic, "fsmagic=%s"}, 518 {Opt_fsuuid, "fsuuid=%s"}, |
510 {Opt_uid, "uid=%s"}, 511 {Opt_euid, "euid=%s"}, 512 {Opt_fowner, "fowner=%s"}, | 519 {Opt_uid_eq, "uid=%s"}, 520 {Opt_euid_eq, "euid=%s"}, 521 {Opt_fowner_eq, "fowner=%s"}, 522 {Opt_uid_gt, "uid>%s"}, 523 {Opt_euid_gt, "euid>%s"}, 524 {Opt_fowner_gt, "fowner>%s"}, 525 {Opt_uid_lt, "uid<%s"}, 526 {Opt_euid_lt, "euid<%s"}, 527 {Opt_fowner_lt, "fowner<%s"}, |
513 {Opt_appraise_type, "appraise_type=%s"}, 514 {Opt_permit_directio, "permit_directio"}, 515 {Opt_pcr, "pcr=%s"}, 516 {Opt_err, NULL} 517}; 518 519static int ima_lsm_rule_init(struct ima_rule_entry *entry, 520 substring_t *args, int lsm_rule, int audit_type) --- 15 unchanged lines hidden (view full) --- 536 if (!entry->lsm[lsm_rule].rule) { 537 kfree(entry->lsm[lsm_rule].args_p); 538 return -EINVAL; 539 } 540 541 return result; 542} 543 | 528 {Opt_appraise_type, "appraise_type=%s"}, 529 {Opt_permit_directio, "permit_directio"}, 530 {Opt_pcr, "pcr=%s"}, 531 {Opt_err, NULL} 532}; 533 534static int ima_lsm_rule_init(struct ima_rule_entry *entry, 535 substring_t *args, int lsm_rule, int audit_type) --- 15 unchanged lines hidden (view full) --- 551 if (!entry->lsm[lsm_rule].rule) { 552 kfree(entry->lsm[lsm_rule].args_p); 553 return -EINVAL; 554 } 555 556 return result; 557} 558 |
544static void ima_log_string(struct audit_buffer *ab, char *key, char *value) | 559static void ima_log_string_op(struct audit_buffer *ab, char *key, char *value, 560 bool (*rule_operator)(kuid_t, kuid_t)) |
545{ | 561{ |
546 audit_log_format(ab, "%s=", key); | 562 if (rule_operator == &uid_gt) 563 audit_log_format(ab, "%s>", key); 564 else if (rule_operator == &uid_lt) 565 audit_log_format(ab, "%s<", key); 566 else 567 audit_log_format(ab, "%s=", key); |
547 audit_log_untrustedstring(ab, value); 548 audit_log_format(ab, " "); 549} | 568 audit_log_untrustedstring(ab, value); 569 audit_log_format(ab, " "); 570} |
571static void ima_log_string(struct audit_buffer *ab, char *key, char *value) 572{ 573 ima_log_string_op(ab, key, value, NULL); 574} |
|
550 551static int ima_parse_rule(char *rule, struct ima_rule_entry *entry) 552{ 553 struct audit_buffer *ab; 554 char *from; 555 char *p; | 575 576static int ima_parse_rule(char *rule, struct ima_rule_entry *entry) 577{ 578 struct audit_buffer *ab; 579 char *from; 580 char *p; |
581 bool uid_token; |
|
556 int result = 0; 557 558 ab = audit_log_start(NULL, GFP_KERNEL, AUDIT_INTEGRITY_RULE); 559 560 entry->uid = INVALID_UID; 561 entry->fowner = INVALID_UID; | 582 int result = 0; 583 584 ab = audit_log_start(NULL, GFP_KERNEL, AUDIT_INTEGRITY_RULE); 585 586 entry->uid = INVALID_UID; 587 entry->fowner = INVALID_UID; |
588 entry->uid_op = &uid_eq; 589 entry->fowner_op = &uid_eq; |
|
562 entry->action = UNKNOWN; 563 while ((p = strsep(&rule, " \t")) != NULL) { 564 substring_t args[MAX_OPT_ARGS]; 565 int token; 566 unsigned long lnum; 567 568 if (result < 0) 569 break; --- 119 unchanged lines hidden (view full) --- 689 break; 690 } 691 692 result = blk_part_pack_uuid(args[0].from, 693 entry->fsuuid); 694 if (!result) 695 entry->flags |= IMA_FSUUID; 696 break; | 590 entry->action = UNKNOWN; 591 while ((p = strsep(&rule, " \t")) != NULL) { 592 substring_t args[MAX_OPT_ARGS]; 593 int token; 594 unsigned long lnum; 595 596 if (result < 0) 597 break; --- 119 unchanged lines hidden (view full) --- 717 break; 718 } 719 720 result = blk_part_pack_uuid(args[0].from, 721 entry->fsuuid); 722 if (!result) 723 entry->flags |= IMA_FSUUID; 724 break; |
697 case Opt_uid: 698 ima_log_string(ab, "uid", args[0].from); 699 case Opt_euid: 700 if (token == Opt_euid) 701 ima_log_string(ab, "euid", args[0].from); | 725 case Opt_uid_gt: 726 case Opt_euid_gt: 727 entry->uid_op = &uid_gt; 728 case Opt_uid_lt: 729 case Opt_euid_lt: 730 if ((token == Opt_uid_lt) || (token == Opt_euid_lt)) 731 entry->uid_op = &uid_lt; 732 case Opt_uid_eq: 733 case Opt_euid_eq: 734 uid_token = (token == Opt_uid_eq) || 735 (token == Opt_uid_gt) || 736 (token == Opt_uid_lt); |
702 | 737 |
738 ima_log_string_op(ab, uid_token ? "uid" : "euid", 739 args[0].from, entry->uid_op); 740 |
|
703 if (uid_valid(entry->uid)) { 704 result = -EINVAL; 705 break; 706 } 707 708 result = kstrtoul(args[0].from, 10, &lnum); 709 if (!result) { 710 entry->uid = make_kuid(current_user_ns(), 711 (uid_t) lnum); 712 if (!uid_valid(entry->uid) || 713 (uid_t)lnum != lnum) 714 result = -EINVAL; 715 else | 741 if (uid_valid(entry->uid)) { 742 result = -EINVAL; 743 break; 744 } 745 746 result = kstrtoul(args[0].from, 10, &lnum); 747 if (!result) { 748 entry->uid = make_kuid(current_user_ns(), 749 (uid_t) lnum); 750 if (!uid_valid(entry->uid) || 751 (uid_t)lnum != lnum) 752 result = -EINVAL; 753 else |
716 entry->flags |= (token == Opt_uid) | 754 entry->flags |= uid_token |
717 ? IMA_UID : IMA_EUID; 718 } 719 break; | 755 ? IMA_UID : IMA_EUID; 756 } 757 break; |
720 case Opt_fowner: 721 ima_log_string(ab, "fowner", args[0].from); | 758 case Opt_fowner_gt: 759 entry->fowner_op = &uid_gt; 760 case Opt_fowner_lt: 761 if (token == Opt_fowner_lt) 762 entry->fowner_op = &uid_lt; 763 case Opt_fowner_eq: 764 ima_log_string_op(ab, "fowner", args[0].from, 765 entry->fowner_op); |
722 723 if (uid_valid(entry->fowner)) { 724 result = -EINVAL; 725 break; 726 } 727 728 result = kstrtoul(args[0].from, 10, &lnum); 729 if (!result) { --- 314 unchanged lines hidden (view full) --- 1044 1045 if (entry->flags & IMA_FSUUID) { 1046 seq_printf(m, "fsuuid=%pU", entry->fsuuid); 1047 seq_puts(m, " "); 1048 } 1049 1050 if (entry->flags & IMA_UID) { 1051 snprintf(tbuf, sizeof(tbuf), "%d", __kuid_val(entry->uid)); | 766 767 if (uid_valid(entry->fowner)) { 768 result = -EINVAL; 769 break; 770 } 771 772 result = kstrtoul(args[0].from, 10, &lnum); 773 if (!result) { --- 314 unchanged lines hidden (view full) --- 1088 1089 if (entry->flags & IMA_FSUUID) { 1090 seq_printf(m, "fsuuid=%pU", entry->fsuuid); 1091 seq_puts(m, " "); 1092 } 1093 1094 if (entry->flags & IMA_UID) { 1095 snprintf(tbuf, sizeof(tbuf), "%d", __kuid_val(entry->uid)); |
1052 seq_printf(m, pt(Opt_uid), tbuf); | 1096 if (entry->uid_op == &uid_gt) 1097 seq_printf(m, pt(Opt_uid_gt), tbuf); 1098 else if (entry->uid_op == &uid_lt) 1099 seq_printf(m, pt(Opt_uid_lt), tbuf); 1100 else 1101 seq_printf(m, pt(Opt_uid_eq), tbuf); |
1053 seq_puts(m, " "); 1054 } 1055 1056 if (entry->flags & IMA_EUID) { 1057 snprintf(tbuf, sizeof(tbuf), "%d", __kuid_val(entry->uid)); | 1102 seq_puts(m, " "); 1103 } 1104 1105 if (entry->flags & IMA_EUID) { 1106 snprintf(tbuf, sizeof(tbuf), "%d", __kuid_val(entry->uid)); |
1058 seq_printf(m, pt(Opt_euid), tbuf); | 1107 if (entry->uid_op == &uid_gt) 1108 seq_printf(m, pt(Opt_euid_gt), tbuf); 1109 else if (entry->uid_op == &uid_lt) 1110 seq_printf(m, pt(Opt_euid_lt), tbuf); 1111 else 1112 seq_printf(m, pt(Opt_euid_eq), tbuf); |
1059 seq_puts(m, " "); 1060 } 1061 1062 if (entry->flags & IMA_FOWNER) { 1063 snprintf(tbuf, sizeof(tbuf), "%d", __kuid_val(entry->fowner)); | 1113 seq_puts(m, " "); 1114 } 1115 1116 if (entry->flags & IMA_FOWNER) { 1117 snprintf(tbuf, sizeof(tbuf), "%d", __kuid_val(entry->fowner)); |
1064 seq_printf(m, pt(Opt_fowner), tbuf); | 1118 if (entry->fowner_op == &uid_gt) 1119 seq_printf(m, pt(Opt_fowner_gt), tbuf); 1120 else if (entry->fowner_op == &uid_lt) 1121 seq_printf(m, pt(Opt_fowner_lt), tbuf); 1122 else 1123 seq_printf(m, pt(Opt_fowner_eq), tbuf); |
1065 seq_puts(m, " "); 1066 } 1067 1068 for (i = 0; i < MAX_LSM_RULES; i++) { 1069 if (entry->lsm[i].rule) { 1070 switch (i) { 1071 case LSM_OBJ_USER: 1072 seq_printf(m, pt(Opt_obj_user), --- 34 unchanged lines hidden --- | 1124 seq_puts(m, " "); 1125 } 1126 1127 for (i = 0; i < MAX_LSM_RULES; i++) { 1128 if (entry->lsm[i].rule) { 1129 switch (i) { 1130 case LSM_OBJ_USER: 1131 seq_printf(m, pt(Opt_obj_user), --- 34 unchanged lines hidden --- |