From patchwork Fri Jan 18 04:00:50 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mike Frysinger X-Patchwork-Id: 213450 X-Patchwork-Delegate: shemminger@vyatta.com Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 9DB202C007E for ; Fri, 18 Jan 2013 14:57:22 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754140Ab3ARD5R (ORCPT ); Thu, 17 Jan 2013 22:57:17 -0500 Received: from smtp.gentoo.org ([140.211.166.183]:43350 "EHLO smtp.gentoo.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753294Ab3ARD5Q (ORCPT ); Thu, 17 Jan 2013 22:57:16 -0500 Received: from localhost.localdomain (localhost [127.0.0.1]) by smtp.gentoo.org (Postfix) with ESMTP id E6FDE33D8D6; Fri, 18 Jan 2013 03:57:15 +0000 (UTC) From: Mike Frysinger To: stephen.hemminger@vyatta.com, netdev@vger.kernel.org Subject: [PATCH v2] [iproute] ipxfrm: use alloca to allocate stack space Date: Thu, 17 Jan 2013 23:00:50 -0500 Message-Id: <1358481650-20816-1-git-send-email-vapier@gentoo.org> X-Mailer: git-send-email 1.8.0.2 In-Reply-To: <1358476746-10810-1-git-send-email-vapier@gentoo.org> References: <1358476746-10810-1-git-send-email-vapier@gentoo.org> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org 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 --- v2 - use alloca rather than flexible arrays in structures ip/ipxfrm.c | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/ip/ipxfrm.c b/ip/ipxfrm.c index c7b3420..dda4a7a 100644 --- a/ip/ipxfrm.c +++ b/ip/ipxfrm.c @@ -25,6 +25,7 @@ * Masahide NAKAMURA @USAGI */ +#include #include #include #include @@ -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, FILE *fp, const char *prefix) { - struct { - struct xfrm_algo algo; - char key[algo->alg_key_len / 8]; - } base; + struct xfrm_algo *base_algo = alloca(sizeof(*base_algo) + algo->alg_key_len / 8); - memcpy(base.algo.alg_name, algo->alg_name, sizeof(base.algo.alg_name)); - 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_name, algo->alg_name, sizeof(base_algo->alg_name)); + base_algo->alg_key_len = algo->alg_key_len; + 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); @@ -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, FILE *fp, const char *prefix) { - struct { - struct xfrm_algo algo; - char key[algo->alg_key_len / 8]; - } base; + struct xfrm_algo *base_algo = alloca(sizeof(*base_algo) + algo->alg_key_len / 8); - memcpy(base.algo.alg_name, algo->alg_name, sizeof(base.algo.alg_name)); - 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_name, algo->alg_name, sizeof(base_algo->alg_name)); + base_algo->alg_key_len = algo->alg_key_len; + 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);