|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH RFC] tools/kdd: avoid adversarial optimisation hazard
On Fri, Aug 03, 2018 at 10:54:19AM +0100, Tim Deegan wrote:
> 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):
Yes the following diff works with the buggy compiler.
>
> 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 |