summaryrefslogtreecommitdiffstats
path: root/kernel/sys.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/sys.c')
-rw-r--r--kernel/sys.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/kernel/sys.c b/kernel/sys.c
index 6af9212ab5aa..78947de6f969 100644
--- a/kernel/sys.c
+++ b/kernel/sys.c
@@ -1853,11 +1853,13 @@ static int prctl_set_mm_map(int opt, const void __user *addr, unsigned long data
1853 user_auxv[AT_VECTOR_SIZE - 1] = AT_NULL; 1853 user_auxv[AT_VECTOR_SIZE - 1] = AT_NULL;
1854 } 1854 }
1855 1855
1856 if (prctl_map.exe_fd != (u32)-1) 1856 if (prctl_map.exe_fd != (u32)-1) {
1857 error = prctl_set_mm_exe_file(mm, prctl_map.exe_fd); 1857 error = prctl_set_mm_exe_file(mm, prctl_map.exe_fd);
1858 down_read(&mm->mmap_sem); 1858 if (error)
1859 if (error) 1859 return error;
1860 goto out; 1860 }
1861
1862 down_write(&mm->mmap_sem);
1861 1863
1862 /* 1864 /*
1863 * We don't validate if these members are pointing to 1865 * We don't validate if these members are pointing to
@@ -1894,10 +1896,8 @@ static int prctl_set_mm_map(int opt, const void __user *addr, unsigned long data
1894 if (prctl_map.auxv_size) 1896 if (prctl_map.auxv_size)
1895 memcpy(mm->saved_auxv, user_auxv, sizeof(user_auxv)); 1897 memcpy(mm->saved_auxv, user_auxv, sizeof(user_auxv));
1896 1898
1897 error = 0; 1899 up_write(&mm->mmap_sem);
1898out: 1900 return 0;
1899 up_read(&mm->mmap_sem);
1900 return error;
1901} 1901}
1902#endif /* CONFIG_CHECKPOINT_RESTORE */ 1902#endif /* CONFIG_CHECKPOINT_RESTORE */
1903 1903
@@ -1963,7 +1963,7 @@ static int prctl_set_mm(int opt, unsigned long addr,
1963 1963
1964 error = -EINVAL; 1964 error = -EINVAL;
1965 1965
1966 down_read(&mm->mmap_sem); 1966 down_write(&mm->mmap_sem);
1967 vma = find_vma(mm, addr); 1967 vma = find_vma(mm, addr);
1968 1968
1969 prctl_map.start_code = mm->start_code; 1969 prctl_map.start_code = mm->start_code;
@@ -2056,7 +2056,7 @@ static int prctl_set_mm(int opt, unsigned long addr,
2056 2056
2057 error = 0; 2057 error = 0;
2058out: 2058out:
2059 up_read(&mm->mmap_sem); 2059 up_write(&mm->mmap_sem);
2060 return error; 2060 return error;
2061} 2061}
2062 2062