Merge tag 'compat-ioctl-fix' of git://git.kernel.org:/pub/scm/linux/kernel/git/arnd/playground
Pull compat-ioctl fix from Arnd Bergmann: "One patch in the compat-ioctl series broke 32-bit rootfs for multiple people testing on 64-bit kernels. Let's fix it in -rc1 before others run into the same issue" * tag 'compat-ioctl-fix' of git://git.kernel.org:/pub/scm/linux/kernel/git/arnd/playground: compat_ioctl: fix FIONREAD on devices
此提交包含在:
11
fs/ioctl.c
11
fs/ioctl.c
@@ -536,13 +536,9 @@ static int compat_ioctl_preallocate(struct file *file, int mode,
|
||||
|
||||
static int file_ioctl(struct file *filp, unsigned int cmd, int __user *p)
|
||||
{
|
||||
struct inode *inode = file_inode(filp);
|
||||
|
||||
switch (cmd) {
|
||||
case FIBMAP:
|
||||
return ioctl_fibmap(filp, p);
|
||||
case FIONREAD:
|
||||
return put_user(i_size_read(inode) - filp->f_pos, p);
|
||||
case FS_IOC_RESVSP:
|
||||
case FS_IOC_RESVSP64:
|
||||
return ioctl_preallocate(filp, 0, p);
|
||||
@@ -734,6 +730,13 @@ static int do_vfs_ioctl(struct file *filp, unsigned int fd,
|
||||
case FIDEDUPERANGE:
|
||||
return ioctl_file_dedupe_range(filp, argp);
|
||||
|
||||
case FIONREAD:
|
||||
if (!S_ISREG(inode->i_mode))
|
||||
return vfs_ioctl(filp, cmd, arg);
|
||||
|
||||
return put_user(i_size_read(inode) - filp->f_pos,
|
||||
(int __user *)argp);
|
||||
|
||||
default:
|
||||
if (S_ISREG(inode->i_mode))
|
||||
return file_ioctl(filp, cmd, argp);
|
||||
|
新增問題並參考
封鎖使用者