NPTL: Don't (re)validate sched_priority in pthread_create.
authorRoland McGrath <roland@hack.frob.com>
Thu, 20 Nov 2014 01:34:25 +0000 (17:34 -0800)
committerRoland McGrath <roland@hack.frob.com>
Thu, 20 Nov 2014 01:34:25 +0000 (17:34 -0800)
ChangeLog
nptl/pthread_create.c

index 239c9fe..6199b7e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2014-11-19  Roland McGrath  <roland@hack.frob.com>
 
+       * nptl/pthread_create.c (__pthread_create_2_1): Don't try to validate
+       the sched_priority value here.  It was already checked when the user
+       called pthread_attr_setschedparam.
+
        * nptl/tst-bad-schedattr.c: New file.
        * nptl/Makefile (tests): Add it.
 
index da3dc46..1dd1b95 100644 (file)
@@ -605,6 +605,7 @@ __pthread_create_2_1 (newthread, attr, start_routine, arg)
        }
 
       if (iattr->flags & ATTR_FLAG_SCHED_SET)
+        /* The values were validated in pthread_attr_setschedparam.  */
        memcpy (&pd->schedparam, &iattr->schedparam,
                sizeof (struct sched_param));
       else if ((pd->flags & ATTR_FLAG_SCHED_SET) == 0)
@@ -612,26 +613,6 @@ __pthread_create_2_1 (newthread, attr, start_routine, arg)
          INTERNAL_SYSCALL (sched_getparam, scerr, 2, 0, &pd->schedparam);
          pd->flags |= ATTR_FLAG_SCHED_SET;
        }
-
-      /* Check for valid priorities.  */
-      int minprio = INTERNAL_SYSCALL (sched_get_priority_min, scerr, 1,
-                                     iattr->schedpolicy);
-      int maxprio = INTERNAL_SYSCALL (sched_get_priority_max, scerr, 1,
-                                     iattr->schedpolicy);
-      if (pd->schedparam.sched_priority < minprio
-         || pd->schedparam.sched_priority > maxprio)
-       {
-         /* Perhaps a thread wants to change the IDs and if waiting
-            for this stillborn thread.  */
-         if (__builtin_expect (atomic_exchange_acq (&pd->setxid_futex, 0)
-                               == -2, 0))
-           lll_futex_wake (&pd->setxid_futex, 1, LLL_PRIVATE);
-
-         __deallocate_stack (pd);
-
-         retval = EINVAL;
-         goto out;
-       }
     }
 
   /* Pass the descriptor to the caller.  */