From: Mikulas Patocka <mpatocka@redhat.com>
To: Eric Biggers <ebiggers@kernel.org>,
George Cherian <gcherian@marvell.com>,
Wei Xu <xuwei5@hisilicon.com>, Zaibo Xu <xuzaibo@huawei.com>
Cc: Herbert Xu <herbert@gondor.apana.org.au>,
Mike Snitzer <msnitzer@redhat.com>,
linux-kernel@vger.kernel.org, dm-devel@redhat.com,
linux-crypto@vger.kernel.org,
"David S. Miller" <davem@davemloft.net>,
Milan Broz <mbroz@redhat.com>
Subject: [PATCH 1/2] cpt-crypto: don't sleep of CRYPTO_TFM_REQ_MAY_SLEEP was not specified
Date: Wed, 17 Jun 2020 09:48:56 -0400 (EDT) [thread overview]
Message-ID: <alpine.LRH.2.02.2006170946590.18714@file01.intranet.prod.int.rdu2.redhat.com> (raw)
In-Reply-To: <alpine.LRH.2.02.2006170940510.18714@file01.intranet.prod.int.rdu2.redhat.com>
There is this call chain:
cvm_encrypt -> cvm_enc_dec -> cptvf_do_request -> process_request -> kzalloc
where we call sleeping allocator function even if CRYPTO_TFM_REQ_MAY_SLEEP
was not specified.
Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Cc: stable@vger.kernel.org # v4.11+
Fixes: c694b233295b ("crypto: cavium - Add the Virtual Function driver for CPT")
---
drivers/crypto/cavium/cpt/cptvf_algs.c | 1 +
drivers/crypto/cavium/cpt/cptvf_reqmanager.c | 12 ++++++------
drivers/crypto/cavium/cpt/request_manager.h | 2 ++
3 files changed, 9 insertions(+), 6 deletions(-)
Index: linux-2.6/drivers/crypto/cavium/cpt/cptvf_algs.c
===================================================================
--- linux-2.6.orig/drivers/crypto/cavium/cpt/cptvf_algs.c
+++ linux-2.6/drivers/crypto/cavium/cpt/cptvf_algs.c
@@ -200,6 +200,7 @@ static inline int cvm_enc_dec(struct skc
int status;
memset(req_info, 0, sizeof(struct cpt_request_info));
+ req_info->may_sleep = (req->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP) != 0;
memset(fctx, 0, sizeof(struct fc_context));
create_input_list(req, enc, enc_iv_len);
create_output_list(req, enc_iv_len);
Index: linux-2.6/drivers/crypto/cavium/cpt/cptvf_reqmanager.c
===================================================================
--- linux-2.6.orig/drivers/crypto/cavium/cpt/cptvf_reqmanager.c
+++ linux-2.6/drivers/crypto/cavium/cpt/cptvf_reqmanager.c
@@ -133,7 +133,7 @@ static inline int setup_sgio_list(struct
/* Setup gather (input) components */
g_sz_bytes = ((req->incnt + 3) / 4) * sizeof(struct sglist_component);
- info->gather_components = kzalloc(g_sz_bytes, GFP_KERNEL);
+ info->gather_components = kzalloc(g_sz_bytes, req->may_sleep ? GFP_KERNEL : GFP_ATOMIC);
if (!info->gather_components) {
ret = -ENOMEM;
goto scatter_gather_clean;
@@ -150,7 +150,7 @@ static inline int setup_sgio_list(struct
/* Setup scatter (output) components */
s_sz_bytes = ((req->outcnt + 3) / 4) * sizeof(struct sglist_component);
- info->scatter_components = kzalloc(s_sz_bytes, GFP_KERNEL);
+ info->scatter_components = kzalloc(s_sz_bytes, req->may_sleep ? GFP_KERNEL : GFP_ATOMIC);
if (!info->scatter_components) {
ret = -ENOMEM;
goto scatter_gather_clean;
@@ -167,7 +167,7 @@ static inline int setup_sgio_list(struct
/* Create and initialize DPTR */
info->dlen = g_sz_bytes + s_sz_bytes + SG_LIST_HDR_SIZE;
- info->in_buffer = kzalloc(info->dlen, GFP_KERNEL);
+ info->in_buffer = kzalloc(info->dlen, req->may_sleep ? GFP_KERNEL : GFP_ATOMIC);
if (!info->in_buffer) {
ret = -ENOMEM;
goto scatter_gather_clean;
@@ -195,7 +195,7 @@ static inline int setup_sgio_list(struct
}
/* Create and initialize RPTR */
- info->out_buffer = kzalloc(COMPLETION_CODE_SIZE, GFP_KERNEL);
+ info->out_buffer = kzalloc(COMPLETION_CODE_SIZE, req->may_sleep ? GFP_KERNEL : GFP_ATOMIC);
if (!info->out_buffer) {
ret = -ENOMEM;
goto scatter_gather_clean;
@@ -421,7 +421,7 @@ int process_request(struct cpt_vf *cptvf
struct cpt_vq_command vq_cmd;
union cpt_inst_s cptinst;
- info = kzalloc(sizeof(*info), GFP_KERNEL);
+ info = kzalloc(sizeof(*info), req->may_sleep ? GFP_KERNEL : GFP_ATOMIC);
if (unlikely(!info)) {
dev_err(&pdev->dev, "Unable to allocate memory for info_buffer\n");
return -ENOMEM;
@@ -443,7 +443,7 @@ int process_request(struct cpt_vf *cptvf
* Get buffer for union cpt_res_s response
* structure and its physical address
*/
- info->completion_addr = kzalloc(sizeof(union cpt_res_s), GFP_KERNEL);
+ info->completion_addr = kzalloc(sizeof(union cpt_res_s), req->may_sleep ? GFP_KERNEL : GFP_ATOMIC);
if (unlikely(!info->completion_addr)) {
dev_err(&pdev->dev, "Unable to allocate memory for completion_addr\n");
ret = -ENOMEM;
Index: linux-2.6/drivers/crypto/cavium/cpt/request_manager.h
===================================================================
--- linux-2.6.orig/drivers/crypto/cavium/cpt/request_manager.h
+++ linux-2.6/drivers/crypto/cavium/cpt/request_manager.h
@@ -62,6 +62,8 @@ struct cpt_request_info {
union ctrl_info ctrl; /* User control information */
struct cptvf_request req; /* Request Information (Core specific) */
+ bool may_sleep;
+
struct buf_ptr in[MAX_BUF_CNT];
struct buf_ptr out[MAX_BUF_CNT];
next prev parent reply other threads:[~2020-06-17 13:49 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-09 17:11 crypto API and GFP_ATOMIC Mikulas Patocka
2020-06-10 1:04 ` Herbert Xu
2020-06-10 12:02 ` Mikulas Patocka
2020-06-10 12:11 ` Herbert Xu
2020-06-16 15:01 ` Mikulas Patocka
2020-06-16 15:01 ` Mikulas Patocka
2020-06-16 15:01 ` [PATCH 1/4] crypto: introduce CRYPTO_ALG_ALLOCATES_MEMORY Mikulas Patocka
2020-06-16 17:36 ` [dm-devel] " Eric Biggers
2020-06-17 15:08 ` Mikulas Patocka
2020-06-17 15:09 ` [PATCH 1/3] crypto: pass the flag CRYPTO_ALG_ALLOCATES_MEMORY Mikulas Patocka
2020-06-17 15:09 ` Mikulas Patocka
2020-06-26 4:45 ` Herbert Xu
2020-06-26 15:17 ` Mikulas Patocka
2020-06-26 16:16 ` [PATCH 1/3 v2] crypto: introduce " Mikulas Patocka
2020-06-26 16:46 ` Eric Biggers
2020-06-26 17:00 ` [dm-devel] " Eric Biggers
2020-06-28 19:07 ` Mikulas Patocka
2020-06-28 19:07 ` Mikulas Patocka
2020-06-28 19:50 ` [dm-devel] " Eric Biggers
2020-06-30 13:57 ` Mikulas Patocka
2020-06-28 20:00 ` Eric Biggers
2020-06-29 13:17 ` Mikulas Patocka
2020-06-29 13:17 ` Mikulas Patocka
2020-06-30 13:45 ` [dm-devel] " Mikulas Patocka
2020-06-28 19:04 ` Mikulas Patocka
2020-06-28 19:46 ` Eric Biggers
2020-06-28 19:05 ` [PATCH 1/3 v3] " Mikulas Patocka
2020-06-30 13:56 ` [PATCH 1/3 v4] " Mikulas Patocka
2020-06-30 16:35 ` [dm-devel] " Eric Biggers
2020-06-30 17:01 ` Mikulas Patocka
2020-06-30 17:01 ` Mikulas Patocka
2020-06-30 17:02 ` [PATCH 1/3 v5] " Mikulas Patocka
2020-06-30 17:57 ` [dm-devel] [PATCH 1/3 v4] " Eric Biggers
2020-06-30 18:14 ` Mikulas Patocka
2020-06-30 18:15 ` [PATCH 1/3 v6] " Mikulas Patocka
2020-07-01 1:49 ` Herbert Xu
2020-06-17 15:10 ` [PATCH 2/3] crypto: set " Mikulas Patocka
2020-06-17 15:10 ` Mikulas Patocka
2020-06-17 15:11 ` [PATCH 3/3] dm-crypt: don't use drivers that have CRYPTO_ALG_ALLOCATES_MEMORY Mikulas Patocka
2020-06-16 15:01 ` [PATCH 2/4] crypto: pass the flag CRYPTO_ALG_ALLOCATES_MEMORY Mikulas Patocka
2020-06-16 17:42 ` [dm-devel] " Eric Biggers
2020-06-16 15:02 ` [PATCH 3/4] crypto: set " Mikulas Patocka
2020-06-16 15:02 ` Mikulas Patocka
2020-06-16 17:43 ` [dm-devel] " Eric Biggers
2020-06-16 15:02 ` [PATCH 4/4] crypto: fix the drivers that don't respect CRYPTO_TFM_REQ_MAY_SLEEP Mikulas Patocka
2020-06-16 17:50 ` [dm-devel] " Eric Biggers
2020-06-16 18:18 ` Mikulas Patocka
2020-06-16 18:23 ` Eric Biggers
2020-06-17 13:46 ` Mikulas Patocka
2020-06-17 13:48 ` Mikulas Patocka [this message]
2020-06-26 6:07 ` [PATCH 1/2] cpt-crypto: don't sleep of CRYPTO_TFM_REQ_MAY_SLEEP was not specified Herbert Xu
2020-06-17 13:49 ` [PATCH 2/2] hisilicon-crypto: " Mikulas Patocka
2020-06-17 13:49 ` Mikulas Patocka
2020-06-17 14:11 ` [dm-devel] " Jonathan Cameron
2020-06-17 14:11 ` Jonathan Cameron
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=alpine.LRH.2.02.2006170946590.18714@file01.intranet.prod.int.rdu2.redhat.com \
--to=mpatocka@redhat.com \
--cc=davem@davemloft.net \
--cc=dm-devel@redhat.com \
--cc=ebiggers@kernel.org \
--cc=gcherian@marvell.com \
--cc=herbert@gondor.apana.org.au \
--cc=linux-crypto@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mbroz@redhat.com \
--cc=msnitzer@redhat.com \
--cc=xuwei5@hisilicon.com \
--cc=xuzaibo@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.