mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 09:36:22 +02:00
pidfs: handle FS_IOC32_GETVERSION in compat ioctl
FS_IOC32_GETVERSION has a distinct compat command encoding. Passing it through compat_ptr_ioctl() leaves pidfd_ioctl() unable to recognize the otherwise architecture-independent inode generation query. Translate the compat command to FS_IOC_GETVERSION before dispatching it through the native pidfd ioctl implementation. Signed-off-by: Li Chen <me@linux.beauty> Link: https://patch.msgid.link/20260716052822.1034228-1-me@linux.beauty Reviewed-by: Jan Kara <jack@suse.cz> Signed-off-by: Christian Brauner (Amutable) <brauner@kernel.org>
This commit is contained in:
parent
a1e0eb8f55
commit
1d0cff74d8
16
fs/pidfs.c
16
fs/pidfs.c
|
|
@ -1,5 +1,6 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
#include <linux/anon_inodes.h>
|
||||
#include <linux/compat.h>
|
||||
#include <linux/exportfs.h>
|
||||
#include <linux/file.h>
|
||||
#include <linux/fs.h>
|
||||
|
|
@ -659,6 +660,17 @@ static long pidfd_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
|||
return open_namespace(ns_common);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_COMPAT
|
||||
static long pidfd_compat_ioctl(struct file *file, unsigned int cmd,
|
||||
unsigned long arg)
|
||||
{
|
||||
if (cmd == FS_IOC32_GETVERSION)
|
||||
cmd = FS_IOC_GETVERSION;
|
||||
|
||||
return pidfd_ioctl(file, cmd, (unsigned long)compat_ptr(arg));
|
||||
}
|
||||
#endif
|
||||
|
||||
static int pidfs_file_release(struct inode *inode, struct file *file)
|
||||
{
|
||||
struct pid *pid = inode->i_private;
|
||||
|
|
@ -686,7 +698,9 @@ static const struct file_operations pidfs_file_operations = {
|
|||
.show_fdinfo = pidfd_show_fdinfo,
|
||||
#endif
|
||||
.unlocked_ioctl = pidfd_ioctl,
|
||||
.compat_ioctl = compat_ptr_ioctl,
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_ioctl = pidfd_compat_ioctl,
|
||||
#endif
|
||||
};
|
||||
|
||||
struct pid *pidfd_pid(const struct file *file)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user