Re: Causing VMEXITs when kprobes are hit in the guest VM

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

 



Thank you for your answer, Sean.

I think I now have a fair idea on how to proceed. I will re-inject the
#BP into the guest from KVM and see what happens. I'm hoping the guest
will handle the #BP and continue execution without me needing to make
any more changes.

Best Regards,
Arnabjyoti Kalita

On Wed, May 11, 2022 at 8:34 PM Sean Christopherson <seanjc@xxxxxxxxxx> wrote:
>
> On Wed, May 11, 2022, Arnabjyoti Kalita wrote:
> > What could be the various ways a guest could handle #BP?
>
> The kernel uses INT3 to patch instructions/flows, e.g. for alternatives.  For those,
> the INT3 handler will unwind to the original RIP and retry.  The #BP will keep
> occurring until the patching completes.  See text_poke_bp_batch(), poke_int3_handler(),
> etc...
>
> Userspace debuggers will do something similar; after catching the #BP, the original
> instruction is restored and restarted.
>
> The reason INT3 is a single byte is so that software can "atomically" trap/patch an
> instruction without having to worry about cache line splits.  CPUs are guaranteed
> to either see the INT3 or the original instruction in its entirety, i.e. other CPUs
> will never decode a half-baked instruction.
>
> The kernel has even fancier uses for things like static_call(), e.g. emulating
> CALL, RET, and JMP from the #BP handler.
>
> > Can we "make" the guest skip the instruction that caused the #BP ?
>
> Well, technically yes, that's effectively what would happen if the host skips the
> INT3 and doesn't inject the #BP.  Can you do that and expect the guest not to
> crash?  Nope.



[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