diff options
| author | Thomas Gleixner <tglx@linutronix.de> | 2013-07-12 06:34:42 -0400 |
|---|---|---|
| committer | Thomas Gleixner <tglx@linutronix.de> | 2013-07-12 06:34:42 -0400 |
| commit | f2006e27396f55276f24434f56e208d86e7f9908 (patch) | |
| tree | 71896db916d33888b4286f80117d3cac0da40e6d /fs/exec.c | |
| parent | e399eb56a6110e13f97e644658648602e2b08de7 (diff) | |
| parent | 9903883f1dd6e86f286b7bfa6e4b423f98c1cd9e (diff) | |
Merge branch 'linus' into timers/urgent
Get upstream changes so we can apply fixes against them
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'fs/exec.c')
| -rw-r--r-- | fs/exec.c | 17 |
1 files changed, 9 insertions, 8 deletions
| @@ -110,13 +110,14 @@ SYSCALL_DEFINE1(uselib, const char __user *, library) | |||
| 110 | static const struct open_flags uselib_flags = { | 110 | static const struct open_flags uselib_flags = { |
| 111 | .open_flag = O_LARGEFILE | O_RDONLY | __FMODE_EXEC, | 111 | .open_flag = O_LARGEFILE | O_RDONLY | __FMODE_EXEC, |
| 112 | .acc_mode = MAY_READ | MAY_EXEC | MAY_OPEN, | 112 | .acc_mode = MAY_READ | MAY_EXEC | MAY_OPEN, |
| 113 | .intent = LOOKUP_OPEN | 113 | .intent = LOOKUP_OPEN, |
| 114 | .lookup_flags = LOOKUP_FOLLOW, | ||
| 114 | }; | 115 | }; |
| 115 | 116 | ||
| 116 | if (IS_ERR(tmp)) | 117 | if (IS_ERR(tmp)) |
| 117 | goto out; | 118 | goto out; |
| 118 | 119 | ||
| 119 | file = do_filp_open(AT_FDCWD, tmp, &uselib_flags, LOOKUP_FOLLOW); | 120 | file = do_filp_open(AT_FDCWD, tmp, &uselib_flags); |
| 120 | putname(tmp); | 121 | putname(tmp); |
| 121 | error = PTR_ERR(file); | 122 | error = PTR_ERR(file); |
| 122 | if (IS_ERR(file)) | 123 | if (IS_ERR(file)) |
| @@ -756,10 +757,11 @@ struct file *open_exec(const char *name) | |||
| 756 | static const struct open_flags open_exec_flags = { | 757 | static const struct open_flags open_exec_flags = { |
| 757 | .open_flag = O_LARGEFILE | O_RDONLY | __FMODE_EXEC, | 758 | .open_flag = O_LARGEFILE | O_RDONLY | __FMODE_EXEC, |
| 758 | .acc_mode = MAY_EXEC | MAY_OPEN, | 759 | .acc_mode = MAY_EXEC | MAY_OPEN, |
| 759 | .intent = LOOKUP_OPEN | 760 | .intent = LOOKUP_OPEN, |
| 761 | .lookup_flags = LOOKUP_FOLLOW, | ||
| 760 | }; | 762 | }; |
| 761 | 763 | ||
| 762 | file = do_filp_open(AT_FDCWD, &tmp, &open_exec_flags, LOOKUP_FOLLOW); | 764 | file = do_filp_open(AT_FDCWD, &tmp, &open_exec_flags); |
| 763 | if (IS_ERR(file)) | 765 | if (IS_ERR(file)) |
| 764 | goto out; | 766 | goto out; |
| 765 | 767 | ||
| @@ -930,6 +932,7 @@ static int de_thread(struct task_struct *tsk) | |||
| 930 | * also take its birthdate (always earlier than our own). | 932 | * also take its birthdate (always earlier than our own). |
| 931 | */ | 933 | */ |
| 932 | tsk->start_time = leader->start_time; | 934 | tsk->start_time = leader->start_time; |
| 935 | tsk->real_start_time = leader->real_start_time; | ||
| 933 | 936 | ||
| 934 | BUG_ON(!same_thread_group(leader, tsk)); | 937 | BUG_ON(!same_thread_group(leader, tsk)); |
| 935 | BUG_ON(has_group_leader_pid(tsk)); | 938 | BUG_ON(has_group_leader_pid(tsk)); |
| @@ -945,9 +948,8 @@ static int de_thread(struct task_struct *tsk) | |||
| 945 | * Note: The old leader also uses this pid until release_task | 948 | * Note: The old leader also uses this pid until release_task |
| 946 | * is called. Odd but simple and correct. | 949 | * is called. Odd but simple and correct. |
| 947 | */ | 950 | */ |
| 948 | detach_pid(tsk, PIDTYPE_PID); | ||
| 949 | tsk->pid = leader->pid; | 951 | tsk->pid = leader->pid; |
| 950 | attach_pid(tsk, PIDTYPE_PID, task_pid(leader)); | 952 | change_pid(tsk, PIDTYPE_PID, task_pid(leader)); |
| 951 | transfer_pid(leader, tsk, PIDTYPE_PGID); | 953 | transfer_pid(leader, tsk, PIDTYPE_PGID); |
| 952 | transfer_pid(leader, tsk, PIDTYPE_SID); | 954 | transfer_pid(leader, tsk, PIDTYPE_SID); |
| 953 | 955 | ||
| @@ -1463,7 +1465,6 @@ static int do_execve_common(const char *filename, | |||
| 1463 | struct files_struct *displaced; | 1465 | struct files_struct *displaced; |
| 1464 | bool clear_in_exec; | 1466 | bool clear_in_exec; |
| 1465 | int retval; | 1467 | int retval; |
| 1466 | const struct cred *cred = current_cred(); | ||
| 1467 | 1468 | ||
| 1468 | /* | 1469 | /* |
| 1469 | * We move the actual failure in case of RLIMIT_NPROC excess from | 1470 | * We move the actual failure in case of RLIMIT_NPROC excess from |
| @@ -1472,7 +1473,7 @@ static int do_execve_common(const char *filename, | |||
| 1472 | * whether NPROC limit is still exceeded. | 1473 | * whether NPROC limit is still exceeded. |
| 1473 | */ | 1474 | */ |
| 1474 | if ((current->flags & PF_NPROC_EXCEEDED) && | 1475 | if ((current->flags & PF_NPROC_EXCEEDED) && |
| 1475 | atomic_read(&cred->user->processes) > rlimit(RLIMIT_NPROC)) { | 1476 | atomic_read(¤t_user()->processes) > rlimit(RLIMIT_NPROC)) { |
| 1476 | retval = -EAGAIN; | 1477 | retval = -EAGAIN; |
| 1477 | goto out_ret; | 1478 | goto out_ret; |
| 1478 | } | 1479 | } |
