aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/sys.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/sys.c')
-rw-r--r--kernel/sys.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/kernel/sys.c b/kernel/sys.c
index 241507f23eca..c5cb5b99cb81 100644
--- a/kernel/sys.c
+++ b/kernel/sys.c
@@ -368,6 +368,7 @@ EXPORT_SYMBOL(unregister_reboot_notifier);
368void kernel_restart(char *cmd) 368void kernel_restart(char *cmd)
369{ 369{
370 kernel_restart_prepare(cmd); 370 kernel_restart_prepare(cmd);
371 disable_nonboot_cpus();
371 if (!cmd) 372 if (!cmd)
372 printk(KERN_EMERG "Restarting system.\n"); 373 printk(KERN_EMERG "Restarting system.\n");
373 else 374 else
@@ -1788,15 +1789,15 @@ SYSCALL_DEFINE1(umask, int, mask)
1788#ifdef CONFIG_CHECKPOINT_RESTORE 1789#ifdef CONFIG_CHECKPOINT_RESTORE
1789static int prctl_set_mm_exe_file(struct mm_struct *mm, unsigned int fd) 1790static int prctl_set_mm_exe_file(struct mm_struct *mm, unsigned int fd)
1790{ 1791{
1791 struct file *exe_file; 1792 struct fd exe;
1792 struct dentry *dentry; 1793 struct dentry *dentry;
1793 int err; 1794 int err;
1794 1795
1795 exe_file = fget(fd); 1796 exe = fdget(fd);
1796 if (!exe_file) 1797 if (!exe.file)
1797 return -EBADF; 1798 return -EBADF;
1798 1799
1799 dentry = exe_file->f_path.dentry; 1800 dentry = exe.file->f_path.dentry;
1800 1801
1801 /* 1802 /*
1802 * Because the original mm->exe_file points to executable file, make 1803 * Because the original mm->exe_file points to executable file, make
@@ -1805,7 +1806,7 @@ static int prctl_set_mm_exe_file(struct mm_struct *mm, unsigned int fd)
1805 */ 1806 */
1806 err = -EACCES; 1807 err = -EACCES;
1807 if (!S_ISREG(dentry->d_inode->i_mode) || 1808 if (!S_ISREG(dentry->d_inode->i_mode) ||
1808 exe_file->f_path.mnt->mnt_flags & MNT_NOEXEC) 1809 exe.file->f_path.mnt->mnt_flags & MNT_NOEXEC)
1809 goto exit; 1810 goto exit;
1810 1811
1811 err = inode_permission(dentry->d_inode, MAY_EXEC); 1812 err = inode_permission(dentry->d_inode, MAY_EXEC);
@@ -1839,12 +1840,12 @@ static int prctl_set_mm_exe_file(struct mm_struct *mm, unsigned int fd)
1839 goto exit_unlock; 1840 goto exit_unlock;
1840 1841
1841 err = 0; 1842 err = 0;
1842 set_mm_exe_file(mm, exe_file); 1843 set_mm_exe_file(mm, exe.file); /* this grabs a reference to exe.file */
1843exit_unlock: 1844exit_unlock:
1844 up_write(&mm->mmap_sem); 1845 up_write(&mm->mmap_sem);
1845 1846
1846exit: 1847exit:
1847 fput(exe_file); 1848 fdput(exe);
1848 return err; 1849 return err;
1849} 1850}
1850 1851
@@ -2204,7 +2205,7 @@ static int __orderly_poweroff(void)
2204 return -ENOMEM; 2205 return -ENOMEM;
2205 } 2206 }
2206 2207
2207 ret = call_usermodehelper_fns(argv[0], argv, envp, UMH_NO_WAIT, 2208 ret = call_usermodehelper_fns(argv[0], argv, envp, UMH_WAIT_EXEC,
2208 NULL, argv_cleanup, NULL); 2209 NULL, argv_cleanup, NULL);
2209 if (ret == -ENOMEM) 2210 if (ret == -ENOMEM)
2210 argv_free(argv); 2211 argv_free(argv);