Dear Przemyslaw Marczak,

In message 
<cc0f558724a4d3ea3497b84601038f5f18f37a7b.1394037321.git.p.marc...@samsung.com> 
you wrote:
> This patch adds support to generate UUID (Universally Unique Identifier)
> in version 4 based on RFC4122, which is randomly.
...
> +struct uuid {
> +     unsigned int time_low;
> +     unsigned short time_mid;
> +     unsigned short time_hi_and_version;
> +     unsigned char clock_seq_hi_and_reserved;
> +     unsigned char clock_seq_low;
> +     unsigned char node[6];
> +};

This struct starts with an uint, so it requires alignment on a 32 bit
boundary (i. e. an address that is a multiple of 4).

> +void gen_rand_uuid(unsigned char *uuid_bin)
> +{
> +     struct uuid *uuid = (struct uuid *)uuid_bin;

Here you cast a pointer to the (unaligned) character buffer to a
struct buffer, which requires alignment.

> +     unsigned int *ptr = (unsigned int *)uuid_bin;

> +     /* Set all fields randomly */
> +     for (i = 0; i < sizeof(struct uuid) / sizeof(*ptr); i++)
> +             *(ptr + i) = rand();

This code is dangerous - if the size of the struct should not be a
multiple of sizeof(uint), there would remain uninitialized data.

And note that it is likely that all these accesses are unaligned and
might cause exceptions.

> +     /* Set V4 format */
> +     uuid->time_hi_and_version &= UUID_VERSION_CLEAR_BITS;
> +     uuid->time_hi_and_version |= UUID_VERSION << UUID_VERSION_SHIFT;

Potentially unaligned accesses.

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: w...@denx.de
As a general rule, the freedom of any people can  be  judged  by  the
volume of their laughter.
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to