mirror of https://github.com/xemu-project/xemu.git
stellaris_enet: block migration
Incoming migration with stellaris_enet is unsafe. It's being reworked, but for now, simply block it since noone is using it anyway. Block outgoing migration for good measure. CVE-2013-4532 Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
This commit is contained in:
parent
2003205fd2
commit
73d8965bcc
|
@ -8,6 +8,7 @@
|
||||||
*/
|
*/
|
||||||
#include "hw/sysbus.h"
|
#include "hw/sysbus.h"
|
||||||
#include "net/net.h"
|
#include "net/net.h"
|
||||||
|
#include "migration/migration.h"
|
||||||
#include <zlib.h>
|
#include <zlib.h>
|
||||||
|
|
||||||
//#define DEBUG_STELLARIS_ENET 1
|
//#define DEBUG_STELLARIS_ENET 1
|
||||||
|
@ -75,6 +76,7 @@ typedef struct {
|
||||||
NICConf conf;
|
NICConf conf;
|
||||||
qemu_irq irq;
|
qemu_irq irq;
|
||||||
MemoryRegion mmio;
|
MemoryRegion mmio;
|
||||||
|
Error *migration_blocker;
|
||||||
} stellaris_enet_state;
|
} stellaris_enet_state;
|
||||||
|
|
||||||
static void stellaris_enet_update(stellaris_enet_state *s)
|
static void stellaris_enet_update(stellaris_enet_state *s)
|
||||||
|
@ -361,7 +363,7 @@ static int stellaris_enet_load(QEMUFile *f, void *opaque, int version_id)
|
||||||
stellaris_enet_state *s = (stellaris_enet_state *)opaque;
|
stellaris_enet_state *s = (stellaris_enet_state *)opaque;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (version_id != 1)
|
if (1)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
s->ris = qemu_get_be32(f);
|
s->ris = qemu_get_be32(f);
|
||||||
|
@ -422,6 +424,10 @@ static int stellaris_enet_init(SysBusDevice *sbd)
|
||||||
stellaris_enet_reset(s);
|
stellaris_enet_reset(s);
|
||||||
register_savevm(dev, "stellaris_enet", -1, 1,
|
register_savevm(dev, "stellaris_enet", -1, 1,
|
||||||
stellaris_enet_save, stellaris_enet_load, s);
|
stellaris_enet_save, stellaris_enet_load, s);
|
||||||
|
|
||||||
|
error_setg(&s->migration_blocker,
|
||||||
|
"stellaris_enet does not support migration");
|
||||||
|
migrate_add_blocker(s->migration_blocker);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -429,6 +435,9 @@ static void stellaris_enet_unrealize(DeviceState *dev, Error **errp)
|
||||||
{
|
{
|
||||||
stellaris_enet_state *s = STELLARIS_ENET(dev);
|
stellaris_enet_state *s = STELLARIS_ENET(dev);
|
||||||
|
|
||||||
|
migrate_del_blocker(s->migration_blocker);
|
||||||
|
error_free(s->migration_blocker);
|
||||||
|
|
||||||
unregister_savevm(DEVICE(s), "stellaris_enet", s);
|
unregister_savevm(DEVICE(s), "stellaris_enet", s);
|
||||||
|
|
||||||
memory_region_destroy(&s->mmio);
|
memory_region_destroy(&s->mmio);
|
||||||
|
|
Loading…
Reference in New Issue