libparted/labels/dos.c:generate_random_id()
is used to create a new mbr_signature where none exists. The possible return values for generate_random_id() range from 0 to 999999, derived from the tv_usec field of gettimeofday(2).

This limits the actual value written to mbr_signature to 0.023% of the possible uint32 values.

I don't know how many MBRs in the world libparted has written the mbr_signature to, but the chance of collisions are greatly increased by having an artificially restricted value.

Is there a better libc-provided rand(3)/random(3) function which can be used to provide a full 32 bits of randomness?

I haven't checked all the other mklabel types, but it's possible they have similar limitations. gpt.c uses uuid_generate() which delegates the task to libuuid. Perhaps this could be used (with truncated output) for the MBR signature?

Cheers,
Phil



Reply via email to