Alfred Piccioni
3dd76bebcd
lsm: new security_file_ioctl_compat() hook
...
commit f1bb47a31dff6d4b34fb14e99850860ee74bb003 upstream.
Some ioctl commands do not require ioctl permission, but are routed to
other permissions such as FILE_GETATTR or FILE_SETATTR. This routing is
done by comparing the ioctl cmd to a set of 64-bit flags (FS_IOC_*).
However, if a 32-bit process is running on a 64-bit kernel, it emits
32-bit flags (FS_IOC32_*) for certain ioctl operations. These flags are
being checked erroneously, which leads to these ioctl operations being
routed to the ioctl permission, rather than the correct file
permissions.
This was also noted in a RED-PEN finding from a while back -
"/* RED-PEN how should LSM module know it's handling 32bit? */".
This patch introduces a new hook, security_file_ioctl_compat(), that is
called from the compat ioctl syscall. All current LSMs have been changed
to support this hook.
Reviewing the three places where we are currently using
security_file_ioctl(), it appears that only SELinux needs a dedicated
compat change; TOMOYO and SMACK appear to be functional without any
change.
Cc: stable@vger.kernel.org
Fixes: 0b24dcb7f2 ("Revert "selinux: simplify ioctl checking"")
Signed-off-by: Alfred Piccioni <alpic@google.com>
Reviewed-by: Stephen Smalley <stephen.smalley.work@gmail.com>
[PM: subject tweak, line length fixes, and alignment corrections]
Signed-off-by: Paul Moore <paul@paul-moore.com>
Signed-off-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2024-02-23 08:25:15 +01:00
..
9p
9p: missing chunk of "fs/9p: Don't update file type when updating file attributes"
2022-06-22 14:11:02 +02:00
adfs
affs
affs: initialize fsdata in affs_truncate()
2023-02-06 07:52:36 +01:00
afs
afs: fix the usage of read_seqbegin_or_lock() in afs_find_server*()
2024-02-23 08:24:55 +01:00
autofs
autofs: fix memory leak of waitqueues in autofs_catatonic_mode
2023-09-23 11:00:02 +02:00
befs
bfs
btrfs
btrfs: send: return EOPNOTSUPP on unknown flags
2024-02-23 08:25:09 +01:00
cachefiles
ceph
ceph: fix deadlock or deadcode of misusing dget()
2024-02-23 08:25:03 +01:00
cifs
smb: client: fix OOB in smbCalcSize()
2024-01-08 11:29:47 +01:00
coda
coda: Avoid partial allocation of sig_inputArgs
2023-03-11 16:43:56 +01:00
configfs
configfs: fix possible memory leak in configfs_create_dir()
2023-01-18 11:41:09 +01:00
cramfs
crypto
fscrypt: add fscrypt_symlink_getattr() for computing st_size
2021-09-12 08:56:38 +02:00
debugfs
new helper: lookup_positive_unlocked()
2023-09-23 10:59:40 +02:00
devpts
fsnotify: fix fsnotify hooks in pseudo filesystems
2022-02-01 17:24:34 +01:00
dlm
dlm: fix plock lookup when using multiple lockspaces
2023-09-23 10:59:55 +02:00
ecryptfs
ecryptfs: Reject casefold directory inodes
2024-02-23 08:24:56 +01:00
efivarfs
efs
erofs
erofs: ensure that the post-EOF tails are all zeroed
2023-09-23 10:59:36 +02:00
exportfs
ext2
ext2: fix datatype of block number in ext2_xattr_set2()
2023-09-23 11:00:04 +02:00
ext4
ext4: fix double-free of blocks due to wrong extents moved_len
2024-02-23 08:25:11 +01:00
f2fs
f2fs: fix to check return value of f2fs_reserve_new_block()
2024-02-23 08:25:00 +01:00
fat
treewide: Remove uninitialized_var() usage
2023-06-09 10:29:01 +02:00
freevxfs
fscache
fscache: Fix cookie key hashing
2021-09-22 12:26:25 +02:00
fuse
fuse: nlookup missing decrement in fuse_direntplus_link
2023-09-23 11:00:00 +02:00
gfs2
gfs2: Fix kernel NULL pointer dereference in gfs2_rgrp_dump
2024-01-25 14:34:24 -08:00
hfs
hfs: fix missing hfs_bnode_get() in __hfs_bnode_create
2023-03-11 16:43:59 +01:00
hfsplus
treewide: Remove uninitialized_var() usage
2023-06-09 10:29:01 +02:00
hostfs
hostfs: fix memory handling in follow_link()
2021-04-14 08:24:14 +02:00
hpfs
hugetlbfs
hugetlbfs: fix null-ptr-deref in hugetlbfs_parse_param()
2023-01-18 11:41:38 +01:00
iomap
iomap: iomap_write_failed fix
2022-06-14 18:11:36 +02:00
isofs
treewide: Remove uninitialized_var() usage
2023-06-09 10:29:01 +02:00
jbd2
jbd2: correct the printing of write_flags in jbd2_write_superblock()
2024-01-25 14:34:20 -08:00
jffs2
jffs2: reduce stack usage in jffs2_build_xattr_subsystem()
2023-07-27 08:37:25 +02:00
jfs
jfs: fix array-index-out-of-bounds in diNewExt
2024-02-23 08:24:55 +01:00
kernfs
fs/kernfs/dir: obey S_ISGID
2024-02-23 08:25:03 +01:00
lockd
fs: lockd: avoid possible wrong NULL parameter
2023-09-23 10:59:48 +02:00
minix
minix: fix bug when opening a file with O_DIRECT
2022-04-15 14:18:35 +02:00
nfs
NFSv4.1/pnfs: Ensure we handle the error NFS4ERR_RETURNCONFLICT
2024-01-25 14:34:24 -08:00
nfs_common
nfsd
nfsd: fix file memleak on client_opens_release
2023-11-28 16:50:21 +00:00
nilfs2
nilfs2: fix potential bug in end_buffer_async_write
2024-02-23 08:25:14 +01:00
nls
fs/nls: make load_nls() take a const parameter
2023-09-23 10:59:38 +02:00
notify
fanotify: disallow mount/sb marks on kernel internal pseudo fs
2023-07-27 08:37:26 +02:00
ntfs
ntfs: check overflow when iterating ATTR_RECORDs
2022-11-25 17:42:22 +01:00
ocfs2
fs: move S_ISGID stripping into the vfs_*() helpers
2024-02-23 08:24:49 +01:00
omfs
treewide: Remove uninitialized_var() usage
2023-06-09 10:29:01 +02:00
openpromfs
orangefs
orangefs: Fix kmemleak in orangefs_{kernel,client}_debug_init()
2023-01-18 11:41:39 +01:00
overlayfs
ovl: skip overlayfs superblocks at global sync
2023-12-08 08:44:27 +01:00
proc
procfs: block chmod on /proc/thread-self/comm
2023-09-23 10:59:55 +02:00
pstore
pstore/ram: Fix crash when setting number of cpus to an odd number
2024-02-23 08:24:55 +01:00
qnx4
qnx4: work around gcc false positive warning bug
2021-09-30 10:09:26 +02:00
qnx6
quota
quota: explicitly forbid quota files from being encrypted
2023-11-28 16:50:19 +00:00
ramfs
reiserfs
reiserfs: Check the return value from __getblk()
2023-09-23 10:59:40 +02:00
romfs
squashfs
revert "squashfs: harden sanity check in squashfs_read_xattr_id_table"
2023-02-22 12:50:39 +01:00
sysfs
sysv
fs/sysv: Null check to prevent null-ptr-deref bug
2023-08-11 11:53:59 +02:00
tracefs
tracefs: Add missing lockdown check to tracefs_create_dir()
2023-09-23 11:00:06 +02:00
ubifs
ubifs: ubifs_symlink: Fix memleak of inode->i_link in error path
2024-02-23 08:24:49 +01:00
udf
udf: initialize newblock to 0
2023-09-23 10:59:56 +02:00
ufs
unicode
verity
fsverity: skip PKCS#7 parser when keyring is empty
2023-09-23 10:59:55 +02:00
xfs
xfs: verify buffer contents when we skip log replay
2023-06-28 10:18:42 +02:00
aio.c
aio: fix mremap after fork null-deref
2023-02-22 12:50:35 +01:00
anon_inodes.c
attr.c
attr: block mode changes of symlinks
2023-09-23 11:00:06 +02:00
bad_inode.c
binfmt_aout.c
binfmt: Move install_exec_creds after setup_new_exec to match binfmt_elf
2023-01-18 11:41:46 +01:00
binfmt_elf.c
elf: don't use MAP_FIXED_NOREPLACE for elf interpreter mappings
2021-10-06 15:42:35 +02:00
binfmt_elf_fdpic.c
fs: binfmt_elf_efpic: fix personality for ELF-FDPIC
2023-10-10 21:46:42 +02:00
binfmt_em86.c
binfmt_flat.c
binfmt: Move install_exec_creds after setup_new_exec to match binfmt_elf
2023-01-18 11:41:46 +01:00
binfmt_misc.c
binfmt_misc: fix shift-out-of-bounds in check_special_flags
2023-01-18 11:41:33 +01:00
binfmt_script.c
block_dev.c
block: Don't invalidate pagecache for invalid falloc modes
2024-01-08 11:29:48 +01:00
buffer.c
mm: fs: initialize fsdata passed to write_begin/write_end interface
2022-11-25 17:42:22 +01:00
char_dev.c
chardev: fix error handling in cdev_device_add()
2023-01-18 11:41:25 +01:00
compat.c
compat_binfmt_elf.c
compat_ioctl.c
lsm: new security_file_ioctl_compat() hook
2024-02-23 08:25:15 +01:00
coredump.c
d_path.c
dax.c
dax: fix cache flush on PMD-mapped pages
2022-06-14 18:11:41 +02:00
dcache.c
fast_dput(): handle underflows gracefully
2024-02-23 08:25:00 +01:00
dcookies.c
direct-io.c
drop_caches.c
eventfd.c
eventfd: prevent underflow for eventfd semaphores
2023-09-23 10:59:40 +02:00
eventpoll.c
epoll: ep_autoremove_wake_function should use list_del_init_careful
2023-06-28 10:18:35 +02:00
exec.c
exec: Force single empty string when argv is empty
2022-06-06 08:33:50 +02:00
fcntl.c
fcntl: fix potential deadlock for &fasync_struct.fa_lock
2021-09-15 09:47:28 +02:00
fhandle.c
file.c
fs: prevent out-of-bounds array speculation when closing a file descriptor
2023-03-17 08:32:47 +01:00
file_table.c
SUNRPC: Ensure we flush any closed sockets before xs_xprt_free()
2022-05-25 09:14:34 +02:00
filesystems.c
fs-writeback.c
writeback: fix call of incorrect macro
2023-05-17 11:35:58 +02:00
fs_context.c
fs: avoid empty option when generating legacy mount string
2023-07-27 08:37:25 +02:00
fs_parser.c
fs_pin.c
fs_struct.c
fs_types.c
fsopen.c
inode.c
fs: move S_ISGID stripping into the vfs_*() helpers
2024-02-23 08:24:49 +01:00
internal.h
fs: Establish locking order for unrelated directories
2023-07-27 08:37:26 +02:00
io_uring.c
io_uring/af_unix: disable sending io_uring over sockets
2023-12-13 18:18:16 +01:00
ioctl.c
Kconfig
Kconfig.binfmt
libfs.c
libfs: add DEFINE_SIMPLE_ATTRIBUTE_SIGNED for signed value
2023-01-18 11:40:55 +01:00
locks.c
locks: fix KASAN: use-after-free in trace_event_raw_event_filelock_lock
2023-09-23 11:00:02 +02:00
Makefile
mbcache.c
mbcache: Avoid nesting of cache->c_list_lock under bit locks
2023-01-18 11:41:59 +01:00
mount.h
mpage.c
namei.c
fs: move S_ISGID stripping into the vfs_*() helpers
2024-02-23 08:24:49 +01:00
namespace.c
fs: warn about impending deprecation of mandatory locks
2021-08-26 08:36:22 -04:00
no-block.c
nsfs.c
open.c
pipe.c
pipe: increase minimum default pipe size to 2 pages
2021-08-12 13:21:02 +02:00
pnode.c
pnode: terminate at peers of source
2023-01-18 11:41:44 +01:00
pnode.h
posix_acl.c
proc_namespace.c
read_write.c
readdir.c
readdir: make sure to verify directory entry for legacy interfaces too
2021-04-21 12:56:16 +02:00
select.c
select: Fix indefinitely sleeping task in poll_schedule_timeout()
2022-01-29 10:25:11 +01:00
seq_file.c
seq_file: disallow extremely large seq buffer allocations
2021-07-20 16:10:54 +02:00
signalfd.c
io_uring: disable polling pollfree files
2022-09-05 10:27:47 +02:00
splice.c
Revert "fs: check FMODE_LSEEK to control internal pipe splicing"
2022-10-17 17:24:32 +02:00
stack.c
stat.c
stat: fix inconsistency between struct stat and struct compat_stat
2022-04-27 13:50:48 +02:00
statfs.c
statfs: enforce statfs[64] structure initialization
2023-05-30 12:44:07 +01:00
super.c
fs: Protect reconfiguration of sb read-write from racing writes
2023-08-11 11:53:59 +02:00
sync.c
ovl: skip overlayfs superblocks at global sync
2023-12-08 08:44:27 +01:00
timerfd.c
userfaultfd.c
userfaultfd: open userfaultfds with O_RDONLY
2022-10-26 13:22:21 +02:00
utimes.c
xattr.c
fs: don't audit the capability check in simple_xattr_list()
2023-01-18 11:40:53 +01:00