]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
linux: Fix UB on tst-sched-setattr.c
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>
Wed, 23 Apr 2025 19:23:36 +0000 (16:23 -0300)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Thu, 8 May 2025 12:25:39 +0000 (09:25 -0300)
UBSAN: Undefined behaviour in ../sysdeps/unix/sysv/linux/tst-sched_setattr.c:86:5 null pointer passed as argument 2, nonnull attribute declared at unknown:0:0

sysdeps/unix/sysv/linux/tst-sched_setattr.c

index bf8d9afd34d965422cc3cad69a43ab363f8c3369..5698d73e0ac40e59216dd002e0ebef5eb4b502d8 100644 (file)
@@ -33,6 +33,20 @@ union
   unsigned char padding[4096];
 } u;
 
+static void
+__attribute_disable_ubsan__
+check_null_argument (volatile unsigned int size)
+{
+  /* Invalid buffer arguments result in EINVAL (not EFAULT).  */
+  errno = 0;
+  void *volatile null_pointer = NULL; /* compiler barrier.  */
+  TEST_COMPARE (sched_setattr (0, null_pointer, 0), -1);
+  TEST_COMPARE (errno, EINVAL);
+  errno = 0;
+  TEST_COMPARE (sched_getattr (0, null_pointer, size, 0), -1);
+  TEST_COMPARE (errno, EINVAL);
+}
+
 static int
 do_test (void)
 {
@@ -79,16 +93,7 @@ do_test (void)
   TEST_COMPARE (u.attr.sched_policy, SCHED_OTHER);
   TEST_COMPARE (u.attr.sched_nice, 19);
 
-  /* Invalid buffer arguments result in EINVAL (not EFAULT).  */
-  {
-    errno = 0;
-    void *volatile null_pointer = NULL; /* compiler barrier.  */
-    TEST_COMPARE (sched_setattr (0, null_pointer, 0), -1);
-    TEST_COMPARE (errno, EINVAL);
-    errno = 0;
-    TEST_COMPARE (sched_getattr (0, null_pointer, size, 0), -1);
-    TEST_COMPARE (errno, EINVAL);
-  }
+  check_null_argument (size);
 
   return 0;
 }