[libvirt] [PATCH v3 3/3] Honor blacklist for modprobe command
Ján Tomko
jtomko at redhat.com
Tue Feb 4 11:06:09 UTC 2014
On 01/30/2014 06:50 PM, John Ferlan wrote:
> 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 at redhat.com>
> ---
> src/util/virpci.c | 28 +++++++++++++++++++---------
> 1 file changed, 19 insertions(+), 9 deletions(-)
>
> diff --git a/src/util/virpci.c b/src/util/virpci.c
> index e2d222e..41735eb 100644
> --- a/src/util/virpci.c
> +++ b/src/util/virpci.c
> @@ -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,26 @@ 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;
> }
>
> + /* If we know failure was because of blacklist, let's report that */
> + if (virKModIsBlacklisted(driver)) {
> + virReportError(VIR_ERR_INTERNAL_ERROR,
> + _("Failed to load PCI stub module %s: "
> + "administratively prohibited"),
> + driver);
> + }
> +
> +cleanup:
> return -1;
> }
>
> @@ -1313,9 +1322,10 @@ virPCIDeviceDetach(virPCIDevicePtr dev,
> virPCIDeviceList *inactiveDevs)
> {
> if (virPCIProbeStubDriver(dev->stubDriver) < 0) {
> - virReportError(VIR_ERR_INTERNAL_ERROR,
> - _("Failed to load PCI stub module %s"),
> - dev->stubDriver);
> + if (virGetLastError() == NULL)
This seems to be the only caller of virPCIProbeStubDriver.
You could just report the error unconditionally inside it.
> + virReportError(VIR_ERR_INTERNAL_ERROR,
> + _("Failed to load PCI stub module %s"),
> + dev->stubDriver);
> return -1;
> }
>
>
Jan
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20140204/c8247926/attachment-0001.sig>
More information about the libvir-list
mailing list