From: Herbert Xu Date: Wed, 23 Apr 2025 01:36:39 +0000 (+0800) Subject: Merge git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6 X-Git-Tag: block-6.16-20250606~34^2~237 X-Git-Url: https://git.kernel.dk/?a=commitdiff_plain;h=e3f08b262573187b9c10c61467e97a87bd7c661b;p=linux-block.git Merge git://git./linux/kernel/git/herbert/crypto-2.6 Merge crypto tree to pick up scompress off-by-one patch. The merge resolution is non-trivial as the dst handling code has been moved in front of the src. --- e3f08b262573187b9c10c61467e97a87bd7c661b diff --cc crypto/scompress.c index f7ce29b4cdb8,36934c78d127..8db4613150e0 --- a/crypto/scompress.c +++ b/crypto/scompress.c @@@ -190,32 -198,15 +190,32 @@@ static int scomp_acomp_comp_decomp(stru if (!req->dst || !dlen) return -EINVAL; - if (acomp_request_src_isvirt(req)) + if (dst_isvirt) + dst = req->dvirt; + else { + if (dlen <= req->dst->length) { + dpage = sg_page(req->dst); + doff = req->dst->offset; + } else + return -ENOSYS; + + dpage = nth_page(dpage, doff / PAGE_SIZE); + doff = offset_in_page(doff); + - n = dlen / PAGE_SIZE; - n += (offset_in_page(dlen) + doff - 1) / PAGE_SIZE; ++ n = (dlen - 1) / PAGE_SIZE; ++ n += (offset_in_page(dlen - 1) + doff) / PAGE_SIZE; + if (PageHighMem(dpage + n) && + size_add(doff, dlen) > PAGE_SIZE) + return -ENOSYS; + dst = kmap_local_page(dpage) + doff; + } + + if (src_isvirt) src = req->svirt; else { - src = scratch->src; + src = NULL; do { - if (acomp_request_src_isfolio(req)) { - spage = folio_page(req->sfolio, 0); - soff = req->soff; - } else if (slen <= req->src->length) { + if (slen <= req->src->length) { spage = sg_page(req->src); soff = req->src->offset; } else