Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 311821
b: refs/heads/master
c: 4229fb1
h: refs/heads/master
i:
  311819: 6cb3d64
v: v3
  • Loading branch information
Konstantin Khlebnikov authored and Linus Torvalds committed Jul 11, 2012
1 parent bc21a76 commit cd92810
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 7 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: a4e08d001f2e50bb8b3c4eebadcf08e5535f02ee
refs/heads/master: 4229fb1dc6843c49a14bb098719f8a696cdc44f8
16 changes: 10 additions & 6 deletions trunk/kernel/sys.c
Original file line number Diff line number Diff line change
Expand Up @@ -1788,7 +1788,6 @@ SYSCALL_DEFINE1(umask, int, mask)
#ifdef CONFIG_CHECKPOINT_RESTORE
static int prctl_set_mm_exe_file(struct mm_struct *mm, unsigned int fd)
{
struct vm_area_struct *vma;
struct file *exe_file;
struct dentry *dentry;
int err;
Expand Down Expand Up @@ -1816,13 +1815,17 @@ static int prctl_set_mm_exe_file(struct mm_struct *mm, unsigned int fd)
down_write(&mm->mmap_sem);

/*
* Forbid mm->exe_file change if there are mapped other files.
* Forbid mm->exe_file change if old file still mapped.
*/
err = -EBUSY;
for (vma = mm->mmap; vma; vma = vma->vm_next) {
if (vma->vm_file && !path_equal(&vma->vm_file->f_path,
&exe_file->f_path))
goto exit_unlock;
if (mm->exe_file) {
struct vm_area_struct *vma;

for (vma = mm->mmap; vma; vma = vma->vm_next)
if (vma->vm_file &&
path_equal(&vma->vm_file->f_path,
&mm->exe_file->f_path))
goto exit_unlock;
}

/*
Expand All @@ -1835,6 +1838,7 @@ static int prctl_set_mm_exe_file(struct mm_struct *mm, unsigned int fd)
if (test_and_set_bit(MMF_EXE_FILE_CHANGED, &mm->flags))
goto exit_unlock;

err = 0;
set_mm_exe_file(mm, exe_file);
exit_unlock:
up_write(&mm->mmap_sem);
Expand Down

0 comments on commit cd92810

Please sign in to comment.