[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [Nbd] BUG: oversized 64b offset wrap not detected when offset + len > 64bit and thus wraps



[regarding ssize_t]

> printf("%d\n", sizeof(ssize_t));
> says 8 bytes on a 64b system
> 
> On a 32b system that (((ssize_t)((off_t)request.from + len) >
> client->exportsize)) indeed fails dramatically.
> So my fix was not complete :-)

#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
        uint64_t bla = 10ll * 1024ll *1024ll *1024ll; // will definately overflow on 32b (10GB)
        uint32_t bla2 = bla;

        printf("%lld\n", (ssize_t)((off_t)bla));
        printf("%u\n", bla2);

        printf("%d\n", sizeof(ssize_t));

        return 0;
}

folkert@...1279... /tmp $ ./a.out 
-9223372036854741816
2147483648
4

mauer:/usr/local# ./a.out 
10737418240
2147483648
8


Folkert van Heusden

-- 
MultiTail är ett flexibel redskap för att följa en eller flera logfiler, utföra
kommandon, filtrera, färglägga, sammanfoga, o.s.v...
----------------------------------------------------------------------
Phone: +31-6-41278122, PGP-key: 1F28D8AE, www.vanheusden.com



Reply to: