Commit 048bff6e authored by Mike Frysinger's avatar Mike Frysinger Committed by Stephen Hemminger

ipxfrm: use alloca to allocate stack space

Clang doesn't support the gcc extension for embeddeding flexible arrays
inside of structures.  Use the slightly more portable alloca().
Signed-off-by: default avatarMike Frysinger <vapier@gentoo.org>
parent 852d5122
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
* Masahide NAKAMURA @USAGI * Masahide NAKAMURA @USAGI
*/ */
#include <alloca.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
...@@ -555,16 +556,13 @@ static inline void xfrm_algo_print(struct xfrm_algo *algo, int type, int len, ...@@ -555,16 +556,13 @@ static inline void xfrm_algo_print(struct xfrm_algo *algo, int type, int len,
static void xfrm_aead_print(struct xfrm_algo_aead *algo, int len, static void xfrm_aead_print(struct xfrm_algo_aead *algo, int len,
FILE *fp, const char *prefix) FILE *fp, const char *prefix)
{ {
struct { struct xfrm_algo *base_algo = alloca(sizeof(*base_algo) + algo->alg_key_len / 8);
struct xfrm_algo algo;
char key[algo->alg_key_len / 8];
} base;
memcpy(base.algo.alg_name, algo->alg_name, sizeof(base.algo.alg_name)); memcpy(base_algo->alg_name, algo->alg_name, sizeof(base_algo->alg_name));
base.algo.alg_key_len = algo->alg_key_len; base_algo->alg_key_len = algo->alg_key_len;
memcpy(base.algo.alg_key, algo->alg_key, algo->alg_key_len / 8); memcpy(base_algo->alg_key, algo->alg_key, algo->alg_key_len / 8);
__xfrm_algo_print(&base.algo, XFRMA_ALG_AEAD, len, fp, prefix, 0); __xfrm_algo_print(base_algo, XFRMA_ALG_AEAD, len, fp, prefix, 0);
fprintf(fp, " %d", algo->alg_icv_len); fprintf(fp, " %d", algo->alg_icv_len);
...@@ -574,16 +572,13 @@ static void xfrm_aead_print(struct xfrm_algo_aead *algo, int len, ...@@ -574,16 +572,13 @@ static void xfrm_aead_print(struct xfrm_algo_aead *algo, int len,
static void xfrm_auth_trunc_print(struct xfrm_algo_auth *algo, int len, static void xfrm_auth_trunc_print(struct xfrm_algo_auth *algo, int len,
FILE *fp, const char *prefix) FILE *fp, const char *prefix)
{ {
struct { struct xfrm_algo *base_algo = alloca(sizeof(*base_algo) + algo->alg_key_len / 8);
struct xfrm_algo algo;
char key[algo->alg_key_len / 8];
} base;
memcpy(base.algo.alg_name, algo->alg_name, sizeof(base.algo.alg_name)); memcpy(base_algo->alg_name, algo->alg_name, sizeof(base_algo->alg_name));
base.algo.alg_key_len = algo->alg_key_len; base_algo->alg_key_len = algo->alg_key_len;
memcpy(base.algo.alg_key, algo->alg_key, algo->alg_key_len / 8); memcpy(base_algo->alg_key, algo->alg_key, algo->alg_key_len / 8);
__xfrm_algo_print(&base.algo, XFRMA_ALG_AUTH_TRUNC, len, fp, prefix, 0); __xfrm_algo_print(base_algo, XFRMA_ALG_AUTH_TRUNC, len, fp, prefix, 0);
fprintf(fp, " %d", algo->alg_trunc_len); fprintf(fp, " %d", algo->alg_trunc_len);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment