From 8d1123bf4c370318a5a81192fb1de04537a23379 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Thomas=20Wei=C3=9Fschuh?= Date: Wed, 15 May 2024 06:42:42 +0000 Subject: [PATCH] libuuid: fix v6 generation MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit get_clock_counter() does not return a gregorian timestamp as required for v6. Signed-off-by: Thomas Weißschuh --- libuuid/src/gen_uuid.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/libuuid/src/gen_uuid.c b/libuuid/src/gen_uuid.c index aa353e443..e80e371c4 100644 --- a/libuuid/src/gen_uuid.c +++ b/libuuid/src/gen_uuid.c @@ -665,13 +665,14 @@ int uuid_generate_time_safe(uuid_t out) void uuid_generate_time_v6(uuid_t out) { struct uuid uu = {}; - uint64_t clock_reg; + uint32_t clock_high, clock_low; + uint16_t clock_seq; - clock_reg = get_clock_counter(); + get_clock(&clock_high, &clock_low, &clock_seq, NULL); - uu.time_low = clock_reg >> 28; - uu.time_mid = clock_reg >> 12; - uu.time_hi_and_version = (clock_reg & 0x0FFF) | (6 << 12); + uu.time_low = (clock_high << 4) | (clock_low >> 28); + uu.time_mid = clock_low >> 12; + uu.time_hi_and_version = (clock_low & 0x0FFF) | (6 << 12); ul_random_get_bytes(&uu.clock_seq, 8); uu.clock_seq = (uu.clock_seq & 0x3FFF) | 0x8000; -- 2.47.3