aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYi Wang <wang.yi59@zte.com.cn>2018-07-24 22:26:19 -0400
committerPaul Moore <paul@paul-moore.com>2018-07-30 18:09:37 -0400
commitb305f7ed0f4f494ad6f3ef5667501535d5a8fa31 (patch)
tree0e367c7ec9603bc8338f9628c45b66745ddd8aa9
parent5b71388663c0920848c0ee7de946970a2692b76d (diff)
audit: fix potential null dereference 'context->module.name'
The variable 'context->module.name' may be null pointer when kmalloc return null, so it's better to check it before using to avoid null dereference. Another one more thing this patch does is using kstrdup instead of (kmalloc + strcpy), and signal a lost record via audit_log_lost. Cc: stable@vger.kernel.org # 4.11 Signed-off-by: Yi Wang <wang.yi59@zte.com.cn> Reviewed-by: Jiang Biao <jiang.biao2@zte.com.cn> Reviewed-by: Richard Guy Briggs <rgb@redhat.com> Signed-off-by: Paul Moore <paul@paul-moore.com>
-rw-r--r--kernel/auditsc.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/kernel/auditsc.c b/kernel/auditsc.c
index ceb1c4596c51..80d672a11088 100644
--- a/kernel/auditsc.c
+++ b/kernel/auditsc.c
@@ -1279,8 +1279,12 @@ static void show_special(struct audit_context *context, int *call_panic)
1279 break; 1279 break;
1280 case AUDIT_KERN_MODULE: 1280 case AUDIT_KERN_MODULE:
1281 audit_log_format(ab, "name="); 1281 audit_log_format(ab, "name=");
1282 audit_log_untrustedstring(ab, context->module.name); 1282 if (context->module.name) {
1283 kfree(context->module.name); 1283 audit_log_untrustedstring(ab, context->module.name);
1284 kfree(context->module.name);
1285 } else
1286 audit_log_format(ab, "(null)");
1287
1284 break; 1288 break;
1285 } 1289 }
1286 audit_log_end(ab); 1290 audit_log_end(ab);
@@ -2411,8 +2415,9 @@ void __audit_log_kern_module(char *name)
2411{ 2415{
2412 struct audit_context *context = audit_context(); 2416 struct audit_context *context = audit_context();
2413 2417
2414 context->module.name = kmalloc(strlen(name) + 1, GFP_KERNEL); 2418 context->module.name = kstrdup(name, GFP_KERNEL);
2415 strcpy(context->module.name, name); 2419 if (!context->module.name)
2420 audit_log_lost("out of memory in __audit_log_kern_module");
2416 context->type = AUDIT_KERN_MODULE; 2421 context->type = AUDIT_KERN_MODULE;
2417} 2422}
2418 2423