get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 69789,
    "url": "http://patches.dpdk.org/api/patches/69789/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20200505214105.19465-1-l.wojciechow@partner.samsung.com/",
    "project": {
        "id": 1,
        "url": "http://patches.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": "<20200505214105.19465-1-l.wojciechow@partner.samsung.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20200505214105.19465-1-l.wojciechow@partner.samsung.com",
    "date": "2020-05-05T21:41:04",
    "name": "[1/2] crypto/dpaa_sec: improve memory freeing",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "356f1cb1a972fbc1b053890e6c902b6a15ebb3d8",
    "submitter": {
        "id": 1628,
        "url": "http://patches.dpdk.org/api/people/1628/?format=api",
        "name": "Lukasz Wojciechowski",
        "email": "l.wojciechow@partner.samsung.com"
    },
    "delegate": {
        "id": 6690,
        "url": "http://patches.dpdk.org/api/users/6690/?format=api",
        "username": "akhil",
        "first_name": "akhil",
        "last_name": "goyal",
        "email": "gakhil@marvell.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20200505214105.19465-1-l.wojciechow@partner.samsung.com/mbox/",
    "series": [
        {
            "id": 9846,
            "url": "http://patches.dpdk.org/api/series/9846/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=9846",
            "date": "2020-05-05T21:41:04",
            "name": "[1/2] crypto/dpaa_sec: improve memory freeing",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/9846/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/69789/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/69789/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 61C39A0352;\n\tTue,  5 May 2020 23:41:33 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 163EB1D6E8;\n\tTue,  5 May 2020 23:41:33 +0200 (CEST)",
            "from mailout2.w1.samsung.com (mailout2.w1.samsung.com\n [210.118.77.12]) by dpdk.org (Postfix) with ESMTP id EBE2A1D6E5\n for <dev@dpdk.org>; Tue,  5 May 2020 23:41:31 +0200 (CEST)",
            "from eucas1p2.samsung.com (unknown [182.198.249.207])\n by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id\n 20200505214130euoutp021788894c26f4eaa7ffaf8ba2b7c38d7f~MP8abdy2Z1709617096euoutp02j\n for <dev@dpdk.org>; Tue,  5 May 2020 21:41:30 +0000 (GMT)",
            "from eusmges2new.samsung.com (unknown [203.254.199.244]) by\n eucas1p1.samsung.com (KnoxPortal) with ESMTP id\n 20200505214129eucas1p1dacbc661753c3bc74affd1e302f595d7~MP8ZgTPA50905209052eucas1p13;\n Tue,  5 May 2020 21:41:29 +0000 (GMT)",
            "from eucas1p1.samsung.com ( [182.198.249.206]) by\n eusmges2new.samsung.com (EUCPMTA) with SMTP id A9.15.60679.98DD1BE5; Tue,  5\n May 2020 22:41:29 +0100 (BST)",
            "from eusmtrp2.samsung.com (unknown [182.198.249.139]) by\n eucas1p2.samsung.com (KnoxPortal) with ESMTPA id\n 20200505214128eucas1p26202807ca7da9e16c1628fd63cb2dfeb~MP8Yo_egi1857718577eucas1p2X;\n Tue,  5 May 2020 21:41:28 +0000 (GMT)",
            "from eusmgms1.samsung.com (unknown [182.198.249.179]) by\n eusmtrp2.samsung.com (KnoxPortal) with ESMTP id\n 20200505214128eusmtrp2bf6a1de390113a1f109a3d8ac4976aa2~MP8YodJrd0253702537eusmtrp2K;\n Tue,  5 May 2020 21:41:28 +0000 (GMT)",
            "from eusmtip1.samsung.com ( [203.254.199.221]) by\n eusmgms1.samsung.com (EUCPMTA) with SMTP id 75.E2.08375.88DD1BE5; Tue,  5\n May 2020 22:41:28 +0100 (BST)",
            "from localhost.localdomain (unknown [106.210.88.70]) by\n eusmtip1.samsung.com (KnoxPortal) with ESMTPA id\n 20200505214128eusmtip1502a865d8997b128d68b4815dbe459e8~MP8YJxmsR1722617226eusmtip1J;\n Tue,  5 May 2020 21:41:28 +0000 (GMT)"
        ],
        "DKIM-Filter": "OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com\n 20200505214130euoutp021788894c26f4eaa7ffaf8ba2b7c38d7f~MP8abdy2Z1709617096euoutp02j",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com;\n s=mail20170921; t=1588714890;\n bh=ccRlXkgwTjGLqkKYmCSIWwv+M66GLBCGnPbuZvx6MY0=;\n h=From:To:Cc:Subject:Date:References:From;\n b=PcgUR52Jiv6uT2wrklvsBw3oWKuMGaWAmXCRjniZJgIRzAhf1b0fY2S2OJLToVT6G\n oKmZmZdU6iaHhKVoeSAnxdLmtHpGfDBpsdaMiMIYjw8xBnKWjhFzXqJSactGU3Ao7F\n XIP/pzdh6QRQFcTzmtKSw7MYYdfiu5E7SoeKaXJ8=",
        "X-AuditID": "cbfec7f4-0cbff7000001ed07-7b-5eb1dd8927c2",
        "From": "Lukasz Wojciechowski <l.wojciechow@partner.samsung.com>",
        "To": "Akhil Goyal <akhil.goyal@nxp.com>, Hemant Agrawal <hemant.agrawal@nxp.com>",
        "Cc": "dev@dpdk.org, l.wojciechow@partner.samsung.com",
        "Date": "Tue,  5 May 2020 23:41:04 +0200",
        "Message-Id": "<20200505214105.19465-1-l.wojciechow@partner.samsung.com>",
        "X-Mailer": "git-send-email 2.17.1",
        "X-Brightmail-Tracker": [
            "\n H4sIAAAAAAAAA+NgFrrCIsWRmVeSWpSXmKPExsWy7djPc7qddzfGGTRM1LdYf2Yeo8W7T9uZ\n LFY+3shm8axnHaMDi8evBUtZPTa+28HkcfDdHqYA5igum5TUnMyy1CJ9uwSujEeX0gqaDSo+\n nVnG1sC4Xa2LkZNDQsBE4vzs2WxdjFwcQgIrGCXur7gL5XxhlOg8/hrK+cwocfH5F0aYlsWX\n FrOB2EICyxklLk8ugSua9WYDWBGbgK3EkZlfWUFsEYEAietde8AamAWMJF52T2QGsYUFbCT2\n nGkCsjk4WARUJda/zQQxeQVcJTY/lIdYJS+xesMBZpDxEgIb2CTW3f3PBJFwkWhZOJUNwhaW\n eHV8CzuELSPxf+d8JoiGbYwSV3//ZIRw9jNKXO9dAVVlLXH43282kG3MApoS63fpQ4QdJS5f\n ecIOEpYQ4JO48VYQ4mQ+iUnbpjNDhHklOtqEIKr1JJ72TGWEWftn7RMWCNtD4vLCL9DgiZVY\n Oq+ZbQKj3CyEXQsYGVcxiqeWFuempxYb5aWW6xUn5haX5qXrJefnbmIExvXpf8e/7GDc9Sfp\n EKMAB6MSD6+B+8Y4IdbEsuLK3EOMEhzMSiK8y35siBPiTUmsrEotyo8vKs1JLT7EKM3BoiTO\n a7zoZayQQHpiSWp2ampBahFMlomDU6qBMS+I/R3f/+clfEVnP+ssfXmgrkA87ttmndCGlLqV\n Sy/yVFVvyv964fqS892T/5VuWmpnpOjm89H+qYa126M7IgmlcW/DZSYa3813bBH+ldxhUneI\n 78HCTzftWhsjuB6YBT31T/OeFH98sd8ml2499QPLbujFuhcVH3j24N8WNoWt3Gb2M6z8lViK\n MxINtZiLihMBVMYXF+cCAAA=",
            "\n H4sIAAAAAAAAA+NgFlrJLMWRmVeSWpSXmKPExsVy+t/xu7oddzfGGdxbZ2yx/sw8Rot3n7Yz\n Wax8vJHN4lnPOkYHFo9fC5ayemx8t4PJ4+C7PUwBzFF6NkX5pSWpChn5xSW2StGGFkZ6hpYW\n ekYmlnqGxuaxVkamSvp2NimpOZllqUX6dgl6GY8upRU0G1R8OrOMrYFxu1oXIyeHhICJxOJL\n i9m6GLk4hASWMko8f/2fqYuRAyghI/HhkgBEjbDEn2tdUDUfGSV+7z/GDpJgE7CVODLzKyuI\n LSIQIPF90QU2EJsZaOjteU1gtrCAjcSeM03MIDNZBFQl1r/NBDF5BVwlNj+UhxgvL7F6wwHm\n CYw8CxgZVjGKpJYW56bnFhvqFSfmFpfmpesl5+duYgQG07ZjPzfvYLy0MfgQowAHoxIPr6H7\n xjgh1sSy4srcQ4wSHMxKIrzLfmyIE+JNSaysSi3Kjy8qzUktPsRoCrR6IrOUaHI+MNDzSuIN\n TQ3NLSwNzY3Njc0slMR5OwQOxggJpCeWpGanphakFsH0MXFwSjUwBq9e8s91u7iB4cwg6Xna\n LZm9HspX54ez8N/zP9EdkPfhhFi2gDdH0y3h5HlnfY92xKhwVplnyGXezZN6IJwmJiG2pN7R\n I581eOPFWaLB8z8omWxaWnhqWd96sTURcqd3P/hm9Utkv1Dx45bmnpAl0zt+c32YyNbGt7p2\n z92MV7JrNl5lj+VTYinOSDTUYi4qTgQA8X/vBTwCAAA="
        ],
        "X-CMS-MailID": "20200505214128eucas1p26202807ca7da9e16c1628fd63cb2dfeb",
        "X-Msg-Generator": "CA",
        "Content-Type": "text/plain; charset=\"utf-8\"",
        "X-RootMTR": "20200505214128eucas1p26202807ca7da9e16c1628fd63cb2dfeb",
        "X-EPHeader": "CA",
        "CMS-TYPE": "201P",
        "X-CMS-RootMailID": "20200505214128eucas1p26202807ca7da9e16c1628fd63cb2dfeb",
        "References": "\n <CGME20200505214128eucas1p26202807ca7da9e16c1628fd63cb2dfeb@eucas1p2.samsung.com>",
        "Subject": "[dpdk-dev] [PATCH 1/2] crypto/dpaa_sec: improve memory freeing",
        "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 <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 <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "This patch fixes management of memory for authentication\nand encryption keys.\nThere were two issues with former state of implementation:\n\n1) Invalid access to dpaa_sec_session union members\n    The dpaa_sec_session structure includes an anonymous union:\n    union {\n        struct {...} aead_key;\n        struct {\n            struct {...} cipher_key;\n            struct {...} auth_key;\n        };\n    };\n    Depending on the used algorithm a rte_zmalloc() function\n    allocated memory that was kept in aead_key, cipher_key\n    or auth_key. However every time the memory was released,\n    rte_free() was called only on cipher and auth keys, even\n    if pointer to allocated memory was stored in aead_key.\n\n    The C language specification defines such behavior as undefined.\n    As the cipher_key and aead_key are similar, have same sizes and\n    alignment, it has worked, but it's directly against C specification.\n\n    This patch fixes this, providing a free_session_data() function\n    to free the keys data. It verifies which algorithm was used\n    (aead or auth+cipher) and frees proper part of the union.\n\n2) Some keys might have been freed multiple times\n    In functions like: dpaa_sec_cipher_init(), dpaa_sec_auth_init(),\n    dpaa_sec_chain_init(), dpaa_sec_aead_init() keys data were freed\n    before returning due to some error conditions. However the pointers\n    were not zeroed causing another calls to ret_free from higher\n    layers of code. This causes an error log about invalid memory address\n    to be printed.\n\n    This patch fixes it by making only one layer responsible for freeing\n    memory:\n    * dpaa_sec_set_session_parameters() for allocations made in:\n        - dpaa_sec_cipher_init()\n        - dpaa_sec_auth_init()\n        - dpaa_sec_chain_init()\n        - dpaa_sec_aead_init()\n    * dpaa_sec_set_ipsec_session() for allocations made in:\n        - dpaa_sec_ipsec_aead_init()\n        - dpaa_sec_ipsec_proto_init()\n    * dpaa_sec_set_pdcp_session() for allocations made in:\n        - dpaa_sec_set_pdcp_session() /*only one layer in case of pdcp*/\n\nSigned-off-by: Lukasz Wojciechowski <l.wojciechow@partner.samsung.com>\n---\n drivers/crypto/dpaa_sec/dpaa_sec.c | 45 ++++++++++++++++--------------\n 1 file changed, 24 insertions(+), 21 deletions(-)",
    "diff": "diff --git a/drivers/crypto/dpaa_sec/dpaa_sec.c b/drivers/crypto/dpaa_sec/dpaa_sec.c\nindex a11b17bda..021a5639d 100644\n--- a/drivers/crypto/dpaa_sec/dpaa_sec.c\n+++ b/drivers/crypto/dpaa_sec/dpaa_sec.c\n@@ -219,6 +219,13 @@ dpaa_sec_init_tx(struct qman_fq *fq)\n \treturn ret;\n }\n \n+static inline int is_aead(dpaa_sec_session *ses)\n+{\n+\treturn ((ses->cipher_alg == 0) &&\n+\t\t(ses->auth_alg == 0) &&\n+\t\t(ses->aead_alg != 0));\n+}\n+\n static inline int is_encode(dpaa_sec_session *ses)\n {\n \treturn ses->dir == DIR_ENC;\n@@ -2040,7 +2047,6 @@ dpaa_sec_cipher_init(struct rte_cryptodev *dev __rte_unused,\n \tdefault:\n \t\tDPAA_SEC_ERR(\"Crypto: Undefined Cipher specified %u\",\n \t\t\t      xform->cipher.algo);\n-\t\trte_free(session->cipher_key.data);\n \t\treturn -1;\n \t}\n \tsession->dir = (xform->cipher.op == RTE_CRYPTO_CIPHER_OP_ENCRYPT) ?\n@@ -2108,7 +2114,6 @@ dpaa_sec_auth_init(struct rte_cryptodev *dev __rte_unused,\n \tdefault:\n \t\tDPAA_SEC_ERR(\"Crypto: Unsupported Auth specified %u\",\n \t\t\t      xform->auth.algo);\n-\t\trte_free(session->auth_key.data);\n \t\treturn -1;\n \t}\n \n@@ -2151,7 +2156,6 @@ dpaa_sec_chain_init(struct rte_cryptodev *dev __rte_unused,\n \t\t\t\t\t     RTE_CACHE_LINE_SIZE);\n \tif (session->auth_key.data == NULL && auth_xform->key.length > 0) {\n \t\tDPAA_SEC_ERR(\"No Memory for auth key\");\n-\t\trte_free(session->cipher_key.data);\n \t\treturn -ENOMEM;\n \t}\n \tsession->auth_key.length = auth_xform->key.length;\n@@ -2191,7 +2195,7 @@ dpaa_sec_chain_init(struct rte_cryptodev *dev __rte_unused,\n \tdefault:\n \t\tDPAA_SEC_ERR(\"Crypto: Unsupported Auth specified %u\",\n \t\t\t      auth_xform->algo);\n-\t\tgoto error_out;\n+\t\treturn -1;\n \t}\n \n \tsession->cipher_alg = cipher_xform->algo;\n@@ -2212,16 +2216,11 @@ dpaa_sec_chain_init(struct rte_cryptodev *dev __rte_unused,\n \tdefault:\n \t\tDPAA_SEC_ERR(\"Crypto: Undefined Cipher specified %u\",\n \t\t\t      cipher_xform->algo);\n-\t\tgoto error_out;\n+\t\treturn -1;\n \t}\n \tsession->dir = (cipher_xform->op == RTE_CRYPTO_CIPHER_OP_ENCRYPT) ?\n \t\t\t\tDIR_ENC : DIR_DEC;\n \treturn 0;\n-\n-error_out:\n-\trte_free(session->cipher_key.data);\n-\trte_free(session->auth_key.data);\n-\treturn -1;\n }\n \n static int\n@@ -2253,7 +2252,6 @@ dpaa_sec_aead_init(struct rte_cryptodev *dev __rte_unused,\n \t\tbreak;\n \tdefault:\n \t\tDPAA_SEC_ERR(\"unsupported AEAD alg %d\", session->aead_alg);\n-\t\trte_free(session->aead_key.data);\n \t\treturn -ENOMEM;\n \t}\n \n@@ -2323,6 +2321,18 @@ dpaa_sec_attach_sess_q(struct dpaa_sec_qp *qp, dpaa_sec_session *sess)\n \treturn ret;\n }\n \n+static inline void\n+free_session_data(dpaa_sec_session *s)\n+{\n+\tif (is_aead(s))\n+\t\trte_free(s->aead_key.data);\n+\telse {\n+\t\trte_free(s->auth_key.data);\n+\t\trte_free(s->cipher_key.data);\n+\t}\n+\tmemset(s, 0, sizeof(dpaa_sec_session));\n+}\n+\n static int\n dpaa_sec_set_session_parameters(struct rte_cryptodev *dev,\n \t\t\t    struct rte_crypto_sym_xform *xform,\tvoid *sess)\n@@ -2415,10 +2425,7 @@ dpaa_sec_set_session_parameters(struct rte_cryptodev *dev,\n \treturn 0;\n \n err1:\n-\trte_free(session->cipher_key.data);\n-\trte_free(session->auth_key.data);\n-\tmemset(session, 0, sizeof(dpaa_sec_session));\n-\n+\tfree_session_data(session);\n \treturn -EINVAL;\n }\n \n@@ -2467,9 +2474,7 @@ free_session_memory(struct rte_cryptodev *dev, dpaa_sec_session *s)\n \t\ts->inq[i] = NULL;\n \t\ts->qp[i] = NULL;\n \t}\n-\trte_free(s->cipher_key.data);\n-\trte_free(s->auth_key.data);\n-\tmemset(s, 0, sizeof(dpaa_sec_session));\n+\tfree_session_data(s);\n \trte_mempool_put(sess_mp, (void *)s);\n }\n \n@@ -2836,9 +2841,7 @@ dpaa_sec_set_ipsec_session(__rte_unused struct rte_cryptodev *dev,\n \n \treturn 0;\n out:\n-\trte_free(session->auth_key.data);\n-\trte_free(session->cipher_key.data);\n-\tmemset(session, 0, sizeof(dpaa_sec_session));\n+\tfree_session_data(session);\n \treturn -1;\n }\n \n",
    "prefixes": [
        "1/2"
    ]
}