mirror of
https://git.proxmox.com/git/mirror_ubuntu-kernels.git
synced 2025-11-11 20:40:36 +00:00
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
|
||
|---|---|---|
| .. | ||
| caching | ||
| cifs | ||
| ext4 | ||
| nfs | ||
| spufs | ||
| 9p.rst | ||
| adfs.rst | ||
| affs.rst | ||
| afs.rst | ||
| api-summary.rst | ||
| autofs-mount-control.rst | ||
| autofs.rst | ||
| automount-support.rst | ||
| befs.rst | ||
| bfs.rst | ||
| btrfs.rst | ||
| ceph.rst | ||
| coda.rst | ||
| configfs.rst | ||
| cramfs.rst | ||
| dax.rst | ||
| debugfs.rst | ||
| devpts.rst | ||
| directory-locking.rst | ||
| dlmfs.rst | ||
| dnotify.rst | ||
| ecryptfs.rst | ||
| efivarfs.rst | ||
| erofs.rst | ||
| ext2.rst | ||
| ext3.rst | ||
| f2fs.rst | ||
| fiemap.rst | ||
| files.rst | ||
| fscrypt.rst | ||
| fsverity.rst | ||
| fuse-io.rst | ||
| fuse.rst | ||
| gfs2-glocks.rst | ||
| gfs2-uevents.rst | ||
| gfs2.rst | ||
| hfs.rst | ||
| hfsplus.rst | ||
| hpfs.rst | ||
| idmappings.rst | ||
| index.rst | ||
| inotify.rst | ||
| isofs.rst | ||
| journalling.rst | ||
| locking.rst | ||
| locks.rst | ||
| mount_api.rst | ||
| netfs_library.rst | ||
| nilfs2.rst | ||
| ntfs3.rst | ||
| ntfs.rst | ||
| ocfs2-online-filecheck.rst | ||
| ocfs2.rst | ||
| omfs.rst | ||
| orangefs.rst | ||
| overlayfs.rst | ||
| path-lookup.rst | ||
| path-lookup.txt | ||
| porting.rst | ||
| proc.rst | ||
| qnx6.rst | ||
| quota.rst | ||
| ramfs-rootfs-initramfs.rst | ||
| relay.rst | ||
| romfs.rst | ||
| seq_file.rst | ||
| sharedsubtree.rst | ||
| splice.rst | ||
| squashfs.rst | ||
| sysfs.rst | ||
| sysv-fs.rst | ||
| tmpfs.rst | ||
| ubifs-authentication.rst | ||
| ubifs.rst | ||
| udf.rst | ||
| vfat.rst | ||
| vfs.rst | ||
| virtiofs.rst | ||
| xfs-delayed-logging-design.rst | ||
| xfs-self-describing-metadata.rst | ||
| zonefs.rst | ||