get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/58382/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 58382,
    "url": "http://patchwork.dpdk.org/api/patches/58382/?format=api",
    "web_url": "http://patchwork.dpdk.org/project/dpdk/patch/20190902121734.926-3-akhil.goyal@nxp.com/",
    "project": {
        "id": 1,
        "url": "http://patchwork.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<20190902121734.926-3-akhil.goyal@nxp.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20190902121734.926-3-akhil.goyal@nxp.com",
    "date": "2019-09-02T12:17:16",
    "name": "[02/20] drivers/crypto: Support PDCP u-plane with integrity",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "bbb6f8ac73366b903fb44e234106ea3d8fc96e34",
    "submitter": {
        "id": 517,
        "url": "http://patchwork.dpdk.org/api/people/517/?format=api",
        "name": "Akhil Goyal",
        "email": "akhil.goyal@nxp.com"
    },
    "delegate": {
        "id": 6690,
        "url": "http://patchwork.dpdk.org/api/users/6690/?format=api",
        "username": "akhil",
        "first_name": "akhil",
        "last_name": "goyal",
        "email": "gakhil@marvell.com"
    },
    "mbox": "http://patchwork.dpdk.org/project/dpdk/patch/20190902121734.926-3-akhil.goyal@nxp.com/mbox/",
    "series": [
        {
            "id": 6199,
            "url": "http://patchwork.dpdk.org/api/series/6199/?format=api",
            "web_url": "http://patchwork.dpdk.org/project/dpdk/list/?series=6199",
            "date": "2019-09-02T12:17:14",
            "name": "crypto/dpaaX_sec: Support Wireless algos",
            "version": 1,
            "mbox": "http://patchwork.dpdk.org/series/6199/mbox/"
        }
    ],
    "comments": "http://patchwork.dpdk.org/api/patches/58382/comments/",
    "check": "fail",
    "checks": "http://patchwork.dpdk.org/api/patches/58382/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@dpdk.org",
        "Delivered-To": "patchwork@dpdk.org",
        "Received": [
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 1A9061DFE2;\n\tMon,  2 Sep 2019 14:32:10 +0200 (CEST)",
            "from inva021.nxp.com (inva021.nxp.com [92.121.34.21])\n\tby dpdk.org (Postfix) with ESMTP id CA3391C2ED\n\tfor <dev@dpdk.org>; Mon,  2 Sep 2019 14:32:01 +0200 (CEST)",
            "from inva021.nxp.com (localhost [127.0.0.1])\n\tby inva021.eu-rdc02.nxp.com (Postfix) with ESMTP id 69EB02006D5;\n\tMon,  2 Sep 2019 14:32:01 +0200 (CEST)",
            "from invc005.ap-rdc01.nxp.com (invc005.ap-rdc01.nxp.com\n\t[165.114.16.14])\n\tby inva021.eu-rdc02.nxp.com (Postfix) with ESMTP id 337C82006CB;\n\tMon,  2 Sep 2019 14:31:59 +0200 (CEST)",
            "from GDB1.ap.freescale.net (GDB1.ap.freescale.net [10.232.132.179])\n\tby invc005.ap-rdc01.nxp.com (Postfix) with ESMTP id 7C6EA4030B;\n\tMon,  2 Sep 2019 20:31:56 +0800 (SGT)"
        ],
        "From": "Akhil Goyal <akhil.goyal@nxp.com>",
        "To": "dev@dpdk.org",
        "Cc": "hemant.agrawal@nxp.com,\n\tvakul.garg@nxp.com",
        "Date": "Mon,  2 Sep 2019 17:47:16 +0530",
        "Message-Id": "<20190902121734.926-3-akhil.goyal@nxp.com>",
        "X-Mailer": "git-send-email 2.17.1",
        "In-Reply-To": "<20190902121734.926-1-akhil.goyal@nxp.com>",
        "References": "<20190902121734.926-1-akhil.goyal@nxp.com>",
        "X-Virus-Scanned": "ClamAV using ClamSMTP",
        "Subject": "[dpdk-dev] [PATCH 02/20] drivers/crypto: Support PDCP u-plane with\n\tintegrity",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n\t<mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "From: Vakul Garg <vakul.garg@nxp.com>\n\nPDCP u-plane may optionally support integrity as well.\nThis patch add support for supporting integrity along with\nconfidentiality.\n\nSigned-off-by: Vakul Garg <vakul.garg@nxp.com>\nAcked-by: Akhil Goyal <akhil.goyal@nxp.com>\n---\n drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c |  67 +++++------\n drivers/crypto/dpaa2_sec/hw/desc/pdcp.h     |  75 ++++++++++---\n drivers/crypto/dpaa_sec/dpaa_sec.c          | 116 +++++++++-----------\n 3 files changed, 144 insertions(+), 114 deletions(-)",
    "diff": "diff --git a/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c b/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c\nindex 05c29e62f..e2f248475 100644\n--- a/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c\n+++ b/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c\n@@ -2559,6 +2559,7 @@ dpaa2_sec_set_pdcp_session(struct rte_cryptodev *dev,\n \tstruct ctxt_priv *priv;\n \tstruct dpaa2_sec_dev_private *dev_priv = dev->data->dev_private;\n \tstruct alginfo authdata, cipherdata;\n+\tstruct alginfo *p_authdata = NULL;\n \tint bufsize = -1;\n \tstruct sec_flow_context *flc;\n #if RTE_BYTE_ORDER == RTE_BIG_ENDIAN\n@@ -2661,39 +2662,32 @@ dpaa2_sec_set_pdcp_session(struct rte_cryptodev *dev,\n \t\tgoto out;\n \t}\n \n-\t/* Auth is only applicable for control mode operation. */\n-\tif (pdcp_xform->domain == RTE_SECURITY_PDCP_MODE_CONTROL) {\n-\t\tif (pdcp_xform->sn_size != RTE_SECURITY_PDCP_SN_SIZE_5 &&\n-\t\t    pdcp_xform->sn_size != RTE_SECURITY_PDCP_SN_SIZE_12) {\n-\t\t\tDPAA2_SEC_ERR(\n-\t\t\t\t\"PDCP Seq Num size should be 5/12 bits for cmode\");\n-\t\t\tgoto out;\n-\t\t}\n-\t\tif (auth_xform) {\n-\t\t\tsession->auth_key.data = rte_zmalloc(NULL,\n-\t\t\t\t\t\t\tauth_xform->key.length,\n-\t\t\t\t\t\t\tRTE_CACHE_LINE_SIZE);\n-\t\t\tif (session->auth_key.data == NULL &&\n-\t\t\t\t\tauth_xform->key.length > 0) {\n-\t\t\t\tDPAA2_SEC_ERR(\"No Memory for auth key\");\n-\t\t\t\trte_free(session->cipher_key.data);\n-\t\t\t\trte_free(priv);\n-\t\t\t\treturn -ENOMEM;\n-\t\t\t}\n-\t\t\tsession->auth_key.length = auth_xform->key.length;\n-\t\t\tmemcpy(session->auth_key.data, auth_xform->key.data,\n-\t\t\t\t\tauth_xform->key.length);\n-\t\t\tsession->auth_alg = auth_xform->algo;\n-\t\t} else {\n-\t\t\tsession->auth_key.data = NULL;\n-\t\t\tsession->auth_key.length = 0;\n-\t\t\tsession->auth_alg = RTE_CRYPTO_AUTH_NULL;\n+\tif (auth_xform) {\n+\t\tsession->auth_key.data = rte_zmalloc(NULL,\n+\t\t\t\t\t\t     auth_xform->key.length,\n+\t\t\t\t\t\t     RTE_CACHE_LINE_SIZE);\n+\t\tif (!session->auth_key.data &&\n+\t\t    auth_xform->key.length > 0) {\n+\t\t\tDPAA2_SEC_ERR(\"No Memory for auth key\");\n+\t\t\trte_free(session->cipher_key.data);\n+\t\t\trte_free(priv);\n+\t\t\treturn -ENOMEM;\n \t\t}\n-\t\tauthdata.key = (size_t)session->auth_key.data;\n-\t\tauthdata.keylen = session->auth_key.length;\n-\t\tauthdata.key_enc_flags = 0;\n-\t\tauthdata.key_type = RTA_DATA_IMM;\n+\t\tsession->auth_key.length = auth_xform->key.length;\n+\t\tmemcpy(session->auth_key.data, auth_xform->key.data,\n+\t\t       auth_xform->key.length);\n+\t\tsession->auth_alg = auth_xform->algo;\n+\t} else {\n+\t\tsession->auth_key.data = NULL;\n+\t\tsession->auth_key.length = 0;\n+\t\tsession->auth_alg = 0;\n+\t}\n+\tauthdata.key = (size_t)session->auth_key.data;\n+\tauthdata.keylen = session->auth_key.length;\n+\tauthdata.key_enc_flags = 0;\n+\tauthdata.key_type = RTA_DATA_IMM;\n \n+\tif (session->auth_alg) {\n \t\tswitch (session->auth_alg) {\n \t\tcase RTE_CRYPTO_AUTH_SNOW3G_UIA2:\n \t\t\tauthdata.algtype = PDCP_AUTH_TYPE_SNOW;\n@@ -2713,6 +2707,13 @@ dpaa2_sec_set_pdcp_session(struct rte_cryptodev *dev,\n \t\t\tgoto out;\n \t\t}\n \n+\t\tp_authdata = &authdata;\n+\t} else if (pdcp_xform->domain == RTE_SECURITY_PDCP_MODE_CONTROL) {\n+\t\tDPAA2_SEC_ERR(\"Crypto: Integrity must for c-plane\");\n+\t\tgoto out;\n+\t}\n+\n+\tif (pdcp_xform->domain == RTE_SECURITY_PDCP_MODE_CONTROL) {\n \t\tif (session->dir == DIR_ENC)\n \t\t\tbufsize = cnstr_shdsc_pdcp_c_plane_encap(\n \t\t\t\t\tpriv->flc_desc[0].desc, 1, swap,\n@@ -2742,7 +2743,7 @@ dpaa2_sec_set_pdcp_session(struct rte_cryptodev *dev,\n \t\t\t\t\tpdcp_xform->bearer,\n \t\t\t\t\tpdcp_xform->pkt_dir,\n \t\t\t\t\tpdcp_xform->hfn_threshold,\n-\t\t\t\t\t&cipherdata, 0);\n+\t\t\t\t\t&cipherdata, p_authdata, 0);\n \t\telse if (session->dir == DIR_DEC)\n \t\t\tbufsize = cnstr_shdsc_pdcp_u_plane_decap(\n \t\t\t\t\tpriv->flc_desc[0].desc, 1, swap,\n@@ -2751,7 +2752,7 @@ dpaa2_sec_set_pdcp_session(struct rte_cryptodev *dev,\n \t\t\t\t\tpdcp_xform->bearer,\n \t\t\t\t\tpdcp_xform->pkt_dir,\n \t\t\t\t\tpdcp_xform->hfn_threshold,\n-\t\t\t\t\t&cipherdata, 0);\n+\t\t\t\t\t&cipherdata, p_authdata, 0);\n \t}\n \n \tif (bufsize < 0) {\ndiff --git a/drivers/crypto/dpaa2_sec/hw/desc/pdcp.h b/drivers/crypto/dpaa2_sec/hw/desc/pdcp.h\nindex 607c587e2..a636640c4 100644\n--- a/drivers/crypto/dpaa2_sec/hw/desc/pdcp.h\n+++ b/drivers/crypto/dpaa2_sec/hw/desc/pdcp.h\n@@ -1801,9 +1801,16 @@ static inline int\n pdcp_insert_uplane_15bit_op(struct program *p,\n \t\t\t    bool swap __maybe_unused,\n \t\t\t    struct alginfo *cipherdata,\n+\t\t\t    struct alginfo *authdata,\n \t\t\t    unsigned int dir)\n {\n \tint op;\n+\n+\t/* Insert auth key if requested */\n+\tif (authdata && authdata->algtype)\n+\t\tKEY(p, KEY2, authdata->key_enc_flags, authdata->key,\n+\t\t    authdata->keylen, INLINE_KEY(authdata));\n+\n \t/* Insert Cipher Key */\n \tKEY(p, KEY1, cipherdata->key_enc_flags, cipherdata->key,\n \t    cipherdata->keylen, INLINE_KEY(cipherdata));\n@@ -2478,6 +2485,7 @@ cnstr_shdsc_pdcp_u_plane_encap(uint32_t *descbuf,\n \t\t\t       unsigned short direction,\n \t\t\t       uint32_t hfn_threshold,\n \t\t\t       struct alginfo *cipherdata,\n+\t\t\t       struct alginfo *authdata,\n \t\t\t       unsigned char era_2_sw_hfn_ovrd)\n {\n \tstruct program prg;\n@@ -2490,6 +2498,11 @@ cnstr_shdsc_pdcp_u_plane_encap(uint32_t *descbuf,\n \t\treturn -EINVAL;\n \t}\n \n+\tif (authdata && !authdata->algtype && rta_sec_era < RTA_SEC_ERA_8) {\n+\t\tpr_err(\"Cannot use u-plane auth with era < 8\");\n+\t\treturn -EINVAL;\n+\t}\n+\n \tPROGRAM_CNTXT_INIT(p, descbuf, 0);\n \tif (swap)\n \t\tPROGRAM_SET_BSWAP(p);\n@@ -2509,6 +2522,13 @@ cnstr_shdsc_pdcp_u_plane_encap(uint32_t *descbuf,\n \tif (err)\n \t\treturn err;\n \n+\t/* Insert auth key if requested */\n+\tif (authdata && authdata->algtype) {\n+\t\tKEY(p, KEY2, authdata->key_enc_flags,\n+\t\t    (uint64_t)authdata->key, authdata->keylen,\n+\t\t    INLINE_KEY(authdata));\n+\t}\n+\n \tswitch (sn_size) {\n \tcase PDCP_SN_SIZE_7:\n \tcase PDCP_SN_SIZE_12:\n@@ -2518,20 +2538,24 @@ cnstr_shdsc_pdcp_u_plane_encap(uint32_t *descbuf,\n \t\t\t\tpr_err(\"Invalid era for selected algorithm\\n\");\n \t\t\t\treturn -ENOTSUP;\n \t\t\t}\n+\t\t\t/* fallthrough */\n \t\tcase PDCP_CIPHER_TYPE_AES:\n \t\tcase PDCP_CIPHER_TYPE_SNOW:\n+\t\tcase PDCP_CIPHER_TYPE_NULL:\n \t\t\t/* Insert Cipher Key */\n \t\t\tKEY(p, KEY1, cipherdata->key_enc_flags,\n \t\t\t    (uint64_t)cipherdata->key, cipherdata->keylen,\n \t\t\t    INLINE_KEY(cipherdata));\n-\t\t\tPROTOCOL(p, OP_TYPE_ENCAP_PROTOCOL,\n-\t\t\t\t OP_PCLID_LTE_PDCP_USER,\n-\t\t\t\t (uint16_t)cipherdata->algtype);\n-\t\t\tbreak;\n-\t\tcase PDCP_CIPHER_TYPE_NULL:\n-\t\t\tinsert_copy_frame_op(p,\n-\t\t\t\t\t     cipherdata,\n-\t\t\t\t\t     OP_TYPE_ENCAP_PROTOCOL);\n+\n+\t\t\tif (authdata)\n+\t\t\t\tPROTOCOL(p, OP_TYPE_ENCAP_PROTOCOL,\n+\t\t\t\t\t OP_PCLID_LTE_PDCP_USER_RN,\n+\t\t\t\t\t ((uint16_t)cipherdata->algtype << 8) |\n+\t\t\t\t\t (uint16_t)authdata->algtype);\n+\t\t\telse\n+\t\t\t\tPROTOCOL(p, OP_TYPE_ENCAP_PROTOCOL,\n+\t\t\t\t\t OP_PCLID_LTE_PDCP_USER,\n+\t\t\t\t\t (uint16_t)cipherdata->algtype);\n \t\t\tbreak;\n \t\tdefault:\n \t\t\tpr_err(\"%s: Invalid encrypt algorithm selected: %d\\n\",\n@@ -2551,7 +2575,7 @@ cnstr_shdsc_pdcp_u_plane_encap(uint32_t *descbuf,\n \n \t\tdefault:\n \t\t\terr = pdcp_insert_uplane_15bit_op(p, swap, cipherdata,\n-\t\t\t\tOP_TYPE_ENCAP_PROTOCOL);\n+\t\t\t\t\tauthdata, OP_TYPE_ENCAP_PROTOCOL);\n \t\t\tif (err)\n \t\t\t\treturn err;\n \t\t\tbreak;\n@@ -2605,6 +2629,7 @@ cnstr_shdsc_pdcp_u_plane_decap(uint32_t *descbuf,\n \t\t\t       unsigned short direction,\n \t\t\t       uint32_t hfn_threshold,\n \t\t\t       struct alginfo *cipherdata,\n+\t\t\t       struct alginfo *authdata,\n \t\t\t       unsigned char era_2_sw_hfn_ovrd)\n {\n \tstruct program prg;\n@@ -2617,6 +2642,11 @@ cnstr_shdsc_pdcp_u_plane_decap(uint32_t *descbuf,\n \t\treturn -EINVAL;\n \t}\n \n+\tif (authdata && !authdata->algtype && rta_sec_era < RTA_SEC_ERA_8) {\n+\t\tpr_err(\"Cannot use u-plane auth with era < 8\");\n+\t\treturn -EINVAL;\n+\t}\n+\n \tPROGRAM_CNTXT_INIT(p, descbuf, 0);\n \tif (swap)\n \t\tPROGRAM_SET_BSWAP(p);\n@@ -2636,6 +2666,12 @@ cnstr_shdsc_pdcp_u_plane_decap(uint32_t *descbuf,\n \tif (err)\n \t\treturn err;\n \n+\t/* Insert auth key if requested */\n+\tif (authdata && authdata->algtype)\n+\t\tKEY(p, KEY2, authdata->key_enc_flags,\n+\t\t    (uint64_t)authdata->key, authdata->keylen,\n+\t\t    INLINE_KEY(authdata));\n+\n \tswitch (sn_size) {\n \tcase PDCP_SN_SIZE_7:\n \tcase PDCP_SN_SIZE_12:\n@@ -2645,20 +2681,23 @@ cnstr_shdsc_pdcp_u_plane_decap(uint32_t *descbuf,\n \t\t\t\tpr_err(\"Invalid era for selected algorithm\\n\");\n \t\t\t\treturn -ENOTSUP;\n \t\t\t}\n+\t\t\t/* fallthrough */\n \t\tcase PDCP_CIPHER_TYPE_AES:\n \t\tcase PDCP_CIPHER_TYPE_SNOW:\n+\t\tcase PDCP_CIPHER_TYPE_NULL:\n \t\t\t/* Insert Cipher Key */\n \t\t\tKEY(p, KEY1, cipherdata->key_enc_flags,\n \t\t\t    cipherdata->key, cipherdata->keylen,\n \t\t\t    INLINE_KEY(cipherdata));\n-\t\t\tPROTOCOL(p, OP_TYPE_DECAP_PROTOCOL,\n-\t\t\t\t OP_PCLID_LTE_PDCP_USER,\n-\t\t\t\t (uint16_t)cipherdata->algtype);\n-\t\t\tbreak;\n-\t\tcase PDCP_CIPHER_TYPE_NULL:\n-\t\t\tinsert_copy_frame_op(p,\n-\t\t\t\t\t     cipherdata,\n-\t\t\t\t\t     OP_TYPE_DECAP_PROTOCOL);\n+\t\t\tif (authdata)\n+\t\t\t\tPROTOCOL(p, OP_TYPE_DECAP_PROTOCOL,\n+\t\t\t\t\t OP_PCLID_LTE_PDCP_USER_RN,\n+\t\t\t\t\t ((uint16_t)cipherdata->algtype << 8) |\n+\t\t\t\t\t (uint16_t)authdata->algtype);\n+\t\t\telse\n+\t\t\t\tPROTOCOL(p, OP_TYPE_DECAP_PROTOCOL,\n+\t\t\t\t\t OP_PCLID_LTE_PDCP_USER,\n+\t\t\t\t\t (uint16_t)cipherdata->algtype);\n \t\t\tbreak;\n \t\tdefault:\n \t\t\tpr_err(\"%s: Invalid encrypt algorithm selected: %d\\n\",\n@@ -2678,7 +2717,7 @@ cnstr_shdsc_pdcp_u_plane_decap(uint32_t *descbuf,\n \n \t\tdefault:\n \t\t\terr = pdcp_insert_uplane_15bit_op(p, swap, cipherdata,\n-\t\t\t\tOP_TYPE_DECAP_PROTOCOL);\n+\t\t\t\tauthdata, OP_TYPE_DECAP_PROTOCOL);\n \t\t\tif (err)\n \t\t\t\treturn err;\n \t\t\tbreak;\ndiff --git a/drivers/crypto/dpaa_sec/dpaa_sec.c b/drivers/crypto/dpaa_sec/dpaa_sec.c\nindex 49e0000b1..c3a72c454 100644\n--- a/drivers/crypto/dpaa_sec/dpaa_sec.c\n+++ b/drivers/crypto/dpaa_sec/dpaa_sec.c\n@@ -383,6 +383,7 @@ dpaa_sec_prep_pdcp_cdb(dpaa_sec_session *ses)\n {\n \tstruct alginfo authdata = {0}, cipherdata = {0};\n \tstruct sec_cdb *cdb = &ses->cdb;\n+\tstruct alginfo *p_authdata = NULL;\n \tint32_t shared_desc_len = 0;\n \tint err;\n #if RTE_BYTE_ORDER == RTE_BIG_ENDIAN\n@@ -415,7 +416,11 @@ dpaa_sec_prep_pdcp_cdb(dpaa_sec_session *ses)\n \tcipherdata.key_enc_flags = 0;\n \tcipherdata.key_type = RTA_DATA_IMM;\n \n-\tif (ses->pdcp.domain == RTE_SECURITY_PDCP_MODE_CONTROL) {\n+\tcdb->sh_desc[0] = cipherdata.keylen;\n+\tcdb->sh_desc[1] = 0;\n+\tcdb->sh_desc[2] = 0;\n+\n+\tif (ses->auth_alg) {\n \t\tswitch (ses->auth_alg) {\n \t\tcase RTE_CRYPTO_AUTH_SNOW3G_UIA2:\n \t\t\tauthdata.algtype = PDCP_AUTH_TYPE_SNOW;\n@@ -440,32 +445,36 @@ dpaa_sec_prep_pdcp_cdb(dpaa_sec_session *ses)\n \t\tauthdata.key_enc_flags = 0;\n \t\tauthdata.key_type = RTA_DATA_IMM;\n \n-\t\tcdb->sh_desc[0] = cipherdata.keylen;\n+\t\tp_authdata = &authdata;\n+\n \t\tcdb->sh_desc[1] = authdata.keylen;\n-\t\terr = rta_inline_query(IPSEC_AUTH_VAR_AES_DEC_BASE_DESC_LEN,\n-\t\t\t\t       MIN_JOB_DESC_SIZE,\n-\t\t\t\t       (unsigned int *)cdb->sh_desc,\n-\t\t\t\t       &cdb->sh_desc[2], 2);\n+\t}\n \n-\t\tif (err < 0) {\n-\t\t\tDPAA_SEC_ERR(\"Crypto: Incorrect key lengths\");\n-\t\t\treturn err;\n-\t\t}\n-\t\tif (!(cdb->sh_desc[2] & 1) && cipherdata.keylen) {\n-\t\t\tcipherdata.key = (size_t)dpaa_mem_vtop(\n-\t\t\t\t\t\t(void *)(size_t)cipherdata.key);\n-\t\t\tcipherdata.key_type = RTA_DATA_PTR;\n-\t\t}\n-\t\tif (!(cdb->sh_desc[2] & (1<<1)) &&  authdata.keylen) {\n-\t\t\tauthdata.key = (size_t)dpaa_mem_vtop(\n-\t\t\t\t\t\t(void *)(size_t)authdata.key);\n-\t\t\tauthdata.key_type = RTA_DATA_PTR;\n-\t\t}\n+\terr = rta_inline_query(IPSEC_AUTH_VAR_AES_DEC_BASE_DESC_LEN,\n+\t\t\t       MIN_JOB_DESC_SIZE,\n+\t\t\t       (unsigned int *)cdb->sh_desc,\n+\t\t\t       &cdb->sh_desc[2], 2);\n+\tif (err < 0) {\n+\t\tDPAA_SEC_ERR(\"Crypto: Incorrect key lengths\");\n+\t\treturn err;\n+\t}\n \n-\t\tcdb->sh_desc[0] = 0;\n-\t\tcdb->sh_desc[1] = 0;\n-\t\tcdb->sh_desc[2] = 0;\n+\tif (!(cdb->sh_desc[2] & 1) && cipherdata.keylen) {\n+\t\tcipherdata.key =\n+\t\t\t(size_t)dpaa_mem_vtop((void *)(size_t)cipherdata.key);\n+\t\tcipherdata.key_type = RTA_DATA_PTR;\n+\t}\n+\tif (!(cdb->sh_desc[2] & (1 << 1)) &&  authdata.keylen) {\n+\t\tauthdata.key =\n+\t\t\t(size_t)dpaa_mem_vtop((void *)(size_t)authdata.key);\n+\t\tauthdata.key_type = RTA_DATA_PTR;\n+\t}\n \n+\tcdb->sh_desc[0] = 0;\n+\tcdb->sh_desc[1] = 0;\n+\tcdb->sh_desc[2] = 0;\n+\n+\tif (ses->pdcp.domain == RTE_SECURITY_PDCP_MODE_CONTROL) {\n \t\tif (ses->dir == DIR_ENC)\n \t\t\tshared_desc_len = cnstr_shdsc_pdcp_c_plane_encap(\n \t\t\t\t\tcdb->sh_desc, 1, swap,\n@@ -487,25 +496,6 @@ dpaa_sec_prep_pdcp_cdb(dpaa_sec_session *ses)\n \t\t\t\t\t&cipherdata, &authdata,\n \t\t\t\t\t0);\n \t} else {\n-\t\tcdb->sh_desc[0] = cipherdata.keylen;\n-\t\terr = rta_inline_query(IPSEC_AUTH_VAR_AES_DEC_BASE_DESC_LEN,\n-\t\t\t\t       MIN_JOB_DESC_SIZE,\n-\t\t\t\t       (unsigned int *)cdb->sh_desc,\n-\t\t\t\t       &cdb->sh_desc[2], 1);\n-\n-\t\tif (err < 0) {\n-\t\t\tDPAA_SEC_ERR(\"Crypto: Incorrect key lengths\");\n-\t\t\treturn err;\n-\t\t}\n-\t\tif (!(cdb->sh_desc[2] & 1) && cipherdata.keylen) {\n-\t\t\tcipherdata.key = (size_t)dpaa_mem_vtop(\n-\t\t\t\t\t\t(void *)(size_t)cipherdata.key);\n-\t\t\tcipherdata.key_type = RTA_DATA_PTR;\n-\t\t}\n-\t\tcdb->sh_desc[0] = 0;\n-\t\tcdb->sh_desc[1] = 0;\n-\t\tcdb->sh_desc[2] = 0;\n-\n \t\tif (ses->dir == DIR_ENC)\n \t\t\tshared_desc_len = cnstr_shdsc_pdcp_u_plane_encap(\n \t\t\t\t\tcdb->sh_desc, 1, swap,\n@@ -514,7 +504,7 @@ dpaa_sec_prep_pdcp_cdb(dpaa_sec_session *ses)\n \t\t\t\t\tses->pdcp.bearer,\n \t\t\t\t\tses->pdcp.pkt_dir,\n \t\t\t\t\tses->pdcp.hfn_threshold,\n-\t\t\t\t\t&cipherdata, 0);\n+\t\t\t\t\t&cipherdata, p_authdata, 0);\n \t\telse if (ses->dir == DIR_DEC)\n \t\t\tshared_desc_len = cnstr_shdsc_pdcp_u_plane_decap(\n \t\t\t\t\tcdb->sh_desc, 1, swap,\n@@ -523,7 +513,7 @@ dpaa_sec_prep_pdcp_cdb(dpaa_sec_session *ses)\n \t\t\t\t\tses->pdcp.bearer,\n \t\t\t\t\tses->pdcp.pkt_dir,\n \t\t\t\t\tses->pdcp.hfn_threshold,\n-\t\t\t\t\t&cipherdata, 0);\n+\t\t\t\t\t&cipherdata, p_authdata, 0);\n \t}\n \n \treturn shared_desc_len;\n@@ -2353,7 +2343,6 @@ dpaa_sec_set_pdcp_session(struct rte_cryptodev *dev,\n \t\tsession->dir = DIR_ENC;\n \t}\n \n-\t/* Auth is only applicable for control mode operation. */\n \tif (pdcp_xform->domain == RTE_SECURITY_PDCP_MODE_CONTROL) {\n \t\tif (pdcp_xform->sn_size != RTE_SECURITY_PDCP_SN_SIZE_5 &&\n \t\t    pdcp_xform->sn_size != RTE_SECURITY_PDCP_SN_SIZE_12) {\n@@ -2361,25 +2350,26 @@ dpaa_sec_set_pdcp_session(struct rte_cryptodev *dev,\n \t\t\t\t\"PDCP Seq Num size should be 5/12 bits for cmode\");\n \t\t\tgoto out;\n \t\t}\n-\t\tif (auth_xform) {\n-\t\t\tsession->auth_key.data = rte_zmalloc(NULL,\n-\t\t\t\t\t\t\tauth_xform->key.length,\n-\t\t\t\t\t\t\tRTE_CACHE_LINE_SIZE);\n-\t\t\tif (session->auth_key.data == NULL &&\n-\t\t\t\t\tauth_xform->key.length > 0) {\n-\t\t\t\tDPAA_SEC_ERR(\"No Memory for auth key\");\n-\t\t\t\trte_free(session->cipher_key.data);\n-\t\t\t\treturn -ENOMEM;\n-\t\t\t}\n-\t\t\tsession->auth_key.length = auth_xform->key.length;\n-\t\t\tmemcpy(session->auth_key.data, auth_xform->key.data,\n-\t\t\t\t\tauth_xform->key.length);\n-\t\t\tsession->auth_alg = auth_xform->algo;\n-\t\t} else {\n-\t\t\tsession->auth_key.data = NULL;\n-\t\t\tsession->auth_key.length = 0;\n-\t\t\tsession->auth_alg = RTE_CRYPTO_AUTH_NULL;\n+\t}\n+\n+\tif (auth_xform) {\n+\t\tsession->auth_key.data = rte_zmalloc(NULL,\n+\t\t\t\t\t\t     auth_xform->key.length,\n+\t\t\t\t\t\t     RTE_CACHE_LINE_SIZE);\n+\t\tif (!session->auth_key.data &&\n+\t\t    auth_xform->key.length > 0) {\n+\t\t\tDPAA_SEC_ERR(\"No Memory for auth key\");\n+\t\t\trte_free(session->cipher_key.data);\n+\t\t\treturn -ENOMEM;\n \t\t}\n+\t\tsession->auth_key.length = auth_xform->key.length;\n+\t\tmemcpy(session->auth_key.data, auth_xform->key.data,\n+\t\t       auth_xform->key.length);\n+\t\tsession->auth_alg = auth_xform->algo;\n+\t} else {\n+\t\tsession->auth_key.data = NULL;\n+\t\tsession->auth_key.length = 0;\n+\t\tsession->auth_alg = 0;\n \t}\n \tsession->pdcp.domain = pdcp_xform->domain;\n \tsession->pdcp.bearer = pdcp_xform->bearer;\n",
    "prefixes": [
        "02/20"
    ]
}