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

2019-08-23 Thread Michael Walle

Am 2019-08-23 05:17, schrieb Bin Meng:

On Fri, Aug 23, 2019 at 6:08 AM Michael Walle  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 
---
 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
___
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot


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

2019-08-22 Thread Bin Meng
On Fri, Aug 23, 2019 at 6:08 AM Michael Walle  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 
> ---
>  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();

>
> for (i = 0; i < 6; i++)
> addr[i] = rand_r();

Regards,
Bin
___
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot