Re: [PATCH] KVM: Forbid /dev/kvm being opened by a compat task when CONFIG_KVM_COMPAT=n

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 13.11.19 17:05, Marc Zyngier wrote:
> On a system without KVM_COMPAT, we prevent IOCTLs from being issued
> by a compat task. Although this prevents most silly things from
> happening, it can still confuse a 32bit userspace that is able
> to open the kvm device (the qemu test suite seems to be pretty
> mad with this behaviour).
> 
> Take a more radical approach and return a -ENODEV to the compat
> task.
> 
> Reported-by: Peter Maydell <peter.maydell@xxxxxxxxxx>
> Signed-off-by: Marc Zyngier <maz@xxxxxxxxxx>
> ---
>  virt/kvm/kvm_main.c | 8 +++++++-
>  1 file changed, 7 insertions(+), 1 deletion(-)
> 
> diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
> index 543024c7a87f..1243e48dc717 100644
> --- a/virt/kvm/kvm_main.c
> +++ b/virt/kvm/kvm_main.c
> @@ -122,7 +122,13 @@ static long kvm_vcpu_compat_ioctl(struct file *file, unsigned int ioctl,
>  #else
>  static long kvm_no_compat_ioctl(struct file *file, unsigned int ioctl,
>  				unsigned long arg) { return -EINVAL; }
> -#define KVM_COMPAT(c)	.compat_ioctl	= kvm_no_compat_ioctl
> +
> +static int kvm_no_compat_open(struct inode *inode, struct file *file)
> +{
> +	return is_compat_task() ? -ENODEV : 0;
> +}
> +#define KVM_COMPAT(c)	.compat_ioctl	= kvm_no_compat_ioctl,	\

Do we still need compat_ioctl if open never succeeds?


> +			.open		= kvm_no_compat_open
>  #endif
>  static int hardware_enable_all(void);
>  static void hardware_disable_all(void);
> 




[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux