From 2f700ca965a04c4a03b6f760da6a210b6ca4df4b Mon Sep 17 00:00:00 2001 From: Kyle Evans Date: Thu, 6 Jul 2023 19:41:14 -0500 Subject: [PATCH] libbe: bail out early if the zfs kmod isn't loaded As noted in the comment, we already know the rest of libbe_init() will fail because there's no pool imported. Avoid the side effect by checking beforehand and bailing out early. With this, freebsd-update(8) should no longer trigger a load of the zfs kmod just because it runs `bectl check`. Reviewed by: jwmaag_gmail.com, rew Differential Revision: https://reviews.freebsd.org/D36188 --- lib/libbe/be.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/lib/libbe/be.c b/lib/libbe/be.c index c4dec043fcb..753fde746e3 100644 --- a/lib/libbe/be.c +++ b/lib/libbe/be.c @@ -29,6 +29,7 @@ __FBSDID("$FreeBSD$"); #include +#include #include #include #include @@ -119,6 +120,16 @@ libbe_init(const char *root) lbh = NULL; poolname = pos = NULL; + /* + * If the zfs kmod's not loaded then the later libzfs_init() will load + * the module for us, but that's not desirable for a couple reasons. If + * the module's not loaded, there's no pool imported and we're going to + * fail anyways. We also don't really want libbe consumers to have that + * kind of side-effect (module loading) in the general case. + */ + if (modfind("zfs") < 0) + goto err; + if ((lbh = calloc(1, sizeof(libbe_handle_t))) == NULL) goto err;