Is fork() hook ever possible?

Max Laier max at love2party.net
Tue Sep 16 16:39:52 UTC 2008


On Tuesday 16 September 2008 16:03:20 Andrey Chernov wrote:
> I need some sort of fork() hook to detect that pid is changed to re-stir
> ar4random() after that (in the child), simple flag variable with
> child's pid is needed.
>
> Currently OpenBSD does almost that checking getpid() every time
> arc4random() called, but it is very slow way to use getpid() syscall
> repeatedly, about 12-15 times slower than just arc4random() without
> getpid().
>
> Any ideas?

I guess the goal here is not to leak the state of the seed to the child, 
right?

Wouldn't it be easier to do something like this in libc's fork():

  arc4random_stir();		/* create a new seed for the child */
  fork_syscall();
  if (parent)
     arc4random_stir();	/* create a new seed for the parent */

This should solve the problem and doesn't require any handling in arc4random.  
Of course, programs that call the fork syscall directly won't benefit, but 
then again ... they are using the syscall directly and should know what they 
are doing, right?

-- 
/"\  Best regards,                      | mlaier at freebsd.org
\ /  Max Laier                          | ICQ #67774661
 X   http://pf4freebsd.love2party.net/  | mlaier at EFnet
/ \  ASCII Ribbon Campaign              | Against HTML Mail and News


More information about the freebsd-current mailing list