[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] memory corruption in HYPERVISOR_physdev_op()
On Fri, 2012-09-14 at 14:24 +0300, Dan Carpenter wrote: > Hi Jeremy, Jeremy doesn't work on Xen much any more. Adding Konrad and the xen-devel@ list. > My static analyzer complains about potential memory corruption in > HYPERVISOR_physdev_op() > > arch/x86/include/asm/xen/hypercall.h > 389 static inline int > 390 HYPERVISOR_physdev_op(int cmd, void *arg) > 391 { > 392 int rc = _hypercall2(int, physdev_op, cmd, arg); > 393 if (unlikely(rc == -ENOSYS)) { > 394 struct physdev_op op; > 395 op.cmd = cmd; > 396 memcpy(&op.u, arg, sizeof(op.u)); > 397 rc = _hypercall1(int, physdev_op_compat, &op); > 398 memcpy(arg, &op.u, sizeof(op.u)); > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > Some of the arg buffers are not as large as sizeof(op.u) which is either > 12 or 16 depending on the size of longs in struct physdev_apic. Nasty! > > 399 } > 400 return rc; > 401 } > > One example of this is in xen_initdom_restore_msi_irqs(). > > arch/x86/pci/xen.c > 337 struct physdev_pci_device restore_ext; > 338 > 339 restore_ext.seg = pci_domain_nr(dev->bus); > 340 restore_ext.bus = dev->bus->number; > 341 restore_ext.devfn = dev->devfn; > 342 ret = HYPERVISOR_physdev_op(PHYSDEVOP_restore_msi_ext, > 343 &restore_ext); > ^^^^^^^^^^^^ > There are only 4 bytes here. > > 344 if (ret == -ENOSYS) > ^^^^^^^^^^^^^^ > If we hit this condition, we have corrupted some memory. I can see the memory corruption but how does it relate to ret == -ENOSYS? > > 345 pci_seg_supported = false; > > regards, > dan carpenter > _______________________________________________ > Virtualization mailing list > Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx > https://lists.linuxfoundation.org/mailman/listinfo/virtualization > -- Ian Campbell Current Noise: Therapy? - Femtex Riffle West Virginia is so small that the Boy Scout had to double as the town drunk. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |