From: Vitaly Kuznetsov <vkuznets@redhat.com>
To: Sean Christopherson <seanjc@google.com>
Cc: kvm@vger.kernel.org, Paolo Bonzini <pbonzini@redhat.com>,
Wanpeng Li <wanpengli@tencent.com>,
Jim Mattson <jmattson@google.com>,
linux-hyperv@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] KVM: x86: Fully initialize 'struct kvm_lapic_irq' in kvm_pv_kick_cpu_op()
Date: Fri, 08 Jul 2022 14:44:21 +0200 [thread overview]
Message-ID: <87r12vpye2.fsf@redhat.com> (raw)
In-Reply-To: <YscZMCBpuoJUlQ+H@google.com>
Sean Christopherson <seanjc@google.com> writes:
> On Tue, Jun 28, 2022, Vitaly Kuznetsov wrote:
>> 'vector' and 'trig_mode' fields of 'struct kvm_lapic_irq' are left
>> uninitialized in kvm_pv_kick_cpu_op(). While these fields are normally
>> not needed for APIC_DM_REMRD, they're still referenced by
>> __apic_accept_irq() for trace_kvm_apic_accept_irq(). Fully initialize
>> the structure to avoid consuming random stack memory.
>>
>> Fixes: a183b638b61c ("KVM: x86: make apic_accept_irq tracepoint more generic")
>> Reported-by: syzbot+d6caa905917d353f0d07@syzkaller.appspotmail.com
>> Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
>> ---
>> arch/x86/kvm/x86.c | 18 ++++++++++--------
>> 1 file changed, 10 insertions(+), 8 deletions(-)
>>
>> diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
>> index 567d13405445..8a98608dad4f 100644
>> --- a/arch/x86/kvm/x86.c
>> +++ b/arch/x86/kvm/x86.c
>> @@ -9340,15 +9340,17 @@ static int kvm_pv_clock_pairing(struct kvm_vcpu *vcpu, gpa_t paddr,
>> */
>> static void kvm_pv_kick_cpu_op(struct kvm *kvm, int apicid)
>> {
>> - struct kvm_lapic_irq lapic_irq;
>> -
>> - lapic_irq.shorthand = APIC_DEST_NOSHORT;
>> - lapic_irq.dest_mode = APIC_DEST_PHYSICAL;
>> - lapic_irq.level = 0;
>> - lapic_irq.dest_id = apicid;
>> - lapic_irq.msi_redir_hint = false;
>> + struct kvm_lapic_irq lapic_irq = {
>> + .vector = 0,
>> + .delivery_mode = APIC_DM_REMRD,
>> + .dest_mode = APIC_DEST_PHYSICAL,
>> + .level = false,
>> + .trig_mode = 0,
>> + .shorthand = APIC_DEST_NOSHORT,
>> + .dest_id = apicid,
>> + .msi_redir_hint = false
>> + };
>
> What if we rely on the compiler to zero-initialize omitted fields? E.g.
>
> /*
> * All other fields are unused for APIC_DM_REMRD, but may be consumed by
> * common code, e.g. for tracing. Defer initialization to the compiler.
> */
> struct kvm_lapic_irq lapic_irq = {
> .delivery_mode = APIC_DM_REMRD,
> .dest_mode = APIC_DEST_PHYSICAL,
> .shorthand = APIC_DEST_NOSHORT,
> .dest_id = apicid,
> };
>
> KVM doesn't actually care about the vector, level, trig_mode, etc... for its magic
> magic DM_REMRD, i.e. using 0/false is completely arbitrary.
Honestly, I just always forget whether zero-initializing of omitted
fields is a de-facto or de-jure standard. We don't care much whether
these fields are zero of not but some random values in tracing may
confuse an unprepared reader.
I'll send v2 with your amendment.
>
>>
>> - lapic_irq.delivery_mode = APIC_DM_REMRD;
>> kvm_irq_delivery_to_apic(kvm, NULL, &lapic_irq, NULL);
>> }
>>
>> --
>> 2.35.3
>>
>
--
Vitaly
prev parent reply other threads:[~2022-07-08 12:44 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-28 13:30 [PATCH] KVM: x86: Fully initialize 'struct kvm_lapic_irq' in kvm_pv_kick_cpu_op() Vitaly Kuznetsov
2022-07-07 17:34 ` Sean Christopherson
2022-07-08 12:44 ` Vitaly Kuznetsov [this message]
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=87r12vpye2.fsf@redhat.com \
--to=vkuznets@redhat.com \
--cc=jmattson@google.com \
--cc=kvm@vger.kernel.org \
--cc=linux-hyperv@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pbonzini@redhat.com \
--cc=seanjc@google.com \
--cc=wanpengli@tencent.com \
/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.