summaryrefslogtreecommitdiff
path: root/src/loader
diff options
context:
space:
mode:
authorJames Jones <jajones@nvidia.com>2021-07-09 08:40:19 -0700
committerMarge Bot <eric+marge@anholt.net>2021-07-13 07:36:17 +0000
commitb2252de03e655aecff0f10573f8c541470775128 (patch)
tree03fd2bafd6f1fcd920ca59c9aab6ca71d8091e36 /src/loader
parentb97cd93b3527b60355ce69e22585addbc8e9f4dd (diff)
loader: Handle failure to load DRI driver library
I factored out the chunk of loader code that dlopen()s libraries from the rest of the DRI driver loader function in this commit: commit bc343154f816b637b200933e1c1a35db19f478ef Author: James Jones <jajones@nvidia.com> Date: Thu Apr 22 23:17:08 2021 -0700 loader: Factor out driver library loading code However, I failed to adjust the DRI loader function that now uses the new helper function to handle the case where the requested DRI library is not found. This change restores the prior behavior, and also ensures loader_open_driver() consistently returns NULL in the out_driver_handle parameter on failure. Fixes: bc343154f816 ("loader: Factor out driver library loading code") Signed-off-by: James Jones <jajones@nvidia.com> Reviewed-by: Adam Jackson <ajax@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11807>
Diffstat (limited to 'src/loader')
-rw-r--r--src/loader/loader.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/loader/loader.c b/src/loader/loader.c
index b4a3ca7fbea..08eeb61504b 100644
--- a/src/loader/loader.c
+++ b/src/loader/loader.c
@@ -612,6 +612,9 @@ loader_open_driver(const char *driver_name,
void *driver = loader_open_driver_lib(driver_name, "_dri", search_path_vars,
DEFAULT_DRIVER_DIR, true);
+ if (!driver)
+ goto failed;
+
get_extensions_name = loader_get_extensions_name(driver_name);
if (get_extensions_name) {
get_extensions = dlsym(driver, get_extensions_name);
@@ -630,8 +633,10 @@ loader_open_driver(const char *driver_name,
log_(_LOADER_WARNING,
"MESA-LOADER: driver exports no extensions (%s)\n", dlerror());
dlclose(driver);
+ driver = NULL;
}
+failed:
*out_driver_handle = driver;
return extensions;
}