9p: pass the correct prototype to read_cache_page [Linux 4.9.187]

This Linux kernel change "9p: pass the correct prototype to read_cache_page" is included in the Linux 4.9.187 release. This change is authored by Christoph Hellwig <hch [at] lst.de> on Thu Jul 11 20:55:26 2019 -0700. The commit for this change in Linux stable tree is 4229753 (patch) which is from upstream commit f053cbd. The same Linux upstream change may have been applied to various maintained Linux releases and you can find all Linux releases containing changes from upstream f053cbd.

9p: pass the correct prototype to read_cache_page

[ Upstream commit f053cbd4366051d7eb6ba1b8d529d20f719c2963 ]

Fix the callback 9p passes to read_cache_page to actually have the
proper type expected.  Casting around function pointers can easily
hide typing bugs, and defeats control flow protection.

Link: http://lkml.kernel.org/r/20190520055731.24538-5-hch@lst.de
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Kees Cook <keescook@chromium.org>
Cc: Sami Tolvanen <samitolvanen@google.com>
Cc: Nick Desaulniers <ndesaulniers@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>

There are 6 lines of Linux source code added/deleted in this change. Code changes to Linux kernel are as follows.

 fs/9p/vfs_addr.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/fs/9p/vfs_addr.c b/fs/9p/vfs_addr.c
index 6181ad7..e45b1a0 100644
--- a/fs/9p/vfs_addr.c
+++ b/fs/9p/vfs_addr.c
@@ -49,8 +49,9 @@
  * @page: structure to page
  *
  */
-static int v9fs_fid_readpage(struct p9_fid *fid, struct page *page)
+static int v9fs_fid_readpage(void *data, struct page *page)
 {
+   struct p9_fid *fid = data;
    struct inode *inode = page->mapping->host;
    struct bio_vec bvec = {.bv_page = page, .bv_len = PAGE_SIZE};
    struct iov_iter to;
@@ -121,7 +122,8 @@ static int v9fs_vfs_readpages(struct file *filp, struct address_space *mapping,
    if (ret == 0)
        return ret;

-   ret = read_cache_pages(mapping, pages, (void *)v9fs_vfs_readpage, filp);
+   ret = read_cache_pages(mapping, pages, v9fs_fid_readpage,
+           filp->private_data);
    p9_debug(P9_DEBUG_VFS, "  = %d\n", ret);
    return ret;
 }

Leave a Reply

Your email address will not be published. Required fields are marked *