Commit eaccbfa564e48c87626594511f42dc8c0ad2daae
Committed by
Linus Torvalds
1 parent
bca1033b09
Exists in
master
and in
4 other branches
fs/exec.c:__bprm_mm_init(): clean up error handling
Untangle the error unwinding in this function, saving a test of local variable `vma'. Signed-off-by: Luiz Fernando N. Capitulino <lcapitulino@mandriva.com.br> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Showing 1 changed file with 6 additions and 14 deletions Side-by-side Diff
fs/exec.c
... | ... | @@ -232,13 +232,13 @@ |
232 | 232 | |
233 | 233 | static int __bprm_mm_init(struct linux_binprm *bprm) |
234 | 234 | { |
235 | - int err = -ENOMEM; | |
235 | + int err; | |
236 | 236 | struct vm_area_struct *vma = NULL; |
237 | 237 | struct mm_struct *mm = bprm->mm; |
238 | 238 | |
239 | 239 | bprm->vma = vma = kmem_cache_zalloc(vm_area_cachep, GFP_KERNEL); |
240 | 240 | if (!vma) |
241 | - goto err; | |
241 | + return -ENOMEM; | |
242 | 242 | |
243 | 243 | down_write(&mm->mmap_sem); |
244 | 244 | vma->vm_mm = mm; |
245 | 245 | |
246 | 246 | |
247 | 247 | |
248 | 248 | |
249 | 249 | |
250 | 250 | |
... | ... | @@ -251,28 +251,20 @@ |
251 | 251 | */ |
252 | 252 | vma->vm_end = STACK_TOP_MAX; |
253 | 253 | vma->vm_start = vma->vm_end - PAGE_SIZE; |
254 | - | |
255 | 254 | vma->vm_flags = VM_STACK_FLAGS; |
256 | 255 | vma->vm_page_prot = vm_get_page_prot(vma->vm_flags); |
257 | 256 | err = insert_vm_struct(mm, vma); |
258 | - if (err) { | |
259 | - up_write(&mm->mmap_sem); | |
257 | + if (err) | |
260 | 258 | goto err; |
261 | - } | |
262 | 259 | |
263 | 260 | mm->stack_vm = mm->total_vm = 1; |
264 | 261 | up_write(&mm->mmap_sem); |
265 | - | |
266 | 262 | bprm->p = vma->vm_end - sizeof(void *); |
267 | - | |
268 | 263 | return 0; |
269 | - | |
270 | 264 | err: |
271 | - if (vma) { | |
272 | - bprm->vma = NULL; | |
273 | - kmem_cache_free(vm_area_cachep, vma); | |
274 | - } | |
275 | - | |
265 | + up_write(&mm->mmap_sem); | |
266 | + bprm->vma = NULL; | |
267 | + kmem_cache_free(vm_area_cachep, vma); | |
276 | 268 | return err; |
277 | 269 | } |
278 | 270 |