jffs2: pass the correct prototype to read_cache_page
authorChristoph Hellwig <hch@lst.de>
Fri, 12 Jul 2019 03:55:23 +0000 (20:55 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 12 Jul 2019 18:05:43 +0000 (11:05 -0700)
Fix the callback jffs2 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-4-hch@lst.de
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Kees Cook <keescook@chromium.org>
Cc: Nick Desaulniers <ndesaulniers@google.com>
Cc: Sami Tolvanen <samitolvanen@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
fs/jffs2/file.c
fs/jffs2/fs.c
fs/jffs2/os-linux.h

index 7d8654a1472ef8802b4b4f3769b818d4a2843c2f..f8fb89b10227ce54d7267da042a07233bd9b331c 100644 (file)
@@ -109,9 +109,9 @@ static int jffs2_do_readpage_nolock (struct inode *inode, struct page *pg)
        return ret;
 }
 
-int jffs2_do_readpage_unlock(struct inode *inode, struct page *pg)
+int jffs2_do_readpage_unlock(void *data, struct page *pg)
 {
-       int ret = jffs2_do_readpage_nolock(inode, pg);
+       int ret = jffs2_do_readpage_nolock(data, pg);
        unlock_page(pg);
        return ret;
 }
index 112d85849db1046538844009f35402090f02eebe..8a20ddd25f2da4b2b2cf6ad229097682dad006f0 100644 (file)
@@ -687,7 +687,7 @@ unsigned char *jffs2_gc_fetch_page(struct jffs2_sb_info *c,
        struct page *pg;
 
        pg = read_cache_page(inode->i_mapping, offset >> PAGE_SHIFT,
-                            (void *)jffs2_do_readpage_unlock, inode);
+                            jffs2_do_readpage_unlock, inode);
        if (IS_ERR(pg))
                return (void *)pg;
 
index a2dbbb3f4c7463a7e20b3306ccd345b1b97918a0..bd3d5f0ddc34e918027a7bf3ad2d0149d1bd265c 100644 (file)
@@ -155,7 +155,7 @@ extern const struct file_operations jffs2_file_operations;
 extern const struct inode_operations jffs2_file_inode_operations;
 extern const struct address_space_operations jffs2_file_address_operations;
 int jffs2_fsync(struct file *, loff_t, loff_t, int);
-int jffs2_do_readpage_unlock (struct inode *inode, struct page *pg);
+int jffs2_do_readpage_unlock(void *data, struct page *pg);
 
 /* ioctl.c */
 long jffs2_ioctl(struct file *, unsigned int, unsigned long);