When the INTERP program header contains a simple name with no slash, don't
crash trying to dereference a NULL pointer, but rather set _dl_ldsopath to ".".
---
ldso/ldso/ldso.c | 22 ++++++++++++++--------
1 files changed, 14 insertions(+), 8 deletions(-)
diff --git a/ldso/ldso/ldso.c b/ldso/ldso/ldso.c
index 0dff978..371a650 100644
--- a/ldso/ldso/ldso.c
+++ b/ldso/ldso/ldso.c
@@ -580,10 +580,13 @@ of this helper program; chances are you did not intend to
run this program.\n\
/* Store the path where the shared lib loader was found
* for later use
*/
- _dl_ldsopath = _dl_strdup(tpnt->libname);
- ptmp = _dl_strrchr(_dl_ldsopath, '/');
- if (ptmp != _dl_ldsopath)
- *ptmp = '\0';
+ ptmp = _dl_strrchr(tpnt->libname);
+ if (ptmp != NULL) {
+ _dl_ldsopath = _dl_strdup(tpnt->libname);
+ if (ptmp != tpnt->libname)
+ _dl_ldsopath[ptmp - tpnt->libname] =
'\0';
+ } else
+ _dl_ldsopath = _dl_strdup(".");
_dl_debug_early("Lib Loader: (%x) %s\n", (unsigned)
DL_LOADADDR_BASE(tpnt->loadaddr), tpnt->libname);
}
@@ -694,10 +697,13 @@ of this helper program; chances are you did not intend to
run this program.\n\
/* Store the path where the shared lib loader
was found
* for later use
*/
- _dl_ldsopath = _dl_strdup(tpnt->libname);
- ptmp = _dl_strrchr(_dl_ldsopath, '/');
- if (ptmp != _dl_ldsopath)
- *ptmp = '\0';
+ ptmp = _dl_strrchr(tpnt->libname);
+ if (ptmp != NULL) {
+ _dl_ldsopath =
_dl_strdup(tpnt->libname);
+ if (ptmp != tpnt->libname)
+ _dl_ldsopath[ptmp -
tpnt->libname] = '\0';
+ } else
+ _dl_ldsopath = _dl_strdup(".");
}
_dl_debug_early("Lib Loader: (%x) %s\n", (unsigned)
DL_LOADADDR_BASE(tpnt->loadaddr), tpnt->libname);
#endif
--
1.7.5.4
_______________________________________________
uClibc mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/uclibc