From 5a6ddaad8d829d18e0b1ce31b99a029010a17395 Mon Sep 17 00:00:00 2001 From: Joe Lawrence Date: Tue, 13 Dec 2016 16:38:48 -0500 Subject: [PATCH] smatch: fix kpatch_shadow_alloc cleanup The error paths in kpatch_shadow_alloc do not free an allocated kpatch_shadow structure (and it's not added to the kpatch_shadow_hash). Handle the kfree in the various error return paths. Fixes the smatch warning: kmod/core/shadow.c:97 kpatch_shadow_alloc() warn: possible memory leak of 'shadow' --- kmod/core/shadow.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/kmod/core/shadow.c b/kmod/core/shadow.c index 5b973c4..627928a 100644 --- a/kmod/core/shadow.c +++ b/kmod/core/shadow.c @@ -93,8 +93,10 @@ void *kpatch_shadow_alloc(void *obj, char *var, size_t size, gfp_t gfp) shadow->obj = obj; shadow->var = kstrdup(var, gfp); - if (!shadow->var) + if (!shadow->var) { + kfree(shadow); return NULL; + } if (size <= sizeof(shadow->data)) { shadow->data = &shadow->data; @@ -103,6 +105,7 @@ void *kpatch_shadow_alloc(void *obj, char *var, size_t size, gfp_t gfp) shadow->data = kmalloc(size, gfp); if (!shadow->data) { kfree(shadow->var); + kfree(shadow); return NULL; } }