···440440 * erronously mistook the file descriptor for a pidfd.441441 * This is not perfect but will catch most cases.442442 */443443- return (_IOC_TYPE(cmd) == _IOC_TYPE(PIDFD_GET_INFO));443443+ return extensible_ioctl_valid(cmd, PIDFD_GET_INFO, PIDFD_INFO_SIZE_VER0);444444 }445445446446 return false;
+14
include/linux/fs.h
···4023402340244024int generic_atomic_write_valid(struct kiocb *iocb, struct iov_iter *iter);4025402540264026+static inline bool extensible_ioctl_valid(unsigned int cmd_a,40274027+ unsigned int cmd_b, size_t min_size)40284028+{40294029+ if (_IOC_DIR(cmd_a) != _IOC_DIR(cmd_b))40304030+ return false;40314031+ if (_IOC_TYPE(cmd_a) != _IOC_TYPE(cmd_b))40324032+ return false;40334033+ if (_IOC_NR(cmd_a) != _IOC_NR(cmd_b))40344034+ return false;40354035+ if (_IOC_SIZE(cmd_a) < min_size)40364036+ return false;40374037+ return true;40384038+}40394039+40264040#endif /* _LINUX_FS_H */