Integration of ProPolice in FreeBSD
Antoine Brodin
antoine at FreeBSD.org
Wed Apr 23 20:25:20 UTC 2008
On Wed, Apr 23, 2008 at 4:33 PM, Jeremie Le Hen <jeremie at le-hen.org> wrote:
> Hi John,
> On Wed, Apr 23, 2008 at 09:34:42AM -0400, John Baldwin wrote:
> > On Wednesday 23 April 2008 09:17:20 am Jeremie Le Hen wrote:
> > > This limitation also exists in the kernel. Currently, the kernel canary
> > > is initialized with:
> > >
> > > +/* SI_SUB_EVENTHANDLER is right after SI_SUB_LOCK, used by arc4rand()
> > > init. */ +SYSINIT(stack_chk, SI_SUB_EVENTHANDLER, SI_ORDER_ANY,
> > > __stack_chk_init, NULL);
> > >
> > > Luckily it seems that for now there is no function on the calling path
> > > to __stack_chk_init() that GCC deem useful to protect with
> > > stack-smashing protection. There is nothing that will prevent this to
> > > occur because of a careless change in the future though.
> > >
> > > So obviously, using -fstack-protector-all will break the kernel too.
> > >
> > > FWIW, it is easier to handle this in NetBSD as the canary is initialized
> > > in main(). Nonetheless I suppose it may arise if main() happens to
> > > return.
> >
> > mi_startup() is what runs the sysinit's and is the equivalent of main().
>
> Ok thanks for the info.
>
>
> > > I'm not sure what is the best way to handle this. Should I write special
> > > rules for those files with
> > > ${CFLAGS:S/^-fstack-protector-all$/-fstack-protector/g}
> > > or simply document that building the system with -fstack-protector-all
> > > is not supported?
> >
> > Does GCC provide an attribute that can be applied to a function to disable
> > stack protection? We could explicitly disable it for the few functions
> > (mi_startup(), initi386(), etc.) on the call path to mi_startup().
>
> Sorry, I should have mentionned that I've already skimmed over gcc info
> page and then asked on #gcc on FreeNode for such an atttribute, but
> there isn't:
>
> % 22:16 < Guilt> there are a lot of problems in enabling/disabling
> % fstack-protector in the mid of the program
> % 22:16 < Guilt> one is that specs for libssp are taken from the driver
> % program
> % 22:17 < Guilt> not the compiler (cc1) and it's not possible to
> % arbitrarily enable/disable those
>
> Ultimately those functions should be moved into separate compilation
> units. Maybe the current layout is sufficient, I don't know. Would you
> please give me some hint about the functions that must not be protected?
> Maybe all the MD stuff?
>
> Thank you very much.
Using the following patch, I can boot and run a kernel compiled with
-fstack-protector-all (tested on i386, UP)
Cheers,
Antoine
Index: sys/conf/files
===================================================================
RCS file: /home/ncvs/src/sys/conf/files,v
retrieving revision 1.1294
diff -u -r1.1294 files
--- sys/conf/files 21 Apr 2008 10:09:53 -0000 1.1294
+++ sys/conf/files 23 Apr 2008 20:14:01 -0000
@@ -1499,6 +1499,8 @@
kern/sched_4bsd.c optional sched_4bsd
kern/sched_ule.c optional sched_ule
kern/serdev_if.m standard
+kern/stack_protector.c standard \
+ compile-with "${NORMAL_C:N-fstack-protector*}"
kern/subr_acl_posix1e.c standard
kern/subr_autoconf.c standard
kern/subr_blist.c standard
More information about the freebsd-arch
mailing list