[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] KVM: x86: do not fail if software breakpoint has already bee
From: |
Maxim Levitsky |
Subject: |
Re: [PATCH] KVM: x86: do not fail if software breakpoint has already been removed |
Date: |
Mon, 01 Mar 2021 14:56:40 +0200 |
User-agent: |
Evolution 3.36.5 (3.36.5-2.fc32) |
On Mon, 2021-03-01 at 12:17 +0100, Paolo Bonzini wrote:
> If kvm_arch_remove_sw_breakpoint finds that a software breakpoint does not
> have an INT3 instruction, it fails. This can happen if one sets a
> software breakpoint in a kernel module and then reloads it. gdb then
> thinks the breakpoint cannot be deleted and there is no way to add it
> back.
>
> Suggested-by: Maxim Levitsky <mlevitsk@redhat.com>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
> target/i386/kvm/kvm.c | 9 +++++++--
> 1 file changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/target/i386/kvm/kvm.c b/target/i386/kvm/kvm.c
> index 0b5755e42b..c8d61daf68 100644
> --- a/target/i386/kvm/kvm.c
> +++ b/target/i386/kvm/kvm.c
> @@ -4352,8 +4352,13 @@ int kvm_arch_remove_sw_breakpoint(CPUState *cs, struct
> kvm_sw_breakpoint *bp)
> {
> uint8_t int3;
>
> - if (cpu_memory_rw_debug(cs, bp->pc, &int3, 1, 0) || int3 != 0xcc ||
> - cpu_memory_rw_debug(cs, bp->pc, (uint8_t *)&bp->saved_insn, 1, 1)) {
> + if (cpu_memory_rw_debug(cs, bp->pc, &int3, 1, 0)) {
> + return -EINVAL;
> + }
> + if (int3 != 0xcc) {
> + return 0;
> + }
> + if (cpu_memory_rw_debug(cs, bp->pc, (uint8_t *)&bp->saved_insn, 1, 1)) {
> return -EINVAL;
> }
> return 0;
There still remains a philosopical question if kvm_arch_remove_sw_breakpoint
should always return 0, since for the usual case of kernel debugging where
a breakpoint is in unloaded module, the above will probably still fail
as paging for this module is removed as well by the kernel.
It is still better though so:
Reviewed-by: Maxim Levitsky <mlevitsk@redhat.com>
Note that I managed to make lx-symbols to work in a very stable way
with attached WIP patch I hacked on this Sunday.
I will send a cleaned up version of it to upstream when I have time.
Since I make gdb unload the symbols, it works even without this patch.
Added Stefano Garzarella to CC as I know that he tried to make this work as
well.
https://lkml.org/lkml/2020/10/5/514
Best regards,
Maxim Levitsky
fix-lx-symbols.diff
Description: Text Data
- [PATCH] KVM: x86: do not fail if software breakpoint has already been removed, Paolo Bonzini, 2021/03/01
- Re: [PATCH] KVM: x86: do not fail if software breakpoint has already been removed,
Maxim Levitsky <=
- Re: [PATCH] KVM: x86: do not fail if software breakpoint has already been removed, Stefano Garzarella, 2021/03/02
- Re: [PATCH] KVM: x86: do not fail if software breakpoint has already been removed, Maxim Levitsky, 2021/03/03
- Re: [PATCH] KVM: x86: do not fail if software breakpoint has already been removed, Stefano Garzarella, 2021/03/04
- Re: [PATCH] KVM: x86: do not fail if software breakpoint has already been removed, Maxim Levitsky, 2021/03/11
- Re: [PATCH] KVM: x86: do not fail if software breakpoint has already been removed, Stefano Garzarella, 2021/03/12
- Re: [PATCH] KVM: x86: do not fail if software breakpoint has already been removed, Maxim Levitsky, 2021/03/12