Blame 0001-don-t-access-dlclose-d-dynamic-ioengine-object-after.patch

Eric Sandeen b11b07
From 79f488cbd95ca6989031a7ace5ec382313d31b3c Mon Sep 17 00:00:00 2001
Eric Sandeen b11b07
From: Eric Sandeen <esandeen@redhat.com>
Eric Sandeen b11b07
Date: Fri, 7 May 2021 16:13:05 -0500
Eric Sandeen b11b07
Subject: [PATCH] don't access dlclose'd dynamic ioengine object after close
Eric Sandeen b11b07
Eric Sandeen b11b07
Alexey reported this bug when using dynamically loaded IO engines;
Eric Sandeen b11b07
a segfault on the line where we set the dlhandle to NULL after
Eric Sandeen b11b07
the dlclose.
Eric Sandeen b11b07
Eric Sandeen b11b07
I think this is because ops points to the thing we obtained from dlsym:
Eric Sandeen b11b07
Eric Sandeen b11b07
	ops = dlsym(dlhandle, engine_lib);
Eric Sandeen b11b07
Eric Sandeen b11b07
and after the final dlclose, the object no longer exists and efforts
Eric Sandeen b11b07
to set the handle within it will fail for obvious reasons.
Eric Sandeen b11b07
I'm not sure why I hadn't seen this before.
Eric Sandeen b11b07
Eric Sandeen b11b07
Fixes-RH-Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1956963
Eric Sandeen b11b07
Reported-by: Alexey Dobriyan <adobriyan@gmail.com>
Eric Sandeen b11b07
Fixes: f6931a1 ("fio: move dynamic library handle to io_ops structure")
Eric Sandeen b11b07
Tested-by: Alexey Dobriyan <adobriyan@gmail.com>
Eric Sandeen b11b07
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Eric Sandeen b11b07
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Eric Sandeen b11b07
---
Eric Sandeen b11b07
 ioengines.c | 1 -
Eric Sandeen b11b07
 1 file changed, 1 deletion(-)
Eric Sandeen b11b07
Eric Sandeen b11b07
diff --git a/ioengines.c b/ioengines.c
Eric Sandeen b11b07
index 3561bb4e..dd61af07 100644
Eric Sandeen b11b07
--- a/ioengines.c
Eric Sandeen b11b07
+++ b/ioengines.c
Eric Sandeen b11b07
@@ -234,7 +234,6 @@ void free_ioengine(struct thread_data *td)
Eric Sandeen b11b07
 	if (td->io_ops->dlhandle) {
Eric Sandeen b11b07
 		dprint(FD_IO, "dlclose ioengine %s\n", td->io_ops->name);
Eric Sandeen b11b07
 		dlclose(td->io_ops->dlhandle);
Eric Sandeen b11b07
-		td->io_ops->dlhandle = NULL;
Eric Sandeen b11b07
 	}
Eric Sandeen b11b07
 
Eric Sandeen b11b07
 	td->io_ops = NULL;
Eric Sandeen b11b07
-- 
Eric Sandeen b11b07
2.26.2
Eric Sandeen b11b07