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: Mike Frysinger <vapier@gentoo.org>
This commit is contained in:
parent
852d51222d
commit
048bff6e02
27
ip/ipxfrm.c
27
ip/ipxfrm.c
|
|
@ -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,
|
||||||
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,
|
||||||
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);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue