pci-devfn: check that device/slot number is within range

Need to check that guest slot/device number is not > 31 or walk off
the devfn table when checking if a devfn is available or not in a guest.

before this fix, passing in an addr=abc  or addr=34,
can crash qemu, sometimes fail gracefully if data past end
of devfn table fails the availability test.

with this fix, get clean error:
Property 'pci-assign.addr' doesn't take value '34'

also tested when no addr= param passed for guest (pcicfg) address,
and that worked as well.

Signed-off-by: Don Dutile <ddutile@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
Donald Dutile 2011-09-21 15:25:11 -04:00 committed by Anthony Liguori
parent c1d23eaccc
commit ffe3ce1173

View File

@ -524,6 +524,8 @@ static int parse_pci_devfn(DeviceState *dev, Property *prop, const char *str)
return -EINVAL; return -EINVAL;
if (fn > 7) if (fn > 7)
return -EINVAL; return -EINVAL;
if (slot > 31)
return -EINVAL;
*ptr = slot << 3 | fn; *ptr = slot << 3 | fn;
return 0; return 0;
} }