From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from youngberry.canonical.com (youngberry.canonical.com [91.189.89.112]) by dpdk.org (Postfix) with ESMTP id 138745B2C for ; Mon, 30 Jul 2018 18:15:54 +0200 (CEST) Received: from 1.general.paelzer.uk.vpn ([10.172.196.172] helo=lap.fritz.box) by youngberry.canonical.com with esmtpsa (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.76) (envelope-from ) id 1fkAp3-00009D-MR; Mon, 30 Jul 2018 16:15:01 +0000 From: Christian Ehrhardt To: Pablo de Lara Cc: Konstantin Ananyev , Abhinandan Gujjar , dpdk stable Date: Mon, 30 Jul 2018 18:11:19 +0200 Message-Id: <20180730161342.16566-34-christian.ehrhardt@canonical.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180730161342.16566-1-christian.ehrhardt@canonical.com> References: <20180730161342.16566-1-christian.ehrhardt@canonical.com> Subject: [dpdk-stable] patch 'cryptodev: fix ABI breakage' has been queued to stable release 18.05.1 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 30 Jul 2018 16:15:54 -0000 Hi, FYI, your patch has been queued to stable release 18.05.1 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 08/01/18. So please shout if anyone has objections. Thanks. Christian Ehrhardt --- >>From 58a40173c60e142288bb3ab2447b29254cc2a733 Mon Sep 17 00:00:00 2001 From: Pablo de Lara Date: Wed, 13 Jun 2018 10:36:48 +0100 Subject: [PATCH] cryptodev: fix ABI breakage [ upstream commit ce5e6bf69eb32d5ea1d95e2a623f8f9d284a806d ] 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. 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. 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. Fixes: 54c836846603 ("cryptodev: set private data for session-less mode") Reported-by: Konstantin Ananyev Signed-off-by: Pablo de Lara Acked-by: Konstantin Ananyev Acked-by: Abhinandan Gujjar --- lib/librte_cryptodev/rte_crypto.h | 51 +++++++++++++++++++------------ 1 file changed, 31 insertions(+), 20 deletions(-) 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 */ -- 2.17.1