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'
This commit is contained in:
Joe Lawrence 2016-12-13 16:38:48 -05:00
parent e9fc979712
commit 5a6ddaad8d

View File

@ -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;
}
}