Trying again, as Krishna had already answered some of this.
Apologies for the half-finished email.



Dina wrote:
> 
> Krishna Yenduri wrote:
>> Dina wrote:
>>> ...
>>>
>>> 6722460 finish moving /dev/random and /dev/urandom seeding and usage 
>>> to libcryptoutil
>>> 6666204 meta slot opens and closes /dev/urandom needlessly for every read
>>>     
>>> The webrev is at http://cr.opensolaris.org/~dinak/random-hg
>>>   
>> My review comments are below.
>>
>> -Krishna
>>
>> -------------------------------------------------------------------------------------------
>>  
>>
>>
>> usr/src/lib/libcryptoutil/common/cryptoutil.h
>>
>> KY-1    -       lines 144-145
>> Highly recommend renaming these to something like
>> DEV_RANDOM and DEV_URANDOM. It is more clear and
>> gets you away from defining "AVG_QUALITY". People already know
>> about /dev/random and /dev/urandom.
>>
> 
> As an aside, see the note at
> <ONNV>/usr/src/lib/pkcs11/libpkcs11/common/metaRand.c:
> 
>    51  * NOTES:
>    52  * 1) /dev/urandom vs. /dev/random... Unfortunately P11 does not
> allow app
>    53  *    to request a "quality", so we'll just assume urandom is good
> enough.
>    54  *    Concerned apps can pull hardcore randomness from specific
> places they
>    55  *    trust (eg by checking for CKF_HW?)..
> 
> The functions as implemented were intended to make it easier
> to add support for other sources of random numbers besides
> /dev/random and /dev/urandom.  An application may want to
> register a custom random generator down the road.
> 
> That said, I can rename them to SOURCE_DEV_RANDOM and
> SOURCE_DEV_RANDOM and also rename rquality_t to rsource_t.
> It still leaves the door open to specify other sources
> and even assigning/re-assigning a quality value to a
> given source of random numbers.
> 
> 
>> KY-2    -       lines 151-152
>> Consider renaming these to pkcs11_get_random
>> (or pkcs11_generate_random) and
>> pkcs11_get_nzero_random. This makes them consistent
>> with the other routines above.
>>
> 
> Ok.
> 
>> usr/src/lib/libcryptoutil/common/random.c
>>
>> KY-3    T3      lines 34-39
>> No need for _REENTRANT madness now that libpthread is folded
>> in to libc in S10  (See PSARC 2002/217). It should be the
>> default and lines 44-49 can go away.
>>
>> Recommend removing the RAND_LOCK macros also.
>>
> 
> You mean PSARC 2002/117.
> 
> I don't understand your comment.  The reason for the code you
> flagged here is so that all the mutex locking/unlocking are no-ops
> if random.c was not compiled with the -mt compiler option.
> 
> Do you still feel they should be removed?  Then there is no
> locking and the caller needs to implement it.

This was already answered.  The ifdefs/macros for the mutexes
will be removed, but the mutexes will remain.  The point was
that the pthread library does not incur unnecessary overhead
in single-threaded apps.

> 
>> KY-4    T2      lines 198 and 216, 223 and 241
>> This results in a performance problem for the multi-thread
>> case since the global lock is held and released for each call.
>>
>> See the current meta_SeedRandom() for the solution.
>>
> 

This was answered already.  My response, "ok".

> 
>> KY-5    T2    lines 214 and 215, 239 and 240
>> This results in a performance problem since you are
>> opening and closing /dev/urandom needlessly for every seed.
>> There are applications that make this call frequently.
>>
> 
> Ok, I can move the close()/=-1 to another function that
> is to be used to explicitly close the seed fd.
> 
> For those applications that seed the random generator
> frequently, what is the approximate proportion of calls
> to seed_random()/get_random()?
> 

Since KY-4 was addressed already, my comment is no longer
relevant.

>> KY-6    T5    lines 203 and 213, 228 and 238
>> Remove the leftover comments.
>>
> 
> Will be done as part of KY-4/KY-5 clean up.
> 
>> KY-7    T3    lines 253-254, 264
>> Comments need updating.
>>
> 
> Ok.
> 
>> KY-8    T2    line 265
>> Same issue as KY-4. You are holding and releasing a lock
>> for each call to this routine by calling pkcs11_open_random.
>>
> 
> Ok.
> 
>> usr/src/lib/pkcs11/libpkcs11/common/metaGeneral.c
>>
>> KY-9    T3    line 198
>> Need to close the open fd's (if any) from /dev/random
>> and /dev/urandom. This is needed even if they are closed
>> in pkcs11_softtoken since there can be a configuration where
>> softtoken slot is disabled. Once KY-5 is addressed, the fd
>> to seed /dev/urandom needs to be closed here.
>>
>> Also, there is a change in behavior here that needs to be called
>> out in comments here -
>>
>> With this change, libpkcs11 and pkcs11_softtoken share the
>> same global fd. This can be a problem if there were ever
>> a case where  pkcs11_softtoken is finalized and closes the
>> fd while libpkcs11 is still used (say using pkcs11_kernel slots).
>>
> 
> If KY-5 were not done, then this would not be a problem
> for the random seed fd, at least.
> 
> True, libpkcs11 and pkcs11_softtoken share one fd for
> /dev/random and /dev/urandom.  However if one closes
> the fd, the other one will re-open the fd when it needs
> to get more random data (due to the implicit open).
> 
> It looks like in that situation, where one closes the
> fd and the other one opens it or vice versa, there is
> the possibility of a race.  Holding the lock longer,
> which I think you recommended against, helps.  But
> it doesn't eliminate the window between the open and
> the read.
> 

This issue is the one that needs a second look.

> 
> The implementation could be taken further with a
> SHARED/EXCLUSIVE flag that
> taken -- implement a SHARED/EXCLUSIVE flag that always
> opens one sharable random rd, and fcntl(DUPFD) if the
> caller wants exclusive access to a random fd?
> 
> 
>> usr/src/lib/pkcs11/pkcs11_softtoken/common/softGeneral.c
>>
>> KY-10    T3    line 328
>> Once KY-5 is addressed, the fd to seed /dev/urandom needs
>> to be closed here.
>>
> 

Ok.


Thanks for the feedback Krishna.

D.

> _______________________________________________
> crypto-discuss mailing list
> crypto-discuss at opensolaris.org
> http://mail.opensolaris.org/mailman/listinfo/crypto-discuss

Reply via email to