Problems with automatic pkcs11 reinit on fork

Stef Walter stefw at collabora.co.uk
Sun Oct 30 18:38:53 CET 2011


On 2011-10-29 14:23, Nikos Mavrogiannopoulos wrote:
> On 10/10/2011 06:17 PM, Stef Walter wrote:
> 
>>> Then I'd have exactly the same problem that you have. Performance issues
>>> :) It might be better for this issue to be solved once and for all users
>>> of p11-kit.
>>
>> It's pretty hard to do this correctly at the p11-kit layer. We cannot
>> transparently hide the fact that all of a sudden all slots, token info,
>> sessions, objects, and other handles have been invalidated. Therefore
>> any structures that gnutls is holding must also be cleared on fork.
>>
>> Forgive me if I'm missing something, but the only way I see to solve
>> this part of the problem is for p11-kit to notify gnutls that any and
>> all PKCS#11 state is invalid. gnutls would then start from a clean
>> pkcs#11 state. I'll work on some patches for gnutls.
> 
> Hi any update on that (on the p11-kit part). Would p11-kit provide a
> callback when reinitialization occurs, or should gnutls use pthread_atfork?

It turns out that pthread_atfork() callbacks is really only supposed to
call async-signal-safe functions. This is specified in some versions of
the POSIX documentation, and aluded to in others. It *seems* that on
Linux the 'child' handler can get away with doing more, but that is non
portable :(

I haven't removed the behavior from p11-kit which auto-reinitializes,
even though this is broken considering the above limitation.

So what I've been meaning to do is one or both of the following:

 * Provide a function/macro which callers p11-kit can use to check if a
   fork has occurred.

 * Merge in something like the pakchois API, so that we can do the
   reinitialization checks.

Cheers,

Stef




More information about the Gnutls-devel mailing list