[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <9c5a46d890dc5dbb65d1a2e6f9cb0d04a775add7.camel@perches.com>
Date: Wed, 23 May 2018 11:11:14 -0700
From: Joe Perches <joe@...ches.com>
To: Martin KaFai Lau <kafai@...com>, netdev@...r.kernel.org
Cc: Alexei Starovoitov <ast@...com>,
Daniel Borkmann <daniel@...earbox.net>, kernel-team@...com
Subject: Re: [PATCH bpf-next] bpf: btf: Avoid variable length array
On Wed, 2018-05-23 at 10:46 -0700, Martin KaFai Lau wrote:
> Sparse warning:
> kernel/bpf/btf.c:1985:34: warning: Variable length array is used.
Perhaps use ARRAY_SIZE directly instead of indirectly via a #define
> diff --git a/kernel/bpf/btf.c b/kernel/bpf/btf.c
[]
> @@ -1970,6 +1970,8 @@ static const size_t btf_sec_info_offset[] = {
> offsetof(struct btf_header, str_off),
> };
>
> +#define NR_SECS ARRAY_SIZE(btf_sec_info_offset)
> +
> static int btf_sec_info_cmp(const void *a, const void *b)
> {
> const struct btf_sec_info *x = a;
> @@ -1981,8 +1983,7 @@ static int btf_sec_info_cmp(const void *a, const void *b)
> static int btf_check_sec_info(struct btf_verifier_env *env,
> u32 btf_data_size)
> {
> - const unsigned int nr_secs = ARRAY_SIZE(btf_sec_info_offset);
> - struct btf_sec_info secs[nr_secs];
> + struct btf_sec_info secs[NR_SECS];
struct btf_sec_info secs[ARRAY_SIZE(btf_sec_info_offset)];
> u32 total, expected_total, i;
> const struct btf_header *hdr;
> const struct btf *btf;
> @@ -1991,17 +1992,17 @@ static int btf_check_sec_info(struct btf_verifier_env *env,
> hdr = &btf->hdr;
>
> /* Populate the secs from hdr */
> - for (i = 0; i < nr_secs; i++)
> + for (i = 0; i < NR_SECS; i++)
for (i = 0; i < ARRAY_SIZE(btf_sec_info_offset); i++)
> secs[i] = *(struct btf_sec_info *)((void *)hdr +
> btf_sec_info_offset[i]);
which makes this loop more intelligible.
> - sort(secs, nr_secs, sizeof(struct btf_sec_info),
> + sort(secs, NR_SECS, sizeof(struct btf_sec_info),
> btf_sec_info_cmp, NULL);
etc...
Powered by blists - more mailing lists