Port-i386 archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: Turning on stack protection by default
On Fri, Oct 23, 2009 at 01:47:54AM +0100, Mindaugas Rasiukevicius wrote:
> > Considering that this feature helps finding bugs and increases system
> > security I would like to suggest to turn in on by default on these
> > two NetBSD ports.
>
> Can you provide some numbers how it affects performance?
I've attached a little test program which is very recursive.(*)
Where are the results on my NetBSD/amd64 5.0_STABLE system
which is driven by a ÌXen 3040 CP running at 1.83GHz:
tron@colwyn:~>gcc fib.c -Wall -O2 -o fib
tron@colwyn:~>time ./fib 42
42 -> 267914296
./fib 42 14.07s user 0.00s system 99% cpu 14.119 total
tron@colwyn:~>gcc fib.c -fstack-protector-all -Wstack-protector -Wall -O2 -o
fib
tron@colwyn:~>time ./fib 42
42 -> 267914296
./fib 42 15.07s user 0.00s system 98% cpu 15.261 total
That is 8% overhead in a program which I believe gets affected particular
bad by enabling stack protection.
Kind regards
(*) Yes, this can be done much more efficient. The program is written
to defeat some of GCC's optimisations and to enforce stack protection.
--
Matthias Scheler http://zhadum.org.uk/
#include <stdio.h>
#include <stdlib.h>
static int
Fibonacci(int n)
{
if (n > 1) {
int f[2], i;
n--;
for (i = 0; i < 2; i++)
f[i] = Fibonacci(n - i);
return f[0] + f[1];
} else {
return n;
}
}
int
main(int argc, char **argv)
{
int i;
for (i = 1; i < argc; i++) {
int n;
if (sscanf(argv[i], "%d", &n) == 1)
(void)printf("%d -> %d\n", n, Fibonacci(n));
}
return EXIT_SUCCESS;
}
Home |
Main Index |
Thread Index |
Old Index