Loading kernel/auditsc.c +32 −30 Original line number Diff line number Diff line Loading @@ -506,7 +506,7 @@ static inline void audit_free_context(struct audit_context *context) printk(KERN_ERR "audit: freed %d contexts\n", count); } static void audit_log_task_context(struct audit_buffer *ab, gfp_t gfp_mask) static void audit_log_task_context(struct audit_buffer *ab) { char *ctx = NULL; ssize_t len = 0; Loading @@ -518,7 +518,7 @@ static void audit_log_task_context(struct audit_buffer *ab, gfp_t gfp_mask) return; } ctx = kmalloc(len, gfp_mask); ctx = kmalloc(len, GFP_KERNEL); if (!ctx) goto error_path; Loading @@ -536,23 +536,19 @@ static void audit_log_task_context(struct audit_buffer *ab, gfp_t gfp_mask) return; } static void audit_log_task_info(struct audit_buffer *ab, struct task_struct *tsk, gfp_t gfp_mask) static void audit_log_task_info(struct audit_buffer *ab, struct task_struct *tsk) { char name[sizeof(tsk->comm)]; struct mm_struct *mm = tsk->mm; struct vm_area_struct *vma; /* tsk == current */ get_task_comm(name, tsk); audit_log_format(ab, " comm="); audit_log_untrustedstring(ab, name); if (!mm) return; /* * this is brittle; all callers that pass GFP_ATOMIC will have * NULL tsk->mm and we won't get here. */ if (mm) { down_read(&mm->mmap_sem); vma = mm->mmap; while (vma) { Loading @@ -566,17 +562,20 @@ static void audit_log_task_info(struct audit_buffer *ab, struct task_struct *tsk vma = vma->vm_next; } up_read(&mm->mmap_sem); audit_log_task_context(ab, gfp_mask); } audit_log_task_context(ab); } static void audit_log_exit(struct audit_context *context, struct task_struct *tsk, gfp_t gfp_mask) static void audit_log_exit(struct audit_context *context, struct task_struct *tsk) { int i; struct audit_buffer *ab; struct audit_aux_data *aux; const char *tty; ab = audit_log_start(context, gfp_mask, AUDIT_SYSCALL); /* tsk == current */ ab = audit_log_start(context, GFP_KERNEL, AUDIT_SYSCALL); if (!ab) return; /* audit_panic has been called */ audit_log_format(ab, "arch=%x syscall=%d", Loading Loading @@ -607,12 +606,12 @@ static void audit_log_exit(struct audit_context *context, struct task_struct *ts context->gid, context->euid, context->suid, context->fsuid, context->egid, context->sgid, context->fsgid, tty); audit_log_task_info(ab, gfp_mask); audit_log_task_info(ab, tsk); audit_log_end(ab); for (aux = context->aux; aux; aux = aux->next) { ab = audit_log_start(context, gfp_mask, aux->type); ab = audit_log_start(context, GFP_KERNEL, aux->type); if (!ab) continue; /* audit_panic has been called */ Loading Loading @@ -649,7 +648,7 @@ static void audit_log_exit(struct audit_context *context, struct task_struct *ts } if (context->pwd && context->pwdmnt) { ab = audit_log_start(context, gfp_mask, AUDIT_CWD); ab = audit_log_start(context, GFP_KERNEL, AUDIT_CWD); if (ab) { audit_log_d_path(ab, "cwd=", context->pwd, context->pwdmnt); audit_log_end(ab); Loading @@ -659,7 +658,7 @@ static void audit_log_exit(struct audit_context *context, struct task_struct *ts unsigned long ino = context->names[i].ino; unsigned long pino = context->names[i].pino; ab = audit_log_start(context, gfp_mask, AUDIT_PATH); ab = audit_log_start(context, GFP_KERNEL, AUDIT_PATH); if (!ab) continue; /* audit_panic has been called */ Loading Loading @@ -712,8 +711,9 @@ void audit_free(struct task_struct *tsk) * function (e.g., exit_group), then free context block. * We use GFP_ATOMIC here because we might be doing this * in the context of the idle thread */ /* that can happen only if we are called from do_exit() */ if (context->in_syscall && context->auditable) audit_log_exit(context, tsk, GFP_ATOMIC); audit_log_exit(context, tsk); audit_free_context(context); } Loading Loading @@ -821,6 +821,8 @@ void audit_syscall_exit(struct task_struct *tsk, int valid, long return_code) { struct audit_context *context; /* tsk == current */ get_task_struct(tsk); task_lock(tsk); context = audit_get_context(tsk, valid, return_code); Loading @@ -832,7 +834,7 @@ void audit_syscall_exit(struct task_struct *tsk, int valid, long return_code) goto out; if (context->in_syscall && context->auditable) audit_log_exit(context, tsk, GFP_KERNEL); audit_log_exit(context, tsk); context->in_syscall = 0; context->auditable = 0; Loading Loading
kernel/auditsc.c +32 −30 Original line number Diff line number Diff line Loading @@ -506,7 +506,7 @@ static inline void audit_free_context(struct audit_context *context) printk(KERN_ERR "audit: freed %d contexts\n", count); } static void audit_log_task_context(struct audit_buffer *ab, gfp_t gfp_mask) static void audit_log_task_context(struct audit_buffer *ab) { char *ctx = NULL; ssize_t len = 0; Loading @@ -518,7 +518,7 @@ static void audit_log_task_context(struct audit_buffer *ab, gfp_t gfp_mask) return; } ctx = kmalloc(len, gfp_mask); ctx = kmalloc(len, GFP_KERNEL); if (!ctx) goto error_path; Loading @@ -536,23 +536,19 @@ static void audit_log_task_context(struct audit_buffer *ab, gfp_t gfp_mask) return; } static void audit_log_task_info(struct audit_buffer *ab, struct task_struct *tsk, gfp_t gfp_mask) static void audit_log_task_info(struct audit_buffer *ab, struct task_struct *tsk) { char name[sizeof(tsk->comm)]; struct mm_struct *mm = tsk->mm; struct vm_area_struct *vma; /* tsk == current */ get_task_comm(name, tsk); audit_log_format(ab, " comm="); audit_log_untrustedstring(ab, name); if (!mm) return; /* * this is brittle; all callers that pass GFP_ATOMIC will have * NULL tsk->mm and we won't get here. */ if (mm) { down_read(&mm->mmap_sem); vma = mm->mmap; while (vma) { Loading @@ -566,17 +562,20 @@ static void audit_log_task_info(struct audit_buffer *ab, struct task_struct *tsk vma = vma->vm_next; } up_read(&mm->mmap_sem); audit_log_task_context(ab, gfp_mask); } audit_log_task_context(ab); } static void audit_log_exit(struct audit_context *context, struct task_struct *tsk, gfp_t gfp_mask) static void audit_log_exit(struct audit_context *context, struct task_struct *tsk) { int i; struct audit_buffer *ab; struct audit_aux_data *aux; const char *tty; ab = audit_log_start(context, gfp_mask, AUDIT_SYSCALL); /* tsk == current */ ab = audit_log_start(context, GFP_KERNEL, AUDIT_SYSCALL); if (!ab) return; /* audit_panic has been called */ audit_log_format(ab, "arch=%x syscall=%d", Loading Loading @@ -607,12 +606,12 @@ static void audit_log_exit(struct audit_context *context, struct task_struct *ts context->gid, context->euid, context->suid, context->fsuid, context->egid, context->sgid, context->fsgid, tty); audit_log_task_info(ab, gfp_mask); audit_log_task_info(ab, tsk); audit_log_end(ab); for (aux = context->aux; aux; aux = aux->next) { ab = audit_log_start(context, gfp_mask, aux->type); ab = audit_log_start(context, GFP_KERNEL, aux->type); if (!ab) continue; /* audit_panic has been called */ Loading Loading @@ -649,7 +648,7 @@ static void audit_log_exit(struct audit_context *context, struct task_struct *ts } if (context->pwd && context->pwdmnt) { ab = audit_log_start(context, gfp_mask, AUDIT_CWD); ab = audit_log_start(context, GFP_KERNEL, AUDIT_CWD); if (ab) { audit_log_d_path(ab, "cwd=", context->pwd, context->pwdmnt); audit_log_end(ab); Loading @@ -659,7 +658,7 @@ static void audit_log_exit(struct audit_context *context, struct task_struct *ts unsigned long ino = context->names[i].ino; unsigned long pino = context->names[i].pino; ab = audit_log_start(context, gfp_mask, AUDIT_PATH); ab = audit_log_start(context, GFP_KERNEL, AUDIT_PATH); if (!ab) continue; /* audit_panic has been called */ Loading Loading @@ -712,8 +711,9 @@ void audit_free(struct task_struct *tsk) * function (e.g., exit_group), then free context block. * We use GFP_ATOMIC here because we might be doing this * in the context of the idle thread */ /* that can happen only if we are called from do_exit() */ if (context->in_syscall && context->auditable) audit_log_exit(context, tsk, GFP_ATOMIC); audit_log_exit(context, tsk); audit_free_context(context); } Loading Loading @@ -821,6 +821,8 @@ void audit_syscall_exit(struct task_struct *tsk, int valid, long return_code) { struct audit_context *context; /* tsk == current */ get_task_struct(tsk); task_lock(tsk); context = audit_get_context(tsk, valid, return_code); Loading @@ -832,7 +834,7 @@ void audit_syscall_exit(struct task_struct *tsk, int valid, long return_code) goto out; if (context->in_syscall && context->auditable) audit_log_exit(context, tsk, GFP_KERNEL); audit_log_exit(context, tsk); context->in_syscall = 0; context->auditable = 0; Loading