Optimized memcmp failure.

Clement LECIGNE clement.lecigne at netasq.com
Tue Aug 10 08:28:30 UTC 2010


Hi,

Here is a link to a blog post speaking about timing attacks.

http://rdist.root.org/2010/08/05/optimized-memcmp-leaks-useful-timing-differences/

It describes various memcmp() implementations of some OSes. FreeBSD is
mentionned at the end of the post and it warns about the fact that gcc
uses its own builtin memcmp() function when optimization (from O1 to O3)
is set. Unfortunately the gcc builtin memcmp() seems less optimized (at
least for i386 and amd64) than the FreeBSD memcmp() implementation (found
in libc).

I wonder if you know about that and if it could be a good thing to remove
this feature during buildworld (through -fno-builtin or anything else) ?

clem1~> cat memcmp.c
int main(int ac, char **av){return memcmp("abcd", av[0], 4);}

clem1~> gcc -O0 -S memcmp.c && cat memcmp.s
(...)
call    memcmp
(...)

clem1~> gcc -O1 -S memcmp.c && cat memcmp.s
(...)
movl    $4, %ecx
cld
repz
cmpsb
seta    %al
setb    %dl
subb    %dl, %al
movsbl  %al,%eax
(...)

Cheers,

-- 
Clement LECIGNE,
« Hardly surprising. Apple. They build crap and make you pay extra. »


More information about the freebsd-hackers mailing list