[dpdk-dev] [PATCH 2/3] crypto: fix pedentic compilation errors
Gaëtan Rivet
gaetan.rivet at 6wind.com
Wed Nov 22 15:31:51 CET 2017
On Wed, Nov 22, 2017 at 08:56:14AM -0500, Neil Horman wrote:
> On Wed, Nov 22, 2017 at 09:10:17AM +0100, Nelio Laranjeiro wrote:
> > /root/dpdk/x86_64-native-linuxapp-gcc/include/rte_crypto.h:126:28: error: ISO C forbids zero-size array ‘sym’ [-Werror=pedantic]
> > struct rte_crypto_sym_op sym[0];
> > ^~~
> >
> > Fixes: d2a4223c4c6d ("cryptodev: do not store pointer to op specific params")
> > Cc: pablo.de.lara.guarch at intel.com
> > Cc: stable at dpdk.org
> >
> > Signed-off-by: Nelio Laranjeiro <nelio.laranjeiro at 6wind.com>
> > ---
> > lib/librte_cryptodev/rte_crypto.h | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/lib/librte_cryptodev/rte_crypto.h b/lib/librte_cryptodev/rte_crypto.h
> > index 3d672fe7d..dc6e91d1d 100644
> > --- a/lib/librte_cryptodev/rte_crypto.h
> > +++ b/lib/librte_cryptodev/rte_crypto.h
> > @@ -123,7 +123,7 @@ struct rte_crypto_op {
> >
> > RTE_STD_C11
> > union {
> > - struct rte_crypto_sym_op sym[0];
> > + struct rte_crypto_sym_op *sym;
> > /**< Symmetric operation parameters */
> > }; /**< operation specific parameters */
> > };
> > --
> > 2.11.0
> >
> >
> As Laura notes, this isn't the right solution. In addition to adding a 64 bit
> pointer, it I think also results in incorrect semantics. That is to say, the
> allocation path for this structure allocates the rte_crypto_op and additional
> memory for the sym array contiguously, which the sym[0] syntax correctly
> interprets to mean the storage for the array is inline with the structure.
> Changing to a pointer means you are using the first elements of the array
> storage as your pointer, which could be filled with any old value, leading to
> corruption.
>
> If you can't use zero length array semantics (which I assume you cant, as I
> don't think clang supports that), a better soution might be to remove the sym
> variable entirely, and replace it with a macro that access the sym array as an
> offset from the start of the pointer. That would seem to be an ABI change, but
> if you went through that process you would wind up with the same sized struct,
> which would be nice
>
> Neil
>
ISO C forbids zero-size arrays, but ISO C99 allows flexible arrays.
Why is this symbole within a union? Why not remove the union, change
sym[0] to sym[]?
--
Gaëtan Rivet
6WIND
More information about the dev
mailing list