From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Gujjar, Abhinandan S" Subject: Re: [PATCH] cryptodev: fix ABI breakage Date: Wed, 13 Jun 2018 10:00:45 +0000 Message-ID: <5612CB344B05EE4F95FC5B729939F78070793376@PGSMSX102.gar.corp.intel.com> References: <20180613093648.6070-1-pablo.de.lara.guarch@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Cc: "dev@dpdk.org" , "stable@dpdk.org" To: "De Lara Guarch, Pablo" , "Doherty, Declan" Return-path: In-Reply-To: <20180613093648.6070-1-pablo.de.lara.guarch@intel.com> Content-Language: en-US List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" > -----Original Message----- > From: De Lara Guarch, Pablo > Sent: Wednesday, June 13, 2018 3:07 PM > To: Doherty, Declan ; Gujjar, Abhinandan S > > Cc: dev@dpdk.org; De Lara Guarch, Pablo ; > stable@dpdk.org > Subject: [PATCH] cryptodev: fix ABI breakage >=20 > In 17.08, the crypto operation was restructured, and some reserved bytes = (5) > were added to have the mempool pointer aligned to 64 bits, since the str= ucture > is expected to be aligned to 64 bits, allowing future additions with no A= BI > breakage needed. >=20 > In 18.05, a new 2-byte field was added, so the reserved bytes were reduce= d to 3. > However, this field was added after the first 3 bytes of the structure, c= ausing it > to be placed in an offset of 4 bytes, and therefore, forcing the mempool = pointer > to be placed after 16 bytes, instead of a 8 bytes, causing unintentionall= y the ABI > breakage. >=20 > This commit fixes the breakage, by swapping the reserved bytes and the > private_data_offset field, so the latter is aligned to 2 bytes and the of= fset of the > mempool pointer returns to its original offset, > 8 bytes. >=20 > Fixes: 54c836846603 ("cryptodev: set private data for session-less mode") > Cc: stable@dpdk.org >=20 > Reported-by: Konstantin Ananyev > Signed-off-by: Pablo de Lara > --- > lib/librte_cryptodev/rte_crypto.h | 51 +++++++++++++++++++------------ > 1 file changed, 31 insertions(+), 20 deletions(-) >=20 > diff --git a/lib/librte_cryptodev/rte_crypto.h b/lib/librte_cryptodev/rte= _crypto.h > index 25404264b..a16be656d 100644 > --- a/lib/librte_cryptodev/rte_crypto.h > +++ b/lib/librte_cryptodev/rte_crypto.h > @@ -73,26 +73,37 @@ enum rte_crypto_op_sess_type { > * rte_cryptodev_enqueue_burst() / rte_cryptodev_dequeue_burst() . > */ > struct rte_crypto_op { > - uint8_t type; > - /**< operation type */ > - uint8_t status; > - /**< > - * operation status - this is reset to > - * RTE_CRYPTO_OP_STATUS_NOT_PROCESSED on allocation from > mempool and > - * will be set to RTE_CRYPTO_OP_STATUS_SUCCESS after crypto > operation > - * is successfully processed by a crypto PMD > - */ > - uint8_t sess_type; > - /**< operation session type */ > - uint16_t private_data_offset; > - /**< Offset to indicate start of private data (if any). The offset > - * is counted from the start of the rte_crypto_op including IV. > - * The private data may be used by the application to store > - * information which should remain untouched in the library/driver > - */ > - > - uint8_t reserved[3]; > - /**< Reserved bytes to fill 64 bits for future additions */ > + __extension__ > + union { > + uint64_t raw; > + __extension__ > + struct { > + uint8_t type; > + /**< operation type */ > + uint8_t status; > + /**< > + * operation status - this is reset to > + * RTE_CRYPTO_OP_STATUS_NOT_PROCESSED on > allocation > + * from mempool and will be set to > + * RTE_CRYPTO_OP_STATUS_SUCCESS after crypto > operation > + * is successfully processed by a crypto PMD > + */ > + uint8_t sess_type; > + /**< operation session type */ > + uint8_t reserved[3]; > + /**< Reserved bytes to fill 64 bits for > + * future additions > + */ > + uint16_t private_data_offset; > + /**< Offset to indicate start of private data (if any). > + * The offset is counted from the start of the > + * rte_crypto_op including IV. > + * The private data may be used by the application > + * to store information which should remain untouched > + * in the library/driver > + */ > + }; > + }; > struct rte_mempool *mempool; > /**< crypto operation mempool which operation is allocated from */ >=20 > -- Acked-by: Abhinandan Gujjar > 2.17.0