Merge tag lsk-v3.10-15.03-android
[firefly-linux-kernel-4.4.55.git] / kernel / sys.c
index 6af60700eede2beecca24e2b7894e304b66c727f..b1a203d9b1e7b84508f5cfdf2ead87b6e84b59f0 100644 (file)
@@ -2193,7 +2193,7 @@ static int prctl_set_vma_anon_name(unsigned long start, unsigned long end,
                        tmp = end;
 
                /* Here vma->vm_start <= start < tmp <= (end|vma->vm_end). */
-               error = prctl_update_vma_anon_name(vma, &prev, start, end,
+               error = prctl_update_vma_anon_name(vma, &prev, start, tmp,
                                (const char __user *)arg);
                if (error)
                        return error;
@@ -2383,26 +2383,6 @@ SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3,
                        else
                                return -EINVAL;
                        break;
-               case PR_SET_TIMERSLACK_PID:
-                       if (current->pid != (pid_t)arg3 &&
-                                       !capable(CAP_SYS_NICE))
-                               return -EPERM;
-                       rcu_read_lock();
-                       tsk = find_task_by_pid_ns((pid_t)arg3, &init_pid_ns);
-                       if (tsk == NULL) {
-                               rcu_read_unlock();
-                               return -EINVAL;
-                       }
-                       get_task_struct(tsk);
-                       rcu_read_unlock();
-                       if (arg2 <= 0)
-                               tsk->timer_slack_ns =
-                                       tsk->default_timer_slack_ns;
-                       else
-                               tsk->timer_slack_ns = arg2;
-                       put_task_struct(tsk);
-                       error = 0;
-                       break;
                default:
                        return -EINVAL;
                }
@@ -2422,6 +2402,26 @@ SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3,
        case PR_GET_TID_ADDRESS:
                error = prctl_get_tid_address(me, (int __user **)arg2);
                break;
+       case PR_SET_TIMERSLACK_PID:
+               if (task_pid_vnr(current) != (pid_t)arg3 &&
+                               !capable(CAP_SYS_NICE))
+                       return -EPERM;
+               rcu_read_lock();
+               tsk = find_task_by_vpid((pid_t)arg3);
+               if (tsk == NULL) {
+                       rcu_read_unlock();
+                       return -EINVAL;
+               }
+               get_task_struct(tsk);
+               rcu_read_unlock();
+               if (arg2 <= 0)
+                       tsk->timer_slack_ns =
+                               tsk->default_timer_slack_ns;
+               else
+                       tsk->timer_slack_ns = arg2;
+               put_task_struct(tsk);
+               error = 0;
+               break;
        case PR_SET_CHILD_SUBREAPER:
                me->signal->is_child_subreaper = !!arg2;
                break;
@@ -2433,12 +2433,12 @@ SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3,
                if (arg2 != 1 || arg3 || arg4 || arg5)
                        return -EINVAL;
 
-               current->no_new_privs = 1;
+               task_set_no_new_privs(current);
                break;
        case PR_GET_NO_NEW_PRIVS:
                if (arg2 || arg3 || arg4 || arg5)
                        return -EINVAL;
-               return current->no_new_privs ? 1 : 0;
+               return task_no_new_privs(current) ? 1 : 0;
        case PR_SET_VMA:
                error = prctl_set_vma(arg2, arg3, arg4, arg5);
                break;