The use of s_id should go through the untrusted string path, just to be extra careful.
Showing the changes to security (2 of 2 files). Show all
Unified · Split
| @@ -56,9 +56,11 @@ void integrity_audit_msg(int audit_msgno, struct inode *inode, · 55 unmodified lines | ||
| 56 | 56 | audit_log_format(ab, " name="); |
| 57 | 57 | audit_log_untrustedstring(ab, fname); |
| 58 | 58 | } |
| 59 | − if (inode) | |
| 60 | − audit_log_format(ab, " dev=%s ino=%lu", | |
| 61 | − inode->i_sb->s_id, inode->i_ino); | |
| 59 | + if (inode) { | |
| 60 | + audit_log_format(ab, " dev="); | |
| 61 | + audit_log_untrustedstring(ab, inode->i_sb->s_id); | |
| 62 | + audit_log_format(ab, " ino=%lu", inode->i_ino); | |
| 63 | + } | |
| 62 | 64 | audit_log_format(ab, " res=%d", !result ? 0 : 1); |
| 63 | 65 | audit_log_end(ab); |
| 64 | 66 | } |
| @@ -235,10 +235,11 @@ static void dump_common_audit_data(struct audit_buffer *ab, · 234 unmodified lines | ||
| 235 | 235 | audit_log_d_path(ab, "path=", &a->u.path); |
| 236 | 236 | |
| 237 | 237 | inode = a->u.path.dentry->d_inode; |
| 238 | − if (inode) | |
| 239 | − audit_log_format(ab, " dev=%s ino=%lu", | |
| 240 | − inode->i_sb->s_id, | |
| 241 | − inode->i_ino); | |
| 238 | + if (inode) { | |
| 239 | + audit_log_format(ab, " dev="); | |
| 240 | + audit_log_untrustedstring(ab, inode->i_sb->s_id); | |
| 241 | + audit_log_format(ab, " ino=%lu", inode->i_ino); | |
| 242 | + } | |
| 242 | 243 | break; |
| 243 | 244 | } |
| 244 | 245 | case LSM_AUDIT_DATA_DENTRY: { |
| @@ -248,10 +249,11 @@ static void dump_common_audit_data(struct audit_buffer *ab, · 3 unmodified lines | ||
| 248 | 249 | audit_log_untrustedstring(ab, a->u.dentry->d_name.name); |
| 249 | 250 | |
| 250 | 251 | inode = a->u.dentry->d_inode; |
| 251 | − if (inode) | |
| 252 | − audit_log_format(ab, " dev=%s ino=%lu", | |
| 253 | − inode->i_sb->s_id, | |
| 254 | − inode->i_ino); | |
| 252 | + if (inode) { | |
| 253 | + audit_log_format(ab, " dev="); | |
| 254 | + audit_log_untrustedstring(ab, inode->i_sb->s_id); | |
| 255 | + audit_log_format(ab, " ino=%lu", inode->i_ino); | |
| 256 | + } | |
| 255 | 257 | break; |
| 256 | 258 | } |
| 257 | 259 | case LSM_AUDIT_DATA_INODE: { |
| @@ -266,8 +268,9 @@ static void dump_common_audit_data(struct audit_buffer *ab, · 8 unmodified lines | ||
| 266 | 268 | dentry->d_name.name); |
| 267 | 269 | dput(dentry); |
| 268 | 270 | } |
| 269 | − audit_log_format(ab, " dev=%s ino=%lu", inode->i_sb->s_id, | |
| 270 | − inode->i_ino); | |
| 271 | + audit_log_format(ab, " dev="); | |
| 272 | + audit_log_untrustedstring(ab, inode->i_sb->s_id); | |
| 273 | + audit_log_format(ab, " ino=%lu", inode->i_ino); | |
| 271 | 274 | break; |
| 272 | 275 | } |
| 273 | 276 | case LSM_AUDIT_DATA_TASK: |