From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Ananyev, Konstantin" Subject: Re: [PATCH] cryptodev: fix ABI breakage Date: Wed, 13 Jun 2018 09:50:24 +0000 Message-ID: <2601191342CEEE43887BDE71AB977258C0C3B509@irsmsx105.ger.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" , "De Lara Guarch, Pablo" , "stable@dpdk.org" To: "De Lara Guarch, Pablo" , "Doherty, Declan" , "Gujjar, Abhinandan S" 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: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Pablo de Lara > Sent: Wednesday, June 13, 2018 10:37 AM > To: Doherty, Declan ; Gujjar, Abhinandan S > Cc: dev@dpdk.org; De Lara Guarch, Pablo ;= stable@dpdk.org > Subject: [dpdk-dev] [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 structure is expected > to be aligned to 64 bits, allowing future additions with no > ABI breakage needed. >=20 > In 18.05, a new 2-byte field was added, so the reserved bytes > were reduced to 3. However, this field was added after the first 3 bytes > of the structure, causing 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 unintentionally 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 offset 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: Konstantin Ananyev > 2.17.0