[U-Boot] [PATCH 2/2] calimain: Generate random MAC address for factory tests

Christian Riesch christian.riesch at omicron.at
Wed Jan 9 09:34:12 CET 2013


Hello Wolfgang,
Thank you again for your comments.

On 2013-01-08 18:39, Wolfgang Denk wrote:
> Dear Christian Riesch,
>
> In message <6cc4810c-1e2e-4ebf-912a-96936f035c0e at mary.at.omicron.at> you wrote:
>> Signed-off-by: Christian Riesch <christian.riesch at omicron.at>
>> ---
>>   board/omicron/calimain/calimain.c |   31 ++++++++++++++++++++++++++++++-
>>   include/configs/calimain.h        |    2 ++
>>   2 files changed, 32 insertions(+), 1 deletion(-)
>>
>> diff --git a/board/omicron/calimain/calimain.c b/board/omicron/calimain/calimain.c
>> index 1060a1f..80e3893 100644
>> --- a/board/omicron/calimain/calimain.c
>> +++ b/board/omicron/calimain/calimain.c
>> @@ -1,5 +1,5 @@
>>   /*
>> - * Copyright (C) 2011 OMICRON electronics GmbH
>> + * Copyright (C) 2011-2013 OMICRON electronics GmbH
>>    *
>>    * Based on da850evm.c. Original Copyrights follow:
>>    *
>> @@ -136,6 +136,35 @@ int board_init(void)
>>   	return 0;
>>   }
>>
>> +/* seed random number generator with uninitialized SRAM content */
>> +static void srand_sram(void)
>> +{
>> +	int *p;
>> +	int seed = 0;
>> +
>> +	for (p = (int *) 0x80000000; p < (int *) 0x8001ffff; p++)
>> +		seed ^= *p;
>> +
>> +	srand(seed);
>> +}
>
> Note that your "uninitialized" SRAM content is probably not so much
> random at all -

There are several papers around describing the use of initial SRAM value 
after power up for the generation of random numbers. This is why I gave 
it a try, and it works pretty well for me. I get a different seed for 
each power-up cycle. I guess that the randomness is limited and that 
part of the generated seed is more a fingerprint for the chip, therefore 
it may not be good enough for security related stuff, but for my purpose 
it's ok.

> I guess, it is much less random than the originally
> used timer value.

In my case the timer value is not random at all since it is reset to 
zero at power-up. Since seeding the random number generator is always 
done at the same time after power-up in the current code, the seed will 
always be the same for my devices. Therefore the generated MAC address 
will always be the same for all devices.

> What exactly is your justification for such a change?  Please
> elucidate...

Actually I do not change anything ;-)

For the lsxl board that is currently the only user of eth_random_enet(), 
nothing changes. get_timer(0) remains the source of the randomness for 
this board. My patches only allow other boards to use a sources of 
randomness that is available to them instead of forcing everyone to use 
get_timer(0).

>
>> +int board_late_init(void)
>> +{
>> +	uchar enetaddr[6];
>> +
>> +	if (!eth_getenv_enetaddr("ethaddr", enetaddr)) {
>> +		srand_sram();
>> +		eth_random_enetaddr(enetaddr);
>> +		if (eth_setenv_enetaddr("ethaddr", enetaddr)) {
>> +			printf("Failed to set random ethernet address\n");
>> +		} else {
>> +			printf("Setting random ethernet address %pM.\n",
>> +			       enetaddr);
>> +		}
>> +	}
>> +	return 0;
>> +}
>
> NAK! You are but duplicating the code already present in net/eth.c

Apparently I am missing something here. I do not see a call of 
eth_random_enetaddr() in net/eth.c. To which part of net/eth.c are you 
referring?

Regards, Christian

> This makes no sense.
>
> Best regards,
>
> Wolfgang Denk
>



More information about the U-Boot mailing list