diff options
author | Xiao Ni <xni@redhat.com> | 2021-05-28 14:16:38 +0800 |
---|---|---|
committer | Song Liu <song@kernel.org> | 2021-06-10 19:40:14 -0700 |
commit | cd8a55005553a19719645fea00b1c7a7d16e9d09 (patch) | |
tree | eff6e03782b8450f290e8e37c1bec1f6c23dc8a7 | |
parent | 36567a1537db747af137a0473f3e13fd9123ba3d (diff) | |
download | linux-crypto-cd8a55005553a19719645fea00b1c7a7d16e9d09.tar.gz linux-crypto-cd8a55005553a19719645fea00b1c7a7d16e9d09.zip |
async_xor: check src_offs is not NULL before updating it
When PAGE_SIZE is greater than 4kB, multiple stripes may share the same
page. Thus, src_offs is added to async_xor_offs() with array of offsets.
However, async_xor() passes NULL src_offs to async_xor_offs(). In such
case, src_offs should not be updated. Add a check before the update.
Fixes: ad8c8da6b80d(async_xor: increase src_offs when dropping destination page)
Cc: stable@vger.kernel.org # v5.10+
Reported-by: Oleksandr Shchirskyi <oleksandr.shchirskyi@linux.intel.com>
Tested-by: Oleksandr Shchirskyi <oleksandr.shchirskyi@intel.com>
Signed-off-by: Xiao Ni <xni@redhat.com>
Signed-off-by: Song Liu <song@kernel.org>
-rw-r--r-- | crypto/async_tx/async_xor.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/crypto/async_tx/async_xor.c b/crypto/async_tx/async_xor.c index 6cd7f702..d8a91521 100644 --- a/crypto/async_tx/async_xor.c +++ b/crypto/async_tx/async_xor.c @@ -233,7 +233,8 @@ async_xor_offs(struct page *dest, unsigned int offset, if (submit->flags & ASYNC_TX_XOR_DROP_DST) { src_cnt--; src_list++; - src_offs++; + if (src_offs) + src_offs++; } /* wait for any prerequisite operations */ |