[Toybox] sleep overflow
    Elie De Brauwer 
    eliedebrauwer at gmail.com
       
    Wed Aug 15 05:48:51 PDT 2012
    
    
  
Hello all,
Found a little bug in sleep, for insanely large values (so insane people 
might use them to sleep forever and they will be disappointed when 
forever means zero) sleep might return immediately ( config SLEEP_FLOAT 
is impact, config SLEEP and config USLEEP are not affected).
Now sleep (with floating point support) functions as follows:
edb at lapedb:~/edb-stuff/toybox/toybox$ strace -e nanosleep  ./toybox 
sleep 24855d
nanosleep({2147472000, 0}, ^C <unfinished ...>
edb at lapedb:~/edb-stuff/toybox/toybox$ strace -e nanosleep  ./toybox 
sleep 24856d
nanosleep({2147558400, 2147483648}, NULL) = -1 EINVAL (Invalid argument)
So it'd better not sleep longer than 68 years :D.
This is caused by an overflow in the argument parsing, if it exceeds 
INT_MAX (0x80000000 on 32 bit) nanosleep will start to consider certain 
variables as negative.  I've attached a patch which just tops this off 
to INT_MAX. With it, it behaves more or less  as 'real' sleep:
edb at lapedb:~/edb-stuff/toybox/toybox$ strace -e nanosleep  ./toybox 
sleep 24856d
nanosleep({2147483647, 0}, ^C <unfinished ...>
edb at lapedb:~/edb-stuff/toybox/toybox$ strace -e nanosleep  sleep 24856d
nanosleep({2147483647, 999999999}, ^C <unfinished ...>
(okay, one second offset, but let's not argue about that for the coming 
first 68 years). I would sleep much better tonight if somebody could 
also give this a spin on a 64 bit system.
Below proof that usleep and sleep function reasonably well.
* usleep:
edb at lapedb:~/edb-stuff/toybox/toybox$ strace -e nanosleep  ./toybox 
usleep 500000000000000000000000000000000000000000000000000
nanosleep({2147, 483647000}, ^C <unfinished ...>
this because it bumps into the limits of the integer used)
  * sleep without floating point support
edb at lapedb:~/edb-stuff/toybox/toybox$ strace -e nanosleep  ./toybox 
sleep 5000000000000000
nanosleep({2147483647, 0}, ^C <unfinished ...>
same, bumps into the limits of int).
my 2 cents
E.
-- 
Elie De Brauwer
.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: sleep_overflow.patch
Type: text/x-patch
Size: 590 bytes
Desc: not available
URL: <http://lists.landley.net/pipermail/toybox-landley.net/attachments/20120815/df992e79/attachment-0006.bin>
    
    
More information about the Toybox
mailing list