diff options
Diffstat (limited to 'kernel/auditsc.c')
-rw-r--r-- | kernel/auditsc.c | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/kernel/auditsc.c b/kernel/auditsc.c index 359955800dd2..628c7ac590a0 100644 --- a/kernel/auditsc.c +++ b/kernel/auditsc.c | |||
@@ -739,28 +739,26 @@ static inline void audit_free_context(struct audit_context *context) | |||
739 | void audit_log_task_context(struct audit_buffer *ab) | 739 | void audit_log_task_context(struct audit_buffer *ab) |
740 | { | 740 | { |
741 | char *ctx = NULL; | 741 | char *ctx = NULL; |
742 | ssize_t len = 0; | 742 | unsigned len; |
743 | int error; | ||
744 | u32 sid; | ||
745 | |||
746 | selinux_get_task_sid(current, &sid); | ||
747 | if (!sid) | ||
748 | return; | ||
743 | 749 | ||
744 | len = security_getprocattr(current, "current", NULL, 0); | 750 | error = selinux_sid_to_string(sid, &ctx, &len); |
745 | if (len < 0) { | 751 | if (error) { |
746 | if (len != -EINVAL) | 752 | if (error != -EINVAL) |
747 | goto error_path; | 753 | goto error_path; |
748 | return; | 754 | return; |
749 | } | 755 | } |
750 | 756 | ||
751 | ctx = kmalloc(len, GFP_KERNEL); | ||
752 | if (!ctx) | ||
753 | goto error_path; | ||
754 | |||
755 | len = security_getprocattr(current, "current", ctx, len); | ||
756 | if (len < 0 ) | ||
757 | goto error_path; | ||
758 | |||
759 | audit_log_format(ab, " subj=%s", ctx); | 757 | audit_log_format(ab, " subj=%s", ctx); |
758 | kfree(ctx); | ||
760 | return; | 759 | return; |
761 | 760 | ||
762 | error_path: | 761 | error_path: |
763 | kfree(ctx); | ||
764 | audit_panic("error in audit_log_task_context"); | 762 | audit_panic("error in audit_log_task_context"); |
765 | return; | 763 | return; |
766 | } | 764 | } |