From patchwork Tue May 5 21:41:04 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lukasz Wojciechowski X-Patchwork-Id: 69789 X-Patchwork-Delegate: gakhil@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 61C39A0352; Tue, 5 May 2020 23:41:33 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 163EB1D6E8; Tue, 5 May 2020 23:41:33 +0200 (CEST) Received: from mailout2.w1.samsung.com (mailout2.w1.samsung.com [210.118.77.12]) by dpdk.org (Postfix) with ESMTP id EBE2A1D6E5 for ; Tue, 5 May 2020 23:41:31 +0200 (CEST) Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20200505214130euoutp021788894c26f4eaa7ffaf8ba2b7c38d7f~MP8abdy2Z1709617096euoutp02j for ; Tue, 5 May 2020 21:41:30 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20200505214130euoutp021788894c26f4eaa7ffaf8ba2b7c38d7f~MP8abdy2Z1709617096euoutp02j DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1588714890; bh=ccRlXkgwTjGLqkKYmCSIWwv+M66GLBCGnPbuZvx6MY0=; h=From:To:Cc:Subject:Date:References:From; b=PcgUR52Jiv6uT2wrklvsBw3oWKuMGaWAmXCRjniZJgIRzAhf1b0fY2S2OJLToVT6G oKmZmZdU6iaHhKVoeSAnxdLmtHpGfDBpsdaMiMIYjw8xBnKWjhFzXqJSactGU3Ao7F XIP/pzdh6QRQFcTzmtKSw7MYYdfiu5E7SoeKaXJ8= Received: from eusmges2new.samsung.com (unknown [203.254.199.244]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20200505214129eucas1p1dacbc661753c3bc74affd1e302f595d7~MP8ZgTPA50905209052eucas1p13; Tue, 5 May 2020 21:41:29 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges2new.samsung.com (EUCPMTA) with SMTP id A9.15.60679.98DD1BE5; Tue, 5 May 2020 22:41:29 +0100 (BST) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20200505214128eucas1p26202807ca7da9e16c1628fd63cb2dfeb~MP8Yo_egi1857718577eucas1p2X; Tue, 5 May 2020 21:41:28 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20200505214128eusmtrp2bf6a1de390113a1f109a3d8ac4976aa2~MP8YodJrd0253702537eusmtrp2K; Tue, 5 May 2020 21:41:28 +0000 (GMT) X-AuditID: cbfec7f4-0cbff7000001ed07-7b-5eb1dd8927c2 Received: from eusmtip1.samsung.com ( [203.254.199.221]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id 75.E2.08375.88DD1BE5; Tue, 5 May 2020 22:41:28 +0100 (BST) Received: from localhost.localdomain (unknown [106.210.88.70]) by eusmtip1.samsung.com (KnoxPortal) with ESMTPA id 20200505214128eusmtip1502a865d8997b128d68b4815dbe459e8~MP8YJxmsR1722617226eusmtip1J; Tue, 5 May 2020 21:41:28 +0000 (GMT) From: Lukasz Wojciechowski To: Akhil Goyal , Hemant Agrawal 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: H4sIAAAAAAAAA+NgFrrCIsWRmVeSWpSXmKPExsWy7djPc7qddzfGGTRM1LdYf2Yeo8W7T9uZ LFY+3shm8axnHaMDi8evBUtZPTa+28HkcfDdHqYA5igum5TUnMyy1CJ9uwSujEeX0gqaDSo+ nVnG1sC4Xa2LkZNDQsBE4vzs2WxdjFwcQgIrGCXur7gL5XxhlOg8/hrK+cwocfH5F0aYlsWX FrOB2EICyxklLk8ugSua9WYDWBGbgK3EkZlfWUFsEYEAietde8AamAWMJF52T2QGsYUFbCT2 nGkCsjk4WARUJda/zQQxeQVcJTY/lIdYJS+xesMBZpDxEgIb2CTW3f3PBJFwkWhZOJUNwhaW eHV8CzuELSPxf+d8JoiGbYwSV3//ZIRw9jNKXO9dAVVlLXH43282kG3MApoS63fpQ4QdJS5f ecIOEpYQ4JO48VYQ4mQ+iUnbpjNDhHklOtqEIKr1JJ72TGWEWftn7RMWCNtD4vLCL9DgiZVY Oq+ZbQKj3CyEXQsYGVcxiqeWFuempxYb5aWW6xUn5haX5qXrJefnbmIExvXpf8e/7GDc9Sfp EKMAB6MSD6+B+8Y4IdbEsuLK3EOMEhzMSiK8y35siBPiTUmsrEotyo8vKs1JLT7EKM3BoiTO a7zoZayQQHpiSWp2ampBahFMlomDU6qBMS+I/R3f/+clfEVnP+ssfXmgrkA87ttmndCGlLqV Sy/yVFVvyv964fqS892T/5VuWmpnpOjm89H+qYa126M7IgmlcW/DZSYa3813bBH+ldxhUneI 78HCTzftWhsjuB6YBT31T/OeFH98sd8ml2499QPLbujFuhcVH3j24N8WNoWt3Gb2M6z8lViK MxINtZiLihMBVMYXF+cCAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrJLMWRmVeSWpSXmKPExsVy+t/xu7oddzfGGdxbZ2yx/sw8Rot3n7Yz Wax8vJHN4lnPOkYHFo9fC5ayemx8t4PJ4+C7PUwBzFF6NkX5pSWpChn5xSW2StGGFkZ6hpYW ekYmlnqGxuaxVkamSvp2NimpOZllqUX6dgl6GY8upRU0G1R8OrOMrYFxu1oXIyeHhICJxOJL i9m6GLk4hASWMko8f/2fqYuRAyghI/HhkgBEjbDEn2tdUDUfGSV+7z/GDpJgE7CVODLzKyuI LSIQIPF90QU2EJsZaOjteU1gtrCAjcSeM03MIDNZBFQl1r/NBDF5BVwlNj+UhxgvL7F6wwHm CYw8CxgZVjGKpJYW56bnFhvqFSfmFpfmpesl5+duYgQG07ZjPzfvYLy0MfgQowAHoxIPr6H7 xjgh1sSy4srcQ4wSHMxKIrzLfmyIE+JNSaysSi3Kjy8qzUktPsRoCrR6IrOUaHI+MNDzSuIN TQ3NLSwNzY3Njc0slMR5OwQOxggJpCeWpGanphakFsH0MXFwSjUwBq9e8s91u7iB4cwg6Xna LZm9HspX54ez8N/zP9EdkPfhhFi2gDdH0y3h5HlnfY92xKhwVplnyGXezZN6IJwmJiG2pN7R I581eOPFWaLB8z8omWxaWnhqWd96sTURcqd3P/hm9Utkv1Dx45bmnpAl0zt+c32YyNbGt7p2 z92MV7JrNl5lj+VTYinOSDTUYi4qTgQA8X/vBTwCAAA= X-CMS-MailID: 20200505214128eucas1p26202807ca7da9e16c1628fd63cb2dfeb X-Msg-Generator: CA X-RootMTR: 20200505214128eucas1p26202807ca7da9e16c1628fd63cb2dfeb X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20200505214128eucas1p26202807ca7da9e16c1628fd63cb2dfeb References: 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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" This patch fixes management of memory for authentication and encryption keys. There were two issues with former state of implementation: 1) Invalid access to dpaa_sec_session union members The dpaa_sec_session structure includes an anonymous union: union { struct {...} aead_key; struct { struct {...} cipher_key; struct {...} auth_key; }; }; Depending on the used algorithm a rte_zmalloc() function allocated memory that was kept in aead_key, cipher_key or auth_key. However every time the memory was released, rte_free() was called only on cipher and auth keys, even if pointer to allocated memory was stored in aead_key. The C language specification defines such behavior as undefined. As the cipher_key and aead_key are similar, have same sizes and alignment, it has worked, but it's directly against C specification. This patch fixes this, providing a free_session_data() function to free the keys data. It verifies which algorithm was used (aead or auth+cipher) and frees proper part of the union. 2) Some keys might have been freed multiple times In functions like: dpaa_sec_cipher_init(), dpaa_sec_auth_init(), dpaa_sec_chain_init(), dpaa_sec_aead_init() keys data were freed before returning due to some error conditions. However the pointers were not zeroed causing another calls to ret_free from higher layers of code. This causes an error log about invalid memory address to be printed. This patch fixes it by making only one layer responsible for freeing memory: * dpaa_sec_set_session_parameters() for allocations made in: - dpaa_sec_cipher_init() - dpaa_sec_auth_init() - dpaa_sec_chain_init() - dpaa_sec_aead_init() * dpaa_sec_set_ipsec_session() for allocations made in: - dpaa_sec_ipsec_aead_init() - dpaa_sec_ipsec_proto_init() * dpaa_sec_set_pdcp_session() for allocations made in: - dpaa_sec_set_pdcp_session() /*only one layer in case of pdcp*/ Signed-off-by: Lukasz Wojciechowski Acked-by: Akhil Goyal --- drivers/crypto/dpaa_sec/dpaa_sec.c | 45 ++++++++++++++++-------------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/drivers/crypto/dpaa_sec/dpaa_sec.c b/drivers/crypto/dpaa_sec/dpaa_sec.c index a11b17bda..021a5639d 100644 --- a/drivers/crypto/dpaa_sec/dpaa_sec.c +++ b/drivers/crypto/dpaa_sec/dpaa_sec.c @@ -219,6 +219,13 @@ dpaa_sec_init_tx(struct qman_fq *fq) return ret; } +static inline int is_aead(dpaa_sec_session *ses) +{ + return ((ses->cipher_alg == 0) && + (ses->auth_alg == 0) && + (ses->aead_alg != 0)); +} + static inline int is_encode(dpaa_sec_session *ses) { return ses->dir == DIR_ENC; @@ -2040,7 +2047,6 @@ dpaa_sec_cipher_init(struct rte_cryptodev *dev __rte_unused, default: DPAA_SEC_ERR("Crypto: Undefined Cipher specified %u", xform->cipher.algo); - rte_free(session->cipher_key.data); return -1; } session->dir = (xform->cipher.op == RTE_CRYPTO_CIPHER_OP_ENCRYPT) ? @@ -2108,7 +2114,6 @@ dpaa_sec_auth_init(struct rte_cryptodev *dev __rte_unused, default: DPAA_SEC_ERR("Crypto: Unsupported Auth specified %u", xform->auth.algo); - rte_free(session->auth_key.data); return -1; } @@ -2151,7 +2156,6 @@ dpaa_sec_chain_init(struct rte_cryptodev *dev __rte_unused, RTE_CACHE_LINE_SIZE); if (session->auth_key.data == NULL && auth_xform->key.length > 0) { DPAA_SEC_ERR("No Memory for auth key"); - rte_free(session->cipher_key.data); return -ENOMEM; } session->auth_key.length = auth_xform->key.length; @@ -2191,7 +2195,7 @@ dpaa_sec_chain_init(struct rte_cryptodev *dev __rte_unused, default: DPAA_SEC_ERR("Crypto: Unsupported Auth specified %u", auth_xform->algo); - goto error_out; + return -1; } session->cipher_alg = cipher_xform->algo; @@ -2212,16 +2216,11 @@ dpaa_sec_chain_init(struct rte_cryptodev *dev __rte_unused, default: DPAA_SEC_ERR("Crypto: Undefined Cipher specified %u", cipher_xform->algo); - goto error_out; + return -1; } session->dir = (cipher_xform->op == RTE_CRYPTO_CIPHER_OP_ENCRYPT) ? DIR_ENC : DIR_DEC; return 0; - -error_out: - rte_free(session->cipher_key.data); - rte_free(session->auth_key.data); - return -1; } static int @@ -2253,7 +2252,6 @@ dpaa_sec_aead_init(struct rte_cryptodev *dev __rte_unused, break; default: DPAA_SEC_ERR("unsupported AEAD alg %d", session->aead_alg); - rte_free(session->aead_key.data); return -ENOMEM; } @@ -2323,6 +2321,18 @@ dpaa_sec_attach_sess_q(struct dpaa_sec_qp *qp, dpaa_sec_session *sess) return ret; } +static inline void +free_session_data(dpaa_sec_session *s) +{ + if (is_aead(s)) + rte_free(s->aead_key.data); + else { + rte_free(s->auth_key.data); + rte_free(s->cipher_key.data); + } + memset(s, 0, sizeof(dpaa_sec_session)); +} + static int dpaa_sec_set_session_parameters(struct rte_cryptodev *dev, struct rte_crypto_sym_xform *xform, void *sess) @@ -2415,10 +2425,7 @@ dpaa_sec_set_session_parameters(struct rte_cryptodev *dev, return 0; err1: - rte_free(session->cipher_key.data); - rte_free(session->auth_key.data); - memset(session, 0, sizeof(dpaa_sec_session)); - + free_session_data(session); return -EINVAL; } @@ -2467,9 +2474,7 @@ free_session_memory(struct rte_cryptodev *dev, dpaa_sec_session *s) s->inq[i] = NULL; s->qp[i] = NULL; } - rte_free(s->cipher_key.data); - rte_free(s->auth_key.data); - memset(s, 0, sizeof(dpaa_sec_session)); + free_session_data(s); rte_mempool_put(sess_mp, (void *)s); } @@ -2836,9 +2841,7 @@ dpaa_sec_set_ipsec_session(__rte_unused struct rte_cryptodev *dev, return 0; out: - rte_free(session->auth_key.data); - rte_free(session->cipher_key.data); - memset(session, 0, sizeof(dpaa_sec_session)); + free_session_data(session); return -1; } From patchwork Tue May 5 21:41:05 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lukasz Wojciechowski X-Patchwork-Id: 69790 X-Patchwork-Delegate: gakhil@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id E532FA0352; Tue, 5 May 2020 23:41:41 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 424C21D6F0; Tue, 5 May 2020 23:41:34 +0200 (CEST) Received: from mailout2.w1.samsung.com (mailout2.w1.samsung.com [210.118.77.12]) by dpdk.org (Postfix) with ESMTP id 7CE401D6E5 for ; Tue, 5 May 2020 23:41:32 +0200 (CEST) Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20200505214131euoutp028bab58f74f26f5d2ef664f472519d249~MP8bHuwFt1709617096euoutp02k for ; Tue, 5 May 2020 21:41:31 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20200505214131euoutp028bab58f74f26f5d2ef664f472519d249~MP8bHuwFt1709617096euoutp02k DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1588714891; bh=v0xLy1y9X8L/xXHb87ZwSADsZVo4Ewg3nURJfNjlCnw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=sfJJOhHBMKR8R42cIA/EsA3XnGqag9jDOhHperjkH7fw6nmC5B70YDVqQbgrmZsWz nGVbhJ3hAyL0sN4+5XRVCWImftX+GsC6t4LE5HeZU7dKqh4Fm1Gg8rFsOdT2PTnFrA Z7wrKTb7FEHgKgUiYnudlwLEv2zwLzs7+cjbTiZY= Received: from eusmges1new.samsung.com (unknown [203.254.199.242]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20200505214130eucas1p1f3cd16fe55b995204f61fe958716f2f5~MP8aiPmE61106811068eucas1p1l; Tue, 5 May 2020 21:41:30 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges1new.samsung.com (EUCPMTA) with SMTP id C4.91.61286.A8DD1BE5; Tue, 5 May 2020 22:41:30 +0100 (BST) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20200505214129eucas1p146b40738c440b77ee0131d18a80eea3d~MP8ZWxdR20907709077eucas1p1k; Tue, 5 May 2020 21:41:29 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20200505214129eusmtrp23d36fd4c35038f673f349f68267c86a9~MP8ZWNO7Z0253702537eusmtrp2L; Tue, 5 May 2020 21:41:29 +0000 (GMT) X-AuditID: cbfec7f2-f0bff7000001ef66-73-5eb1dd8af15a Received: from eusmtip1.samsung.com ( [203.254.199.221]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id C4.30.07950.98DD1BE5; Tue, 5 May 2020 22:41:29 +0100 (BST) Received: from localhost.localdomain (unknown [106.210.88.70]) by eusmtip1.samsung.com (KnoxPortal) with ESMTPA id 20200505214129eusmtip165d780021c665cf78bf9a3a64fbec339~MP8Yyc7Ko2481324813eusmtip19; Tue, 5 May 2020 21:41:28 +0000 (GMT) From: Lukasz Wojciechowski To: Akhil Goyal , Hemant Agrawal Cc: dev@dpdk.org, l.wojciechow@partner.samsung.com Date: Tue, 5 May 2020 23:41:05 +0200 Message-Id: <20200505214105.19465-2-l.wojciechow@partner.samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200505214105.19465-1-l.wojciechow@partner.samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrMIsWRmVeSWpSXmKPExsWy7djP87pddzfGGZzeYmSx/sw8Rot3n7Yz Wax8vJHN4lnPOkYHFo9fC5ayemx8t4PJ4+C7PUwBzFFcNimpOZllqUX6dglcGZO+drMU7BCo OPFzPksD4zreLkZODgkBE4nWH//Zuxi5OIQEVjBK/Hn9jxnC+cIo0d7xgwXC+cwocejgCnaY lo+97VCJ5UBV+z6yw1Xd3vGQFaSKTcBW4sjMr2C2iECAxPWuPWwgNrOAkcTL7olAOzg4hAXs JXpOOIOEWQRUJe52zwAr5xVwlfg6+SYTxDJ5idUbDjCD2JwCbhKPLt5hA9klIXCGTeLmmVWs EEUuEjM+n4eyhSVeHd8CdamMxP+d85kgGrYxSlz9/ZMRwtnPKHG9F+Yfa4nD/36zgVzELKAp sX6XPogpIeAo0T9BGMLkk7jxVhDifD6JSdumM0OEeSU62oQgZuhJPO2Zygiz9c/aJywQtofE qS9voSE6k1Hi5YrJzBMY5Wch7FrAyLiKUTy1tDg3PbXYMC+1XK84Mbe4NC9dLzk/dxMjMOpP /zv+aQfj10tJhxgFOBiVeHgN3DfGCbEmlhVX5h5ilOBgVhLhXfZjQ5wQb0piZVVqUX58UWlO avEhRmkOFiVxXuNFL2OFBNITS1KzU1MLUotgskwcnFINjDV7V3lleEdL7/6nxLXeV3Gj/4VN le9vLvGXX8d2/Ufv9SPv7F667T6+27m/ZNMF79nG8xO/N4mZvLDe6V3w/fEFd8FCqYvit2et TmIsPNT4xVn4XN2ixbP3P7dtbO3tasveVrM8XjLdRX8Gp7XNS/H7CzkY9m8U8/v/WVz3r3Px dP8Fnwon7FJiKc5INNRiLipOBABvI9oq9gIAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrMLMWRmVeSWpSXmKPExsVy+t/xu7qddzfGGRyYo2Cx/sw8Rot3n7Yz Wax8vJHN4lnPOkYHFo9fC5ayemx8t4PJ4+C7PUwBzFF6NkX5pSWpChn5xSW2StGGFkZ6hpYW ekYmlnqGxuaxVkamSvp2NimpOZllqUX6dgl6GZO+drMU7BCoOPFzPksD4zreLkZODgkBE4mP ve0sXYxcHEICSxklZp/qZOti5ABKyEh8uCQAUSMs8edaFxtEzUdGiX/zbjCCJNgEbCWOzPzK CmKLCARIfF90gQ3EZgYaenteE9gcYQF7iZ4TziBhFgFVibvdM8DKeQVcJb5OvskEMV9eYvWG A8wgNqeAm8Sji3fAxggB1cz61sA6gZFvASPDKkaR1NLi3PTcYiO94sTc4tK8dL3k/NxNjMAA 3Hbs55YdjF3vgg8xCnAwKvHwGrhvjBNiTSwrrsw9xCjBwawkwrvsx4Y4Id6UxMqq1KL8+KLS nNTiQ4ymQEdNZJYSTc4HRkdeSbyhqaG5haWhubG5sZmFkjhvh8DBGCGB9MSS1OzU1ILUIpg+ Jg5OqQZGHu+Lxj/E1BYV1ur/sfHcLPot9770tijFVXVXf164K9DdoP26+IHnIWt3pSVzPsmd 79csP9XfFjlZWe6wJIuYqlqJG9dTnpd3z35+/ZypzrHY9/U9ge7e/Nj5Bj050RqmzEK7qmQD D81QqXz9sNzooq/os+I1xzaWOnhqqO4oMGlZtKVpg4MSS3FGoqEWc1FxIgBCAhtlVgIAAA== X-CMS-MailID: 20200505214129eucas1p146b40738c440b77ee0131d18a80eea3d X-Msg-Generator: CA X-RootMTR: 20200505214129eucas1p146b40738c440b77ee0131d18a80eea3d X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20200505214129eucas1p146b40738c440b77ee0131d18a80eea3d References: <20200505214105.19465-1-l.wojciechow@partner.samsung.com> Subject: [dpdk-dev] [PATCH 2/2] crypto/dpaa_sec: repair memory allocations X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" This patch repairs 2 memory allocations issues: 1) possible leak of memory In cryptodev_dpaa_sec_probe() function in case of portal initialization failure, function exited without cleanup. The patch redirects flow to out label, which provides proper cleanup in case of error: freeing cryptodevice private data and releasing cryptodevice. 2) double free of cryptodev private data The function dpaa_sec_dev_init() in case of failure called dpaa_sec_uninit() which freed both private data and security context. However one layer above in cryptodev_dpaa_sec_probe() function, the private data were freed one more time. The patch limits cleanup of the dpaa_sec_dev_init() function to freeing only the security context. Signed-off-by: Lukasz Wojciechowski --- drivers/crypto/dpaa_sec/dpaa_sec.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/drivers/crypto/dpaa_sec/dpaa_sec.c b/drivers/crypto/dpaa_sec/dpaa_sec.c index 021a5639d..097ab8de9 100644 --- a/drivers/crypto/dpaa_sec/dpaa_sec.c +++ b/drivers/crypto/dpaa_sec/dpaa_sec.c @@ -3410,7 +3410,7 @@ dpaa_sec_dev_init(struct rte_cryptodev *cryptodev) init_error: DPAA_SEC_ERR("driver %s: create failed\n", cryptodev->data->name); - dpaa_sec_uninit(cryptodev); + rte_free(cryptodev->security_ctx); return -EFAULT; } @@ -3467,7 +3467,7 @@ cryptodev_dpaa_sec_probe(struct rte_dpaa_driver *dpaa_drv __rte_unused, retval = rte_dpaa_portal_init((void *)1); if (retval) { DPAA_SEC_ERR("Unable to initialize portal"); - return retval; + goto out; } } @@ -3476,13 +3476,15 @@ cryptodev_dpaa_sec_probe(struct rte_dpaa_driver *dpaa_drv __rte_unused, if (retval == 0) return 0; + retval = -ENXIO; +out: /* In case of error, cleanup is done */ if (rte_eal_process_type() == RTE_PROC_PRIMARY) rte_free(cryptodev->data->dev_private); rte_cryptodev_pmd_release_device(cryptodev); - return -ENXIO; + return retval; } static int