mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-24 02:20:54 +07:00
SMB3: fix readpage for large swap cache
commit f2a26a3cff27dfa456fef386fe5df56dcb4b47b6 upstream. readpage was calculating the offset of the page incorrectly for the case of large swapcaches. loff_t offset = (loff_t)page->index << PAGE_SHIFT; As pointed out by Matthew Wilcox, this needs to use page_file_offset() to calculate the offset instead. Pages coming from the swap cache have page->index set to their index within the swapcache, not within the backing file. For a sufficiently large swapcache, we could have overlapping values of page->index within the same backing file. Suggested by: Matthew Wilcox (Oracle) <willy@infradead.org> Cc: <stable@vger.kernel.org> # v5.7+ Reviewed-by: Ronnie Sahlberg <lsahlber@redhat.com> Signed-off-by: Steve French <stfrench@microsoft.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
682f75d35f
commit
705eac042f
@ -4560,7 +4560,7 @@ static int cifs_readpage_worker(struct file *file, struct page *page,
|
||||
|
||||
static int cifs_readpage(struct file *file, struct page *page)
|
||||
{
|
||||
loff_t offset = (loff_t)page->index << PAGE_SHIFT;
|
||||
loff_t offset = page_file_offset(page);
|
||||
int rc = -EACCES;
|
||||
unsigned int xid;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user