uuid: Provide a GUID generator for raw buffer
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Mon, 24 Feb 2020 15:37:50 +0000 (17:37 +0200)
committerDavid Sterba <dsterba@suse.com>
Mon, 23 Mar 2020 16:01:47 +0000 (17:01 +0100)
In some cases we would like to generate a GUID and export it.  Though it
would require either casting to internal kernel types or an intermediate
buffer. Instead we may achieve this by supplying a pointer to raw buffer
and make a complimentary API to existing one for UUIDs.

Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: David Sterba <dsterba@suse.com>
include/linux/uuid.h
lib/uuid.c

index 8e4a500..3780460 100644 (file)
@@ -84,6 +84,7 @@ static inline bool uuid_is_null(const uuid_t *uuid)
 }
 
 void generate_random_uuid(unsigned char uuid[16]);
+void generate_random_guid(unsigned char guid[16]);
 
 extern void guid_gen(guid_t *u);
 extern void uuid_gen(uuid_t *u);
index b6a1edb..562d539 100644 (file)
@@ -40,6 +40,16 @@ void generate_random_uuid(unsigned char uuid[16])
 }
 EXPORT_SYMBOL(generate_random_uuid);
 
+void generate_random_guid(unsigned char guid[16])
+{
+       get_random_bytes(guid, 16);
+       /* Set GUID version to 4 --- truly random generation */
+       guid[7] = (guid[7] & 0x0F) | 0x40;
+       /* Set the GUID variant to DCE */
+       guid[8] = (guid[8] & 0x3F) | 0x80;
+}
+EXPORT_SYMBOL(generate_random_guid);
+
 static void __uuid_gen_common(__u8 b[16])
 {
        prandom_bytes(b, 16);