From: Zbigniew Jędrzejewski-Szmek Date: Sat, 26 Aug 2023 10:34:34 +0000 (+0200) Subject: sd-id128: avoid one memcpy X-Git-Tag: v255-rc1~598^2~10 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0f7735d7a9232e04d40adb0a8604e62e69af57c2;p=thirdparty%2Fsystemd.git sd-id128: avoid one memcpy By aligning the output buffer, we can just use the result directly, no need to copy stuff around. --- diff --git a/src/libsystemd/sd-id128/sd-id128.c b/src/libsystemd/sd-id128/sd-id128.c index 6a82a7f7b89..be6da9c88aa 100644 --- a/src/libsystemd/sd-id128/sd-id128.c +++ b/src/libsystemd/sd-id128/sd-id128.c @@ -339,17 +339,18 @@ _public_ int sd_id128_randomize(sd_id128_t *ret) { } static int get_app_specific(sd_id128_t base, sd_id128_t app_id, sd_id128_t *ret) { - uint8_t hmac[SHA256_DIGEST_SIZE]; - sd_id128_t result; + assert_cc(sizeof(sd_id128_t) < SHA256_DIGEST_SIZE); /* Check that we don't need to pad with zeros. */ + union { + uint8_t hmac[SHA256_DIGEST_SIZE]; + sd_id128_t result; + } buf; assert(ret); - hmac_sha256(&base, sizeof(base), &app_id, sizeof(app_id), hmac); + hmac_sha256(&base, sizeof(base), &app_id, sizeof(app_id), buf.hmac); /* Take only the first half. */ - memcpy(&result, hmac, MIN(sizeof(hmac), sizeof(result))); - - *ret = id128_make_v4_uuid(result); + *ret = id128_make_v4_uuid(buf.result); return 0; }