mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 05:35:25 +00:00
virPCIDeviceGetVPD: Fix multiple error handling bugs
- fix passing of 'errno' to 'virReportSystemError' The 'open' syscall returns '-1' and sets 'errno' on failure. The code passed '-fd' as 'errno' rather than errno itself, thus always reporting EPERM. - don't overwrite errors when closing FD Use VIR_AUTOCLOSE to avoid overwriting the errors from virPCIVPDParse. Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
3ca1079318
commit
bac86dd36e
@ -3103,28 +3103,21 @@ virPCIDeviceHasVPD(virPCIDevice *dev)
|
|||||||
virPCIVPDResource *
|
virPCIVPDResource *
|
||||||
virPCIDeviceGetVPD(virPCIDevice *dev)
|
virPCIDeviceGetVPD(virPCIDevice *dev)
|
||||||
{
|
{
|
||||||
g_autofree char *vpdPath = NULL;
|
g_autofree char *vpdPath = virPCIFile(dev->name, "vpd");
|
||||||
int fd;
|
VIR_AUTOCLOSE fd = -1;
|
||||||
g_autoptr(virPCIVPDResource) res = NULL;
|
|
||||||
|
|
||||||
vpdPath = virPCIFile(dev->name, "vpd");
|
|
||||||
if (!virPCIDeviceHasVPD(dev)) {
|
if (!virPCIDeviceHasVPD(dev)) {
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR, _("Device %1$s does not have a VPD"),
|
virReportError(VIR_ERR_INTERNAL_ERROR, _("Device %1$s does not have a VPD"),
|
||||||
virPCIDeviceGetName(dev));
|
virPCIDeviceGetName(dev));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((fd = open(vpdPath, O_RDONLY)) < 0) {
|
if ((fd = open(vpdPath, O_RDONLY)) < 0) {
|
||||||
virReportSystemError(-fd, _("Failed to open a VPD file '%1$s'"), vpdPath);
|
virReportSystemError(errno, _("Failed to open a VPD file '%1$s'"), vpdPath);
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
res = virPCIVPDParse(fd);
|
|
||||||
|
|
||||||
if (VIR_CLOSE(fd) < 0) {
|
|
||||||
virReportSystemError(errno, _("Unable to close the VPD file, fd: %1$d"), fd);
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return g_steal_pointer(&res);
|
return virPCIVPDParse(fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
Loading…
Reference in New Issue
Block a user