Commit eaccbfa564e48c87626594511f42dc8c0ad2daae

Authored by Luiz Fernando N. Capitulino
Committed by Linus Torvalds
1 parent bca1033b09

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

... ... @@ -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