|
@@ -263,7 +263,10 @@ static int __bprm_mm_init(struct linux_binprm *bprm)
|
|
|
if (!vma)
|
|
|
return -ENOMEM;
|
|
|
|
|
|
- down_write(&mm->mmap_sem);
|
|
|
+ if (down_write_killable(&mm->mmap_sem)) {
|
|
|
+ err = -EINTR;
|
|
|
+ goto err_free;
|
|
|
+ }
|
|
|
vma->vm_mm = mm;
|
|
|
|
|
|
/*
|
|
@@ -290,6 +293,7 @@ static int __bprm_mm_init(struct linux_binprm *bprm)
|
|
|
return 0;
|
|
|
err:
|
|
|
up_write(&mm->mmap_sem);
|
|
|
+err_free:
|
|
|
bprm->vma = NULL;
|
|
|
kmem_cache_free(vm_area_cachep, vma);
|
|
|
return err;
|
|
@@ -696,7 +700,9 @@ int setup_arg_pages(struct linux_binprm *bprm,
|
|
|
bprm->loader -= stack_shift;
|
|
|
bprm->exec -= stack_shift;
|
|
|
|
|
|
- down_write(&mm->mmap_sem);
|
|
|
+ if (down_write_killable(&mm->mmap_sem))
|
|
|
+ return -EINTR;
|
|
|
+
|
|
|
vm_flags = VM_STACK_FLAGS;
|
|
|
|
|
|
/*
|