projects
/
platform
/
kernel
/
linux-starfive.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
crypto: xts - Handle EBUSY correctly
[platform/kernel/linux-starfive.git]
/
crypto
/
essiv.c
diff --git
a/crypto/essiv.c
b/crypto/essiv.c
index
e33369d
..
307eba7
100644
(file)
--- a/
crypto/essiv.c
+++ b/
crypto/essiv.c
@@
-171,7
+171,12
@@
static void essiv_aead_done(struct crypto_async_request *areq, int err)
struct aead_request *req = areq->data;
struct essiv_aead_request_ctx *rctx = aead_request_ctx(req);
struct aead_request *req = areq->data;
struct essiv_aead_request_ctx *rctx = aead_request_ctx(req);
+ if (err == -EINPROGRESS)
+ goto out;
+
kfree(rctx->assoc);
kfree(rctx->assoc);
+
+out:
aead_request_complete(req, err);
}
aead_request_complete(req, err);
}
@@
-247,7
+252,7
@@
static int essiv_aead_crypt(struct aead_request *req, bool enc)
err = enc ? crypto_aead_encrypt(subreq) :
crypto_aead_decrypt(subreq);
err = enc ? crypto_aead_encrypt(subreq) :
crypto_aead_decrypt(subreq);
- if (rctx->assoc && err != -EINPROGRESS)
+ if (rctx->assoc && err != -EINPROGRESS
&& err != -EBUSY
)
kfree(rctx->assoc);
return err;
}
kfree(rctx->assoc);
return err;
}