[Toybox] [PATCH] taskset: Use trailing portion of overlong mask

Jesse Rosenstock jmr at google.com
Thu Jun 26 01:12:29 PDT 2025


Previously, `toybox taskset` used the high bits of an overlong mask, but
util-linux
used the low bits.  Use the low bits.

% ./toybox taskset $( printf %99999s | tr ' ' 0 )f echo ok
taskset: failed to set pid 1580999's affinity: Invalid argument
% taskset $( printf %99999s | tr ' ' 0 )f echo ok
ok

Reported in
http://lists.landley.net/pipermail/toybox-landley.net/2025-June/030734.html

diff --git a/tests/taskset.test b/tests/taskset.test
index acd2869fbc..bfb52e282a 100755
--- a/tests/taskset.test
+++ b/tests/taskset.test
@@ -35,5 +35,7 @@

 testing "long mask doesn't segfault" \
   'taskset $(printf %99999s | tr \  f) echo; echo $?' '\n0\n' '' ''
+testing "long mask uses low bits" \
+  'taskset $(printf %99999s | tr \  0)1 echo; echo $?' '\n0\n' '' ''
 testing "taskset error checking" \
   'taskset 0 echo nope 2>/dev/null; echo $?' '1\n' '' ''
diff --git a/toys/other/taskset.c b/toys/other/taskset.c
index cc33d94e3b..458fbeffef 100644
--- a/toys/other/taskset.c
+++ b/toys/other/taskset.c
@@ -66,10 +66,11 @@

     if (i || toys.optc < 2) return;

-    // Convert hex strong to mask[] bits
+    // Convert hex string to mask[] bits
     memset(toybuf, 0, sizeof(toybuf));
-    k = minof(strlen(s = *toys.optargs), 2*sizeof(toybuf));
+    k = strlen(s = *toys.optargs);
     s += k;
+    k = minof(k, 2*sizeof(toybuf));
     for (j = 0; j<k; j++) {
       unsigned long digit = *(--s) - '0';
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.landley.net/pipermail/toybox-landley.net/attachments/20250626/43216c7d/attachment-0001.htm>


More information about the Toybox mailing list