|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH RFC] tools/kdd: avoid adversarial optimisation hazard
Hi,
Apologies for the delay. Several of my other hats were on fire.
> > I suspect the address, from which offset is derived, is bounded. But I
> > haven't found the spec for KD.
>
> I don’t think there is one.
Indeed not. The official way to extend windbg &c is to write a plugin
that runs on the Windows machine where you run the debugger.
At 13:37 +0100 on 26 Jul (1532612265), Ian Jackson wrote:
> It's still very obscure becaause this test
>
> if (offset > sizeof ctrl.c32 || offset + len > sizeof ctrl.c32) {
>
> depends critically on the size of offset, etc.
>
> Is it not still possible that this test could be fooled ? Suppose
> offset is 0xffffffff. Then before the test, offset is 0xfffffd33.
This is > sizeof ctrl.c32. But:
> This kind of reasoning is awful. The code should be rewritten so that
> it is obvious that it won't go wrong.
Yes. How about this (compile tested only, and I haven't checked the buggy
gcc versions):
diff --git a/tools/debugger/kdd/kdd.c b/tools/debugger/kdd/kdd.c
index 5a019a0a0c..64aacde1ee 100644
--- a/tools/debugger/kdd/kdd.c
+++ b/tools/debugger/kdd/kdd.c
@@ -687,11 +687,11 @@ static void kdd_handle_read_ctrl(kdd_state *s)
}
} else {
/* 32-bit control-register space starts at 0x[2]cc, for 84 bytes */
- uint32_t offset = addr;
- if (offset > 0x200)
- offset -= 0x200;
- offset -= 0xcc;
- if (offset > sizeof ctrl.c32 || offset + len > sizeof ctrl.c32) {
+ uint32_t offset = addr - 0xcc;
+ if (offset > sizeof ctrl.c32)
+ offset = addr - 0x2cc;
+ if (offset > sizeof ctrl.c32
+ || len > sizeof ctrl.c32 - offset) {
KDD_LOG(s, "Request outside of known control space\n");
len = 0;
} else {
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |