All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sean Christopherson <seanjc@google.com>
To: Siddharth Chandrasekaran <sidcha@amazon.de>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
	Vitaly Kuznetsov <vkuznets@redhat.com>,
	Wanpeng Li <wanpengli@tencent.com>,
	Jim Mattson <jmattson@google.com>, Joerg Roedel <joro@8bytes.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
	x86@kernel.org, "H. Peter Anvin" <hpa@zytor.com>,
	kvm@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] KVM: x86: Hoist input checks in kvm_add_msr_filter()
Date: Mon, 3 May 2021 20:53:09 +0000	[thread overview]
Message-ID: <YJBitcip8/WIsaB9@google.com> (raw)
In-Reply-To: <20210503122111.13775-1-sidcha@amazon.de>

On Mon, May 03, 2021, Siddharth Chandrasekaran wrote:
> In ioctl KVM_X86_SET_MSR_FILTER, input from user space is validated
> after a memdup_user(). For invalid inputs we'd memdup and then call
> kfree unnecessarily. Hoist input validation to avoid kfree altogether.
> 
> Signed-off-by: Siddharth Chandrasekaran <sidcha@amazon.de>
> ---
>  arch/x86/kvm/x86.c | 21 ++++++---------------
>  1 file changed, 6 insertions(+), 15 deletions(-)
> 
> diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
> index ee0dc58ac3a5..15c20b31cc91 100644
> --- a/arch/x86/kvm/x86.c
> +++ b/arch/x86/kvm/x86.c
> @@ -5393,11 +5393,16 @@ static int kvm_add_msr_filter(struct kvm_x86_msr_filter *msr_filter,
>  	struct msr_bitmap_range range;
>  	unsigned long *bitmap = NULL;
>  	size_t bitmap_size;
> -	int r;
>  
>  	if (!user_range->nmsrs)
>  		return 0;
>  
> +	if (user_range->flags & ~(KVM_MSR_FILTER_READ | KVM_MSR_FILTER_WRITE))
> +		return -EINVAL;
> +
> +	if (!user_range->flags)
> +		return -EINVAL;
> +
>  	bitmap_size = BITS_TO_LONGS(user_range->nmsrs) * sizeof(long);
>  	if (!bitmap_size || bitmap_size > KVM_MSR_FILTER_MAX_BITMAP_SIZE)
>  		return -EINVAL;
> @@ -5413,24 +5418,10 @@ static int kvm_add_msr_filter(struct kvm_x86_msr_filter *msr_filter,
>  		.bitmap = bitmap,
>  	};
>  
> -	if (range.flags & ~(KVM_MSR_FILTER_READ | KVM_MSR_FILTER_WRITE)) {
> -		r = -EINVAL;
> -		goto err;
> -	}
> -
> -	if (!range.flags) {
> -		r = -EINVAL;
> -		goto err;
> -	}
> -
> -	/* Everything ok, add this range identifier. */
>  	msr_filter->ranges[msr_filter->count] = range;

Might be worth elminating the intermediate "range", too.  Doesn't affect output,
but it would make it a little more obvious that the new range is mostly coming
straight from userspace input.  E.g.

	msr_filter->ranges[msr_filter->count] = (struct msr_bitmap_range) {
		.flags = user_range->flags,
		.base = user_range->base,
		.nmsrs = user_range->nmsrs,
		.bitmap = bitmap,
	};

Either way:

Reviewed-by: Sean Christopherson <seanjc@google.com>

>  	msr_filter->count++;
>  
>  	return 0;
> -err:
> -	kfree(bitmap);
> -	return r;
>  }
>  
>  static int kvm_vm_ioctl_set_msr_filter(struct kvm *kvm, void __user *argp)
> -- 

  reply	other threads:[~2021-05-03 20:53 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-03 12:21 [PATCH] KVM: x86: Hoist input checks in kvm_add_msr_filter() Siddharth Chandrasekaran
2021-05-03 20:53 ` Sean Christopherson [this message]
2021-05-03 21:17   ` Siddharth Chandrasekaran

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=YJBitcip8/WIsaB9@google.com \
    --to=seanjc@google.com \
    --cc=bp@alien8.de \
    --cc=hpa@zytor.com \
    --cc=jmattson@google.com \
    --cc=joro@8bytes.org \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=sidcha@amazon.de \
    --cc=tglx@linutronix.de \
    --cc=vkuznets@redhat.com \
    --cc=wanpengli@tencent.com \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.