crypto/qat: check multi-segment buffers for DOCSIS
authorDavid Coyle <david.coyle@intel.com>
Thu, 16 Jul 2020 15:33:31 +0000 (16:33 +0100)
committerAkhil Goyal <akhil.goyal@nxp.com>
Sat, 18 Jul 2020 21:27:31 +0000 (23:27 +0200)
Multi-segment mbufs are not supported for DOCSIS security protocol.
This patch adds an explicit check for this and returns an op error if
this case is found. This limitation is also added to the QAT cryptodev
documentation.

Fixes: 6f0ef237404b ("crypto/qat: support DOCSIS protocol")

Signed-off-by: David Coyle <david.coyle@intel.com>
Acked-by: Fiona Trahe <fiona.trahe@intel.com>
doc/guides/cryptodevs/qat.rst
drivers/crypto/qat/qat_sym.c

index 931a18f..b9f8c37 100644 (file)
@@ -134,6 +134,8 @@ Limitations
   protocol.
 * ``RTE_CRYPTO_CIPHER_DES_DOCSISBPI`` is not supported for combined Crypto-CRC
   DOCSIS security protocol.
+* Multi-segment buffers are not supported for combined Crypto-CRC DOCSIS
+  security protocol.
 
 Extra notes on KASUMI F9
 ~~~~~~~~~~~~~~~~~~~~~~~~
index 6d568ab..632313a 100644 (file)
@@ -284,13 +284,15 @@ qat_sym_build_request(void *in_op, uint8_t *out_msg,
                        /* DOCSIS processing */
 #ifdef RTE_LIBRTE_SECURITY
                        if (is_docsis_sec) {
-                               /* Check for OOP */
-                               if (unlikely((op->sym->m_dst != NULL) &&
+                               /* Check for OOP or multi-segment buffers */
+                               if (unlikely(((op->sym->m_dst != NULL) &&
                                                (op->sym->m_dst !=
-                                               op->sym->m_src))) {
+                                               op->sym->m_src)) ||
+                                               op->sym->m_src->nb_segs > 1)) {
                                        QAT_DP_LOG(ERR,
-                                               "OOP not supported for DOCSIS "
-                                               "security");
+                                               "OOP and/or multi-segment "
+                                               "buffers are not supported for "
+                                               "DOCSIS security");
                                        op->status =
                                        RTE_CRYPTO_OP_STATUS_INVALID_ARGS;
                                        return -EINVAL;