WSL2-Linux-Kernel/fs/cifs
David Howells 874c8ca1e6 netfs: Fix gcc-12 warning by embedding vfs inode in netfs_i_context
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 507160f46c ("netfs: gcc-12: temporarily
  disable '-Wattribute-warning' for now") that is no longer needed ]

Fixes: bc899ee1c8 ("netfs: Add a netfs inode context")
Reported-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: David Howells <dhowells@redhat.com>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
Reviewed-by: Kees Cook <keescook@chromium.org>
Reviewed-by: Xiubo 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: Linus Torvalds <torvalds@linux-foundation.org>
2022-06-09 13:55:00 -07:00
..
Kconfig
Makefile cifs: do not build smb1ops if legacy support is disabled 2022-06-01 21:49:27 -05:00
asn1.c
cifs_debug.c cifs: avoid parallel session setups on same channel 2022-05-24 14:16:32 -05:00
cifs_debug.h
cifs_dfs_ref.c
cifs_fs_sb.h
cifs_ioctl.h
cifs_spnego.c
cifs_spnego.h
cifs_spnego_negtokeninit.asn1
cifs_swn.c cifs: fix potential deadlock in direct reclaim 2022-06-01 00:03:18 -05:00
cifs_swn.h
cifs_unicode.c
cifs_unicode.h
cifs_uniupr.h
cifsacl.c
cifsacl.h
cifsencrypt.c cifs: fix potential deadlock in direct reclaim 2022-06-01 00:03:18 -05:00
cifsfs.c netfs: Fix gcc-12 warning by embedding vfs inode in netfs_i_context 2022-06-09 13:55:00 -07:00
cifsfs.h cifs: update internal module number 2022-06-01 23:23:09 -05:00
cifsglob.h netfs: Fix gcc-12 warning by embedding vfs inode in netfs_i_context 2022-06-09 13:55:00 -07:00
cifspdu.h
cifsproto.h cifs: avoid parallel session setups on same channel 2022-05-24 14:16:32 -05:00
cifsroot.c
cifssmb.c cifs: use new enum for ses_status 2022-05-24 14:11:17 -05:00
connect.c cifs: fix potential deadlock in direct reclaim 2022-06-01 00:03:18 -05:00
dfs_cache.c cifs: fix uninitialized pointer in error case in dfs_cache_get_tgt_share 2022-06-04 13:33:42 -05:00
dfs_cache.h
dir.c
dns_resolve.c
dns_resolve.h
export.c
file.c netfs: Fix gcc-12 warning by embedding vfs inode in netfs_i_context 2022-06-09 13:55:00 -07:00
fs_context.c cifs: fix ntlmssp on old servers 2022-05-25 07:41:22 -05:00
fs_context.h cifs: fix ntlmssp on old servers 2022-05-25 07:41:22 -05:00
fscache.c netfs: Fix gcc-12 warning by embedding vfs inode in netfs_i_context 2022-06-09 13:55:00 -07:00
fscache.h netfs: Fix gcc-12 warning by embedding vfs inode in netfs_i_context 2022-06-09 13:55:00 -07:00
inode.c netfs: Fix gcc-12 warning by embedding vfs inode in netfs_i_context 2022-06-09 13:55:00 -07:00
ioctl.c
link.c cifs: potential buffer overflow in handling symlinks 2022-04-13 12:00:49 -05:00
misc.c netfs: Fix gcc-12 warning by embedding vfs inode in netfs_i_context 2022-06-09 13:55:00 -07:00
netlink.c
netlink.h
netmisc.c
nterr.c
nterr.h
ntlmssp.h
readdir.c smb3: remove unneeded null check in cifs_readdir 2022-05-27 12:05:47 -05:00
rfc1002pdu.h
sess.c cifs: fix potential deadlock in direct reclaim 2022-06-01 00:03:18 -05:00
smb1ops.c cifs: fix potential deadlock in direct reclaim 2022-06-01 00:03:18 -05:00
smb2file.c
smb2glob.h
smb2inode.c cifs: set the CREATE_NOT_FILE when opening the directory in use_cached_dir() 2022-05-21 12:23:24 -05:00
smb2maperror.c
smb2misc.c smb3: add trace point for oplock not found 2022-05-22 00:46:08 -05:00
smb2ops.c netfs: Fix gcc-12 warning by embedding vfs inode in netfs_i_context 2022-06-09 13:55:00 -07:00
smb2pdu.c cifs: fix potential deadlock in direct reclaim 2022-06-01 00:03:18 -05:00
smb2pdu.h Add various fsctl structs 2022-05-23 20:24:12 -05:00
smb2proto.h
smb2status.h
smb2transport.c cifs: use new enum for ses_status 2022-05-24 14:11:17 -05:00
smbdirect.c cifs: fix potential deadlock in direct reclaim 2022-06-01 00:03:18 -05:00
smbdirect.h
smbencrypt.c
smberr.h
trace.c
trace.h smb3: add trace point for oplock not found 2022-05-22 00:46:08 -05:00
transport.c cifs: fix potential deadlock in direct reclaim 2022-06-01 00:03:18 -05:00
unc.c
winucase.c
xattr.c