mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-23 14:15:28 +00:00
Honor blacklist for modprobe command
https://bugzilla.redhat.com/show_bug.cgi?id=1045124 When loading modules, libvirt does not honor the modprobe blacklist. Use the new virKModLoad() API in order to attempt load with blacklist check. Use the new virKModIsBlacklisted() API to check if the failure to load was due to the blacklist Signed-off-by: John Ferlan <jferlan@redhat.com>
This commit is contained in:
parent
02bf6568f4
commit
19259574d5
@ -42,6 +42,7 @@
|
||||
#include "vircommand.h"
|
||||
#include "virerror.h"
|
||||
#include "virfile.h"
|
||||
#include "virkmod.h"
|
||||
#include "virstring.h"
|
||||
#include "virutil.h"
|
||||
|
||||
@ -990,18 +991,32 @@ recheck:
|
||||
VIR_FREE(drvpath);
|
||||
|
||||
if (!probed) {
|
||||
const char *const probecmd[] = { MODPROBE, driver, NULL };
|
||||
char *errbuf = NULL;
|
||||
probed = true;
|
||||
if (virRun(probecmd, NULL) < 0) {
|
||||
char ebuf[1024];
|
||||
VIR_WARN("failed to load driver %s: %s", driver,
|
||||
virStrerror(errno, ebuf, sizeof(ebuf)));
|
||||
return -1;
|
||||
if ((errbuf = virKModLoad(driver, true))) {
|
||||
VIR_WARN("failed to load driver %s: %s", driver, errbuf);
|
||||
VIR_FREE(errbuf);
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
goto recheck;
|
||||
}
|
||||
|
||||
cleanup:
|
||||
/* If we know failure was because of blacklist, let's report that;
|
||||
* otherwise, report a more generic failure message
|
||||
*/
|
||||
if (virKModIsBlacklisted(driver)) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("Failed to load PCI stub module %s: "
|
||||
"administratively prohibited"),
|
||||
driver);
|
||||
} else {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("Failed to load PCI stub module %s"),
|
||||
driver);
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -1312,12 +1327,8 @@ virPCIDeviceDetach(virPCIDevicePtr dev,
|
||||
virPCIDeviceList *activeDevs,
|
||||
virPCIDeviceList *inactiveDevs)
|
||||
{
|
||||
if (virPCIProbeStubDriver(dev->stubDriver) < 0) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("Failed to load PCI stub module %s"),
|
||||
dev->stubDriver);
|
||||
if (virPCIProbeStubDriver(dev->stubDriver) < 0)
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (activeDevs && virPCIDeviceListFind(activeDevs, dev)) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
|
Loading…
Reference in New Issue
Block a user