Skip to content

Commit 51c0825

Browse files
committed
crypto: xts - Handle EBUSY correctly
As it is xts only handles the special return value of EINPROGRESS, which means that in all other cases it will free data related to the request. However, as the caller of xts may specify MAY_BACKLOG, we also need to expect EBUSY and treat it in the same way. Otherwise backlogged requests will trigger a use-after-free. Fixes: 8083b1b ("crypto: xts - add support for ciphertext stealing") Signed-off-by: Herbert Xu <[email protected]> Acked-by: Ard Biesheuvel <[email protected]> Signed-off-by: Herbert Xu <[email protected]>
1 parent 4bc713a commit 51c0825

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

crypto/xts.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -203,12 +203,12 @@ static void xts_encrypt_done(struct crypto_async_request *areq, int err)
203203
if (!err) {
204204
struct xts_request_ctx *rctx = skcipher_request_ctx(req);
205205

206-
rctx->subreq.base.flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
206+
rctx->subreq.base.flags &= CRYPTO_TFM_REQ_MAY_BACKLOG;
207207
err = xts_xor_tweak_post(req, true);
208208

209209
if (!err && unlikely(req->cryptlen % XTS_BLOCK_SIZE)) {
210210
err = xts_cts_final(req, crypto_skcipher_encrypt);
211-
if (err == -EINPROGRESS)
211+
if (err == -EINPROGRESS || err == -EBUSY)
212212
return;
213213
}
214214
}
@@ -223,12 +223,12 @@ static void xts_decrypt_done(struct crypto_async_request *areq, int err)
223223
if (!err) {
224224
struct xts_request_ctx *rctx = skcipher_request_ctx(req);
225225

226-
rctx->subreq.base.flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
226+
rctx->subreq.base.flags &= CRYPTO_TFM_REQ_MAY_BACKLOG;
227227
err = xts_xor_tweak_post(req, false);
228228

229229
if (!err && unlikely(req->cryptlen % XTS_BLOCK_SIZE)) {
230230
err = xts_cts_final(req, crypto_skcipher_decrypt);
231-
if (err == -EINPROGRESS)
231+
if (err == -EINPROGRESS || err == -EBUSY)
232232
return;
233233
}
234234
}

0 commit comments

Comments
 (0)