summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordrahn <drahn@openbsd.org>2010-11-16 18:59:00 +0000
committerdrahn <drahn@openbsd.org>2010-11-16 18:59:00 +0000
commitfd9483d7fba10a36a06c98f09d83c62056d26679 (patch)
treeb3f6d28b815acac49419726a026e2e8b586d65e2
parentperiodically measure temperature and redo LC calibration if temperature (diff)
downloadwireguard-openbsd-fd9483d7fba10a36a06c98f09d83c62056d26679.tar.xz
wireguard-openbsd-fd9483d7fba10a36a06c98f09d83c62056d26679.zip
Fix error message when ld.so ends up loading a different than expected
library, but other library needs the one loaded. mostly ok kurt@
-rw-r--r--libexec/ld.so/library.c4
-rw-r--r--libexec/ld.so/library_mquery.c5
-rw-r--r--libexec/ld.so/library_subr.c10
3 files changed, 8 insertions, 11 deletions
diff --git a/libexec/ld.so/library.c b/libexec/ld.so/library.c
index d8c3ba8c1ea..87dc3fde2f5 100644
--- a/libexec/ld.so/library.c
+++ b/libexec/ld.so/library.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: library.c,v 1.59 2010/10/25 20:34:44 kurt Exp $ */
+/* $OpenBSD: library.c,v 1.60 2010/11/16 18:59:00 drahn Exp $ */
/*
* Copyright (c) 2002 Dale Rahn
@@ -38,6 +38,7 @@
#include "syscall.h"
#include "archdep.h"
#include "resolve.h"
+#include "sod.h"
#define PFLAGS(X) ((((X) & PF_R) ? PROT_READ : 0) | \
(((X) & PF_W) ? PROT_WRITE : 0) | \
@@ -242,6 +243,7 @@ _dl_tryload_shlib(const char *libname, int type, int flags)
object->dev = sb.st_dev;
object->inode = sb.st_ino;
object->obj_flags |= flags;
+ _dl_build_sod(object->load_name, &object->sod);
} else {
/* XXX not possible. object cannot come back NULL */
_dl_munmap((void *)libaddr, maxva - minva);
diff --git a/libexec/ld.so/library_mquery.c b/libexec/ld.so/library_mquery.c
index 13160933689..fb5366b9e4e 100644
--- a/libexec/ld.so/library_mquery.c
+++ b/libexec/ld.so/library_mquery.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: library_mquery.c,v 1.37 2010/10/25 20:34:44 kurt Exp $ */
+/* $OpenBSD: library_mquery.c,v 1.38 2010/11/16 18:59:00 drahn Exp $ */
/*
* Copyright (c) 2002 Dale Rahn
@@ -38,6 +38,7 @@
#include "syscall.h"
#include "archdep.h"
#include "resolve.h"
+#include "sod.h"
#define PFLAGS(X) ((((X) & PF_R) ? PROT_READ : 0) | \
(((X) & PF_W) ? PROT_WRITE : 0) | \
@@ -280,7 +281,7 @@ retry:
object->dev = sb.st_dev;
object->inode = sb.st_ino;
object->obj_flags |= flags;
-
+ _dl_build_sod(object->load_name, &object->sod);
} else {
/* XXX no point. object is never returned NULL */
_dl_load_list_free(lowld);
diff --git a/libexec/ld.so/library_subr.c b/libexec/ld.so/library_subr.c
index 29015e6e738..8b9723db6be 100644
--- a/libexec/ld.so/library_subr.c
+++ b/libexec/ld.so/library_subr.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: library_subr.c,v 1.32 2010/10/25 20:34:44 kurt Exp $ */
+/* $OpenBSD: library_subr.c,v 1.33 2010/11/16 18:59:00 drahn Exp $ */
/*
* Copyright (c) 2002 Dale Rahn
@@ -439,14 +439,8 @@ done:
sod.sod_name, sod.sod_major,
req_sod.sod_minor, sod.sod_minor);
object = _dl_tryload_shlib(hint, type, flags);
- if (object) {
- object->sod = req_sod;
- } else {
- _dl_free((char *)sod.sod_name);
- }
- } else {
- _dl_free((char *)sod.sod_name);
}
+ _dl_free((char *)sod.sod_name);
return(object);
}