diff options
author | Zhang Yanfei <zhangyanfei@cn.fujitsu.com> | 2013-02-27 20:03:31 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-02-27 22:10:12 -0500 |
commit | 8c333ac2e4946a673b54f974d75397c947569c29 (patch) | |
tree | 30ff21ecad4f62726ac2a90dbb9cc6e60a5b9b95 | |
parent | b92e7e0daed31389ff5ad9f558ef1284c846f6ee (diff) |
kexec: avoid freeing NULL pointer in image_crash_alloc()
Though there is no error if we free a NULL pointer, I think we could
avoid this behaviour. Change the code a little in kimage_crash_alloc()
could avoid this kind of unnecessary free.
Signed-off-by: Zhang Yanfei <zhangyanfei@cn.fujitsu.com>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Sasha Levin <sasha.levin@oracle.com>
Reviewed-by: Simon Horman <horms@verge.net.au>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | kernel/kexec.c | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/kernel/kexec.c b/kernel/kexec.c index 6b7455e3c96b..bddd3d7a74b6 100644 --- a/kernel/kexec.c +++ b/kernel/kexec.c | |||
@@ -316,7 +316,7 @@ static int kimage_crash_alloc(struct kimage **rimage, unsigned long entry, | |||
316 | mend = mstart + image->segment[i].memsz - 1; | 316 | mend = mstart + image->segment[i].memsz - 1; |
317 | /* Ensure we are within the crash kernel limits */ | 317 | /* Ensure we are within the crash kernel limits */ |
318 | if ((mstart < crashk_res.start) || (mend > crashk_res.end)) | 318 | if ((mstart < crashk_res.start) || (mend > crashk_res.end)) |
319 | goto out; | 319 | goto out_free; |
320 | } | 320 | } |
321 | 321 | ||
322 | /* | 322 | /* |
@@ -329,16 +329,15 @@ static int kimage_crash_alloc(struct kimage **rimage, unsigned long entry, | |||
329 | get_order(KEXEC_CONTROL_PAGE_SIZE)); | 329 | get_order(KEXEC_CONTROL_PAGE_SIZE)); |
330 | if (!image->control_code_page) { | 330 | if (!image->control_code_page) { |
331 | printk(KERN_ERR "Could not allocate control_code_buffer\n"); | 331 | printk(KERN_ERR "Could not allocate control_code_buffer\n"); |
332 | goto out; | 332 | goto out_free; |
333 | } | 333 | } |
334 | 334 | ||
335 | result = 0; | 335 | *rimage = image; |
336 | out: | 336 | return 0; |
337 | if (result == 0) | ||
338 | *rimage = image; | ||
339 | else | ||
340 | kfree(image); | ||
341 | 337 | ||
338 | out_free: | ||
339 | kfree(image); | ||
340 | out: | ||
342 | return result; | 341 | return result; |
343 | } | 342 | } |
344 | 343 | ||