file.c (e53cfe6c7caa79ccdccce53e600dae522acb1c84) | file.c (aa9aeea8d4c3dfb9297723c4340671ef88e372d3) |
---|---|
1/* 2 * AppArmor security module 3 * 4 * This file contains AppArmor mediation of files 5 * 6 * Copyright (C) 1998-2008 Novell/SUSE 7 * Copyright 2009-2010 Canonical Ltd. 8 * --- 42 unchanged lines hidden (view full) --- 51 * @ab: audit_buffer (NOT NULL) 52 * @va: audit struct to audit values of (NOT NULL) 53 */ 54static void file_audit_cb(struct audit_buffer *ab, void *va) 55{ 56 struct common_audit_data *sa = va; 57 kuid_t fsuid = current_fsuid(); 58 | 1/* 2 * AppArmor security module 3 * 4 * This file contains AppArmor mediation of files 5 * 6 * Copyright (C) 1998-2008 Novell/SUSE 7 * Copyright 2009-2010 Canonical Ltd. 8 * --- 42 unchanged lines hidden (view full) --- 51 * @ab: audit_buffer (NOT NULL) 52 * @va: audit struct to audit values of (NOT NULL) 53 */ 54static void file_audit_cb(struct audit_buffer *ab, void *va) 55{ 56 struct common_audit_data *sa = va; 57 kuid_t fsuid = current_fsuid(); 58 |
59 if (aad(sa)->fs.request & AA_AUDIT_FILE_MASK) { | 59 if (aad(sa)->request & AA_AUDIT_FILE_MASK) { |
60 audit_log_format(ab, " requested_mask="); | 60 audit_log_format(ab, " requested_mask="); |
61 audit_file_mask(ab, aad(sa)->fs.request); | 61 audit_file_mask(ab, aad(sa)->request); |
62 } | 62 } |
63 if (aad(sa)->fs.denied & AA_AUDIT_FILE_MASK) { | 63 if (aad(sa)->denied & AA_AUDIT_FILE_MASK) { |
64 audit_log_format(ab, " denied_mask="); | 64 audit_log_format(ab, " denied_mask="); |
65 audit_file_mask(ab, aad(sa)->fs.denied); | 65 audit_file_mask(ab, aad(sa)->denied); |
66 } | 66 } |
67 if (aad(sa)->fs.request & AA_AUDIT_FILE_MASK) { | 67 if (aad(sa)->request & AA_AUDIT_FILE_MASK) { |
68 audit_log_format(ab, " fsuid=%d", 69 from_kuid(&init_user_ns, fsuid)); 70 audit_log_format(ab, " ouid=%d", 71 from_kuid(&init_user_ns, aad(sa)->fs.ouid)); 72 } 73 74 if (aad(sa)->fs.target) { 75 audit_log_format(ab, " target="); --- 19 unchanged lines hidden (view full) --- 95int aa_audit_file(struct aa_profile *profile, struct file_perms *perms, 96 const char *op, u32 request, const char *name, 97 const char *target, kuid_t ouid, const char *info, int error) 98{ 99 int type = AUDIT_APPARMOR_AUTO; 100 DEFINE_AUDIT_DATA(sa, LSM_AUDIT_DATA_TASK, op); 101 102 sa.u.tsk = NULL; | 68 audit_log_format(ab, " fsuid=%d", 69 from_kuid(&init_user_ns, fsuid)); 70 audit_log_format(ab, " ouid=%d", 71 from_kuid(&init_user_ns, aad(sa)->fs.ouid)); 72 } 73 74 if (aad(sa)->fs.target) { 75 audit_log_format(ab, " target="); --- 19 unchanged lines hidden (view full) --- 95int aa_audit_file(struct aa_profile *profile, struct file_perms *perms, 96 const char *op, u32 request, const char *name, 97 const char *target, kuid_t ouid, const char *info, int error) 98{ 99 int type = AUDIT_APPARMOR_AUTO; 100 DEFINE_AUDIT_DATA(sa, LSM_AUDIT_DATA_TASK, op); 101 102 sa.u.tsk = NULL; |
103 aad(&sa)->fs.request = request; | 103 aad(&sa)->request = request; |
104 aad(&sa)->name = name; 105 aad(&sa)->fs.target = target; 106 aad(&sa)->fs.ouid = ouid; 107 aad(&sa)->info = info; 108 aad(&sa)->error = error; 109 sa.u.tsk = NULL; 110 111 if (likely(!aad(&sa)->error)) { 112 u32 mask = perms->audit; 113 114 if (unlikely(AUDIT_MODE(profile) == AUDIT_ALL)) 115 mask = 0xffff; 116 117 /* mask off perms that are not being force audited */ | 104 aad(&sa)->name = name; 105 aad(&sa)->fs.target = target; 106 aad(&sa)->fs.ouid = ouid; 107 aad(&sa)->info = info; 108 aad(&sa)->error = error; 109 sa.u.tsk = NULL; 110 111 if (likely(!aad(&sa)->error)) { 112 u32 mask = perms->audit; 113 114 if (unlikely(AUDIT_MODE(profile) == AUDIT_ALL)) 115 mask = 0xffff; 116 117 /* mask off perms that are not being force audited */ |
118 aad(&sa)->fs.request &= mask; | 118 aad(&sa)->request &= mask; |
119 | 119 |
120 if (likely(!aad(&sa)->fs.request)) | 120 if (likely(!aad(&sa)->request)) |
121 return 0; 122 type = AUDIT_APPARMOR_AUDIT; 123 } else { 124 /* only report permissions that were denied */ | 121 return 0; 122 type = AUDIT_APPARMOR_AUDIT; 123 } else { 124 /* only report permissions that were denied */ |
125 aad(&sa)->fs.request = aad(&sa)->fs.request & ~perms->allow; 126 AA_BUG(!aad(&sa)->fs.request); | 125 aad(&sa)->request = aad(&sa)->request & ~perms->allow; 126 AA_BUG(!aad(&sa)->request); |
127 | 127 |
128 if (aad(&sa)->fs.request & perms->kill) | 128 if (aad(&sa)->request & perms->kill) |
129 type = AUDIT_APPARMOR_KILL; 130 131 /* quiet known rejects, assumes quiet and kill do not overlap */ | 129 type = AUDIT_APPARMOR_KILL; 130 131 /* quiet known rejects, assumes quiet and kill do not overlap */ |
132 if ((aad(&sa)->fs.request & perms->quiet) && | 132 if ((aad(&sa)->request & perms->quiet) && |
133 AUDIT_MODE(profile) != AUDIT_NOQUIET && 134 AUDIT_MODE(profile) != AUDIT_ALL) | 133 AUDIT_MODE(profile) != AUDIT_NOQUIET && 134 AUDIT_MODE(profile) != AUDIT_ALL) |
135 aad(&sa)->fs.request &= ~perms->quiet; | 135 aad(&sa)->request &= ~perms->quiet; |
136 | 136 |
137 if (!aad(&sa)->fs.request) | 137 if (!aad(&sa)->request) |
138 return COMPLAIN_MODE(profile) ? 0 : aad(&sa)->error; 139 } 140 | 138 return COMPLAIN_MODE(profile) ? 0 : aad(&sa)->error; 139 } 140 |
141 aad(&sa)->fs.denied = aad(&sa)->fs.request & ~perms->allow; | 141 aad(&sa)->denied = aad(&sa)->request & ~perms->allow; |
142 return aa_audit(type, profile, &sa, file_audit_cb); 143} 144 145/** 146 * map_old_perms - map old file perms layout to the new layout 147 * @old: permission set in old mapping 148 * 149 * Returns: new permission mapping --- 301 unchanged lines hidden --- | 142 return aa_audit(type, profile, &sa, file_audit_cb); 143} 144 145/** 146 * map_old_perms - map old file perms layout to the new layout 147 * @old: permission set in old mapping 148 * 149 * Returns: new permission mapping --- 301 unchanged lines hidden --- |