1. 10 Jun, 2022 34 commits
  2. 09 Jun, 2022 6 commits
    • David Howells's avatar
      netfs: Fix gcc-12 warning by embedding vfs inode in netfs_i_context · 874c8ca1
      David Howells authored
      While randstruct was satisfied with using an open-coded "void *" offset
      cast for the netfs_i_context <-> inode casting, __builtin_object_size() as
      used by FORTIFY_SOURCE was not as easily fooled.  This was causing the
      following complaint[1] from gcc v12:
      
        In file included from include/linux/string.h:253,
                         from include/linux/ceph/ceph_debug.h:7,
                         from fs/ceph/inode.c:2:
        In function 'fortify_memset_chk',
            inlined from 'netfs_i_context_init' at include/linux/netfs.h:326:2,
            inlined from 'ceph_alloc_inode' at fs/ceph/inode.c:463:2:
        include/linux/fortify-string.h:242:25: warning: call to '__write_overflow_field' declared with attribute warning: detected write beyond size of field (1st parameter); maybe use struct_group()? [-Wattribute-warning]
          242 |                         __write_overflow_field(p_size_field, size);
              |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      
      Fix this by embedding a struct inode into struct netfs_i_context (which
      should perhaps be renamed to struct netfs_inode).  The struct inode
      vfs_inode fields are then removed from the 9p, afs, ceph and cifs inode
      structs and vfs_inode is then simply changed to "netfs.inode" in those
      filesystems.
      
      Further, rename netfs_i_context to netfs_inode, get rid of the
      netfs_inode() function that converted a netfs_i_context pointer to an
      inode pointer (that can now be done with &ctx->inode) and rename the
      netfs_i_context() function to netfs_inode() (which is now a wrapper
      around container_of()).
      
      Most of the changes were done with:
      
        perl -p -i -e 's/vfs_inode/netfs.inode/'g \
              `git grep -l 'vfs_inode' -- fs/{9p,afs,ceph,cifs}/*.[ch]`
      
      Kees suggested doing it with a pair structure[2] and a special
      declarator to insert that into the network filesystem's inode
      wrapper[3], but I think it's cleaner to embed it - and then it doesn't
      matter if struct randomisation reorders things.
      
      Dave Chinner suggested using a filesystem-specific VFS_I() function in
      each filesystem to convert that filesystem's own inode wrapper struct
      into the VFS inode struct[4].
      
      Version #2:
       - Fix a couple of missed name changes due to a disabled cifs option.
       - Rename nfs_i_context to nfs_inode
       - Use "netfs" instead of "nic" as the member name in per-fs inode wrapper
         structs.
      
      [ This also undoes commit 507160f4 ("netfs: gcc-12: temporarily
        disable '-Wattribute-warning' for now") that is no longer needed ]
      
      Fixes: bc899ee1 ("netfs: Add a netfs inode context")
      Reported-by: default avatarJeff Layton <jlayton@kernel.org>
      Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
      Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
      Reviewed-by: default avatarKees Cook <keescook@chromium.org>
      Reviewed-by: default avatarXiubo Li <xiubli@redhat.com>
      cc: Jonathan Corbet <corbet@lwn.net>
      cc: Eric Van Hensbergen <ericvh@gmail.com>
      cc: Latchesar Ionkov <lucho@ionkov.net>
      cc: Dominique Martinet <asmadeus@codewreck.org>
      cc: Christian Schoenebeck <linux_oss@crudebyte.com>
      cc: Marc Dionne <marc.dionne@auristor.com>
      cc: Ilya Dryomov <idryomov@gmail.com>
      cc: Steve French <smfrench@gmail.com>
      cc: William Kucharski <william.kucharski@oracle.com>
      cc: "Matthew Wilcox (Oracle)" <willy@infradead.org>
      cc: Dave Chinner <david@fromorbit.com>
      cc: linux-doc@vger.kernel.org
      cc: v9fs-developer@lists.sourceforge.net
      cc: linux-afs@lists.infradead.org
      cc: ceph-devel@vger.kernel.org
      cc: linux-cifs@vger.kernel.org
      cc: samba-technical@lists.samba.org
      cc: linux-fsdevel@vger.kernel.org
      cc: linux-hardening@vger.kernel.org
      Link: https://lore.kernel.org/r/d2ad3a3d7bdd794c6efb562d2f2b655fb67756b9.camel@kernel.org/ [1]
      Link: https://lore.kernel.org/r/20220517210230.864239-1-keescook@chromium.org/ [2]
      Link: https://lore.kernel.org/r/20220518202212.2322058-1-keescook@chromium.org/ [3]
      Link: https://lore.kernel.org/r/20220524101205.GI2306852@dread.disaster.area/ [4]
      Link: https://lore.kernel.org/r/165296786831.3591209.12111293034669289733.stgit@warthog.procyon.org.uk/ # v1
      Link: https://lore.kernel.org/r/165305805651.4094995.7763502506786714216.stgit@warthog.procyon.org.uk # v2
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      874c8ca1
    • Matthew Wilcox (Oracle)'s avatar
      mm: Add kernel-doc for folio->mlock_count · 334f6f53
      Matthew Wilcox (Oracle) authored
      Fix "./include/linux/mm_types.h:279: warning: Function parameter or member
      'mlock_count' not described in 'folio'".  Also neaten the html by hiding
      the anon struct.
      Signed-off-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
      334f6f53
    • Matthew Wilcox (Oracle)'s avatar
      mm/huge_memory: Fix xarray node memory leak · 69a37a8b
      Matthew Wilcox (Oracle) authored
      If xas_split_alloc() fails to allocate the necessary nodes to complete the
      xarray entry split, it sets the xa_state to -ENOMEM, which xas_nomem()
      then interprets as "Please allocate more memory", not as "Please free
      any unnecessary memory" (which was the intended outcome).  It's confusing
      to use xas_nomem() to free memory in this context, so call xas_destroy()
      instead.
      
      Reported-by: syzbot+9e27a75a8c24f3fe75c1@syzkaller.appspotmail.com
      Fixes: 6b24ca4a ("mm: Use multi-index entries in the page cache")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
      69a37a8b
    • Matthew Wilcox (Oracle)'s avatar
      filemap: Cache the value of vm_flags · dcfa24ba
      Matthew Wilcox (Oracle) authored
      After we have unlocked the mmap_lock for I/O, the file is pinned, but
      the VMA is not.  Checking this flag after that can be a use-after-free.
      It's not a terribly interesting use-after-free as it can only read one
      bit, and it's used to decide whether to read 2MB or 4MB.  But it
      upsets the automated tools and it's generally bad practice anyway,
      so let's fix it.
      
      Reported-by: syzbot+5b96d55e5b54924c77ad@syzkaller.appspotmail.com
      Fixes: 4687fdbb ("mm/filemap: Support VM_HUGEPAGE for file mappings")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
      dcfa24ba
    • Matthew Wilcox (Oracle)'s avatar
      filemap: Don't release a locked folio · 6bf74cdd
      Matthew Wilcox (Oracle) authored
      We must hold a reference over the call to filemap_release_folio(),
      otherwise the page cache will put the last reference to the folio
      before we unlock it, leading to splats like this:
      
       BUG: Bad page state in process u8:5  pfn:1ab1f4
       page:ffffea0006ac7d00 refcount:0 mapcount:0 mapping:0000000000000000 index:0x28b1de pfn:0x1ab1f4
       flags: 0x17ff80000040001(locked|reclaim|node=0|zone=2|lastcpupid=0xfff)
       raw: 017ff80000040001 dead000000000100 dead000000000122 0000000000000000
       raw: 000000000028b1de 0000000000000000 00000000ffffffff 0000000000000000
       page dumped because: PAGE_FLAGS_CHECK_AT_FREE flag(s) set
      
      It's an error path, so it doesn't see much testing.
      Reported-by: default avatarDarrick J. Wong <djwong@kernel.org>
      Fixes: a42634a6 ("readahead: Use a folio in read_pages()")
      Signed-off-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
      6bf74cdd
    • Yupeng Li's avatar
      MIPS: Loongson-3: fix compile mips cpu_hwmon as module build error. · 41e45640
      Yupeng Li authored
        set cpu_hwmon as a module build with loongson_sysconf, loongson_chiptemp
        undefined error,fix cpu_hwmon compile options to be bool.Some kernel
        compilation error information is as follows:
      
        Checking missing-syscalls for N32
        CALL    scripts/checksyscalls.sh
        Checking missing-syscalls for O32
        CALL    scripts/checksyscalls.sh
        CALL    scripts/checksyscalls.sh
        CHK     include/generated/compile.h
        CC [M]  drivers/platform/mips/cpu_hwmon.o
        Building modules, stage 2.
        MODPOST 200 modules
      ERROR: "loongson_sysconf" [drivers/platform/mips/cpu_hwmon.ko] undefined!
      ERROR: "loongson_chiptemp" [drivers/platform/mips/cpu_hwmon.ko] undefined!
      make[1]: *** [scripts/Makefile.modpost:92:__modpost] 错误 1
      make: *** [Makefile:1261:modules] 错误 2
      Signed-off-by: default avatarYupeng Li <liyupeng@zbhlos.com>
      Reviewed-by: default avatarGuenter Roeck <linux@roeck-us.net>
      Reviewed-by: default avatarHuacai Chen <chenhuacai@kernel.org>
      Signed-off-by: default avatarThomas Bogendoerfer <tsbogend@alpha.franken.de>
      41e45640