diff mbox

KVM: ioapic: add check for RTC_GSI

Message ID 1410368033-23628-1-git-send-email-chris.j.arges@canonical.com (mailing list archive)
State New, archived
Headers show

Commit Message

Chris J Arges Sept. 10, 2014, 4:53 p.m. UTC
cppcheck found the following error:
[ioapic.c:114]: (error) Array index -1 is out of bounds.

If CONFIG_X86 is not defined, RTC_GSI == -1U which means that an out of bounds
error could occur when accessing &ioapic->redirtbl[RTC_GSI].

This patch adds a check to kvm_rtc_eoi_tracking_restore_one that is similar to
how kvm_rtc_eoi_tracking_restore_all checks this condition.

Signed-off-by: Chris J Arges <chris.j.arges@canonical.com>
---
 virt/kvm/ioapic.c | 3 +++
 1 file changed, 3 insertions(+)

Comments

Jan Kiszka Sept. 11, 2014, 6:01 a.m. UTC | #1
On 2014-09-10 18:53, Chris J Arges wrote:
> cppcheck found the following error:
> [ioapic.c:114]: (error) Array index -1 is out of bounds.
> 
> If CONFIG_X86 is not defined, RTC_GSI == -1U which means that an out of bounds

That issue is limited to the dead ia64 architecture, no other builds
ioapic.c (besides x86, of course). Maybe finally remove KVM support for
that arch instead of bloating otherwise correct code?

Jan

> error could occur when accessing &ioapic->redirtbl[RTC_GSI].
> 
> This patch adds a check to kvm_rtc_eoi_tracking_restore_one that is similar to
> how kvm_rtc_eoi_tracking_restore_all checks this condition.
> 
> Signed-off-by: Chris J Arges <chris.j.arges@canonical.com>
> ---
>  virt/kvm/ioapic.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/virt/kvm/ioapic.c b/virt/kvm/ioapic.c
> index e8ce34c..859f5b8 100644
> --- a/virt/kvm/ioapic.c
> +++ b/virt/kvm/ioapic.c
> @@ -136,6 +136,9 @@ void kvm_rtc_eoi_tracking_restore_one(struct kvm_vcpu *vcpu)
>  {
>  	struct kvm_ioapic *ioapic = vcpu->kvm->arch.vioapic;
>  
> +	if (RTC_GSI >= IOAPIC_NUM_PINS)
> +		return;
> +
>  	spin_lock(&ioapic->lock);
>  	__rtc_irq_eoi_tracking_restore_one(vcpu);
>  	spin_unlock(&ioapic->lock);
>
Paolo Bonzini Sept. 11, 2014, 9:08 a.m. UTC | #2
Il 11/09/2014 08:01, Jan Kiszka ha scritto:
> That issue is limited to the dead ia64 architecture, no other builds
> ioapic.c (besides x86, of course). Maybe finally remove KVM support for
> that arch instead of bloating otherwise correct code?

Yes, we should.  I've just been too busy to do it.

Paolo
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Jan Kiszka Sept. 11, 2014, 9:19 a.m. UTC | #3
On 2014-09-11 11:08, Paolo Bonzini wrote:
> Il 11/09/2014 08:01, Jan Kiszka ha scritto:
>> That issue is limited to the dead ia64 architecture, no other builds
>> ioapic.c (besides x86, of course). Maybe finally remove KVM support for
>> that arch instead of bloating otherwise correct code?
> 
> Yes, we should.  I've just been too busy to do it.

As I enjoy creating large negative diffs :), I would almost do it - if I
had a test environment for IA64...

Jan
Paolo Bonzini Sept. 11, 2014, 9:35 a.m. UTC | #4
Il 11/09/2014 11:19, Jan Kiszka ha scritto:
> On 2014-09-11 11:08, Paolo Bonzini wrote:
>> Il 11/09/2014 08:01, Jan Kiszka ha scritto:
>>> That issue is limited to the dead ia64 architecture, no other builds
>>> ioapic.c (besides x86, of course). Maybe finally remove KVM support for
>>> that arch instead of bloating otherwise correct code?
>>
>> Yes, we should.  I've just been too busy to do it.
> 
> As I enjoy creating large negative diffs :), I would almost do it - if I
> had a test environment for IA64...

I have one. :)

Paolo

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/virt/kvm/ioapic.c b/virt/kvm/ioapic.c
index e8ce34c..859f5b8 100644
--- a/virt/kvm/ioapic.c
+++ b/virt/kvm/ioapic.c
@@ -136,6 +136,9 @@  void kvm_rtc_eoi_tracking_restore_one(struct kvm_vcpu *vcpu)
 {
 	struct kvm_ioapic *ioapic = vcpu->kvm->arch.vioapic;
 
+	if (RTC_GSI >= IOAPIC_NUM_PINS)
+		return;
+
 	spin_lock(&ioapic->lock);
 	__rtc_irq_eoi_tracking_restore_one(vcpu);
 	spin_unlock(&ioapic->lock);