[U-Boot] [PATCH] net: make net_random_ethaddr() more random

Michael Walle michael at walle.cc
Fri Aug 23 07:50:01 UTC 2019


Am 2019-08-23 05:17, schrieb Bin Meng:
> On Fri, Aug 23, 2019 at 6:08 AM Michael Walle <michael at walle.cc> wrote:
>> 
>> The net_random_ethaddr() tries to get some entropy from different
>> startup times of a board. The seed is initialized with get_timer() 
>> which
>> has only a granularity of milliseconds. We can do better if we use
>> get_ticks() which returns the raw timer ticks. Using this we have a
>> higher chance of getting different values at startup.
>> 
>> Signed-off-by: Michael Walle <michael at walle.cc>
>> ---
>>  include/net.h | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>> 
>> diff --git a/include/net.h b/include/net.h
>> index a54d5eeac5..8215316bd3 100644
>> --- a/include/net.h
>> +++ b/include/net.h
>> @@ -816,7 +816,7 @@ static inline int is_valid_ethaddr(const u8 *addr)
>>  static inline void net_random_ethaddr(uchar *addr)
>>  {
>>         int i;
>> -       unsigned int seed = get_timer(0);
>> +       unsigned int seed = get_ticks() & (unsigned int)-1;
> 
> Shouldn't this be directly:
> 
> unsigned int seed = get_ticks();

get_ticks() returns an uint64_t. I wanted to explicitly strip the top 
bits if sizeof(uint64_t) != sizeof(unsigned int). Frankly, I also find 
this kinda ugly but wanted to avoid any compiler warnings. But 
apparently there is no warning (yet?).

So I'm happy to remove it if this is not an issue.

-michael


More information about the U-Boot mailing list