Am 03.03.2013 06:30, schrieb Peter Crosthwaite: > In certain cases a device model can init with neither a Device::realize or > SysBusDevice::init (i.e. when its possible to do everything in Object::init). > In this case, the device model should be able to leave both SysBusDevice::init > and Device::realize as NULL. However what happens in this case in SysBus's > default Device::realize function will try and call SysBusDevice::init without > checking if it actually exists. A segfault ensues. > > Fix by guarding the call to SysBusDevice::init against a NULL pointer. If no > pointer is defined return 0 without action. > > Signed-off-by: Peter Crosthwaite <peter.crosthwa...@xilinx.com>
While the patch is correct, I believe PMM already posted one using an extra if two weeks ago as part of some series... Andreas > --- > hw/sysbus.c | 2 +- > 1 files changed, 1 insertions(+), 1 deletions(-) > > diff --git a/hw/sysbus.c b/hw/sysbus.c > index 6d9d1df..72b309a 100644 > --- a/hw/sysbus.c > +++ b/hw/sysbus.c > @@ -118,7 +118,7 @@ static int sysbus_device_init(DeviceState *dev) > SysBusDevice *sd = SYS_BUS_DEVICE(dev); > SysBusDeviceClass *sbc = SYS_BUS_DEVICE_GET_CLASS(sd); > > - return sbc->init(sd); > + return sbc->init ? sbc->init(sd) : 0; > } > > DeviceState *sysbus_create_varargs(const char *name, > -- SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg