diff --git a/src/driver/slbt_driver_ctx.c b/src/driver/slbt_driver_ctx.c
index d03d1ed..bfb2206 100644
--- a/src/driver/slbt_driver_ctx.c
+++ b/src/driver/slbt_driver_ctx.c
@@ -11,6 +11,7 @@
 #include <stdbool.h>
 #include <fcntl.h>
 #include <spawn.h>
+#include <sys/mman.h>
 #include <sys/wait.h>
 
 #define ARGV_DRIVER
@@ -886,6 +887,11 @@ static void slbt_free_driver_ctx_impl(struct slbt_driver_ctx_alloc * ictx)
 	if (ictx->ctx.libname)
 		free(ictx->ctx.libname);
 
+	if (ictx->ctx.lconf.addr)
+		munmap(
+			ictx->ctx.lconf.addr,
+			ictx->ctx.lconf.size);
+
 	for (objlistp=ictx->ctx.objlistv; objlistp->name; objlistp++) {
 		free(objlistp->objv);
 		free(objlistp->addr);
diff --git a/src/internal/slibtool_driver_impl.h b/src/internal/slibtool_driver_impl.h
index f633adf..f563638 100644
--- a/src/internal/slibtool_driver_impl.h
+++ b/src/internal/slibtool_driver_impl.h
@@ -14,6 +14,7 @@
 
 #include <slibtool/slibtool.h>
 #include "slibtool_dprintf_impl.h"
+#include "slibtool_mapfile_impl.h"
 #include "argv/argv.h"
 
 #define SLBT_OPTV_ELEMENTS 128
@@ -124,6 +125,7 @@ struct slbt_driver_ctx_impl {
 	struct slbt_host_strs	host;
 	struct slbt_host_strs	ahost;
 	struct slbt_fd_ctx	fdctx;
+	struct slbt_map_info    lconf;
 	struct slbt_obj_list *	objlistv;
 
 	const struct slbt_archive_ctx * arctx;
diff --git a/src/internal/slibtool_lconf_impl.c b/src/internal/slibtool_lconf_impl.c
index b1bde60..da0ffdd 100644
--- a/src/internal/slibtool_lconf_impl.c
+++ b/src/internal/slibtool_lconf_impl.c
@@ -807,7 +807,8 @@ int slbt_get_lconf_flags(
 
 
 	/* all done */
-	munmap(addr,st.st_size);
+	ctx->lconf.addr = addr;
+	ctx->lconf.size = st.st_size;
 
 	return 0;
 }