From: David Howells Date: Mon, 14 Jun 2021 13:13:41 +0000 (+0100) Subject: afs: Fix afs_write_end() to handle len > page size X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=44a946f1405ec2a93a189ae2bb815d4f099c58f5;p=ceph-client.git afs: Fix afs_write_end() to handle len > page size It is possible for the len argument to afs_write_end() to overrun the end of the page (len is used to key the size of the page in afs_write_start() when compound pages become a regular thing). Fix afs_write_end() to correctly trim the write length so that it doesn't exceed the end of the page. Fixes: 3003bbd0697b ("afs: Use the netfs_write_begin() helper") Reported-by: Jeff Layton Signed-off-by: David Howells Acked-by: Jeff Layton cc: Marc Dionne cc: Al Viro cc: Matthew Wilcox cc: linux-afs@lists.infradead.org Link: https://lore.kernel.org/r/162367682522.460125.5652091227576721609.stgit@warthog.procyon.org.uk/ # v1 --- diff --git a/fs/afs/write.c b/fs/afs/write.c index 8e4e87d66855..9db3ddb1c45b 100644 --- a/fs/afs/write.c +++ b/fs/afs/write.c @@ -120,6 +120,7 @@ int afs_write_end(struct file *file, struct address_space *mapping, _enter("{%llx:%llu},{%lx}", vnode->fid.vid, vnode->fid.vnode, folio_index(folio)); + len = min_t(size_t, len, folio_size(folio) - from); if (!folio_test_uptodate(folio)) { if (copied < len) { copied = 0;