From 32d2b5fdd93ceee192abefb3fd0ce8f9a1b329c2 Mon Sep 17 00:00:00 2001 From: Tomas Mraz Date: Mon, 26 Jun 2023 17:13:30 +0200 Subject: [PATCH] s390xcap.c: Avoid copying structure on initialization This is problematic on old compilers. It also avoids duplicating the read-only data. Reviewed-by: Todd Short Reviewed-by: Matt Caswell Reviewed-by: Paul Dale (Merged from https://github.com/openssl/openssl/pull/21284) (cherry picked from commit 0dee3b0421047354abd0b70cedd4c1bceaf323b0) --- crypto/s390xcap.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/crypto/s390xcap.c b/crypto/s390xcap.c index 5d2e96805c6..6bb9abb8098 100644 --- a/crypto/s390xcap.c +++ b/crypto/s390xcap.c @@ -57,14 +57,16 @@ cap->NAME[1] = ~cap->NAME[1]; \ } -#define TOK_CPU(NAME) \ +#define TOK_CPU_ALIAS(NAME, STRUCT_NAME) \ (sscanf(tok_begin, \ " %" STR(LEN) "s %" STR(LEN) "s ", \ tok[0], tok[1]) == 1 \ && !strcmp(tok[0], #NAME)) { \ - memcpy(cap, &NAME, sizeof(*cap)); \ + memcpy(cap, &STRUCT_NAME, sizeof(*cap)); \ } +#define TOK_CPU(NAME) TOK_CPU_ALIAS(NAME, NAME) + #ifndef OSSL_IMPLEMENT_GETAUXVAL static sigjmp_buf ill_jmp; static void ill_handler(int sig) @@ -746,9 +748,8 @@ static int parse_env(struct OPENSSL_s390xcap_st *cap, int *cex) /*- * z16 (2022) - z/Architecture POP - * Implements MSA and MSA1-9 (same as z15). + * Implements MSA and MSA1-9 (same as z15, no need to repeat). */ - static const struct OPENSSL_s390xcap_st z16 = z15; char *tok_begin, *tok_end, *buff, tok[S390X_STFLE_MAX][LEN + 1]; int rc, off, i, n; @@ -804,7 +805,7 @@ static int parse_env(struct OPENSSL_s390xcap_st *cap, int *cex) else if TOK_CPU(z13) else if TOK_CPU(z14) else if TOK_CPU(z15) - else if TOK_CPU(z16) + else if TOK_CPU_ALIAS(z16, z15) /* nocex to deactivate cex support */ else if (sscanf(tok_begin, " %" STR(LEN) "s %" STR(LEN) "s ", -- 2.47.2