If we change obj_rtld.path after initialising __progname, make sure we
authorJoerg Sonnenberger <joerg@dragonflybsd.org>
Fri, 4 Feb 2005 01:23:16 +0000 (01:23 +0000)
committerJoerg Sonnenberger <joerg@dragonflybsd.org>
Fri, 4 Feb 2005 01:23:16 +0000 (01:23 +0000)
change __progname to point at the new storage otherwise it ends up
pointing at freed memory which leads to confusing garbled error messages.

rtld.c, 1.95
Obtained-from: FreeBSD

libexec/rtld-elf/rtld.c

index 6c42e53..b123b78 100644 (file)
@@ -24,7 +24,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  * $FreeBSD: src/libexec/rtld-elf/rtld.c,v 1.43.2.15 2003/02/20 20:42:46 kan Exp $
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  * $FreeBSD: src/libexec/rtld-elf/rtld.c,v 1.43.2.15 2003/02/20 20:42:46 kan Exp $
- * $DragonFly: src/libexec/rtld-elf/rtld.c,v 1.10 2005/02/04 01:06:05 joerg Exp $
+ * $DragonFly: src/libexec/rtld-elf/rtld.c,v 1.11 2005/02/04 01:23:16 joerg Exp $
  */
 
 /*
  */
 
 /*
@@ -371,6 +371,7 @@ _rtld(Elf_Addr *sp, func_ptr_type *exit_proc, Obj_Entry **objp)
       strcmp(obj_main->interp, obj_rtld.path) != 0) {
        free(obj_rtld.path);
        obj_rtld.path = xstrdup(obj_main->interp);
       strcmp(obj_main->interp, obj_rtld.path) != 0) {
        free(obj_rtld.path);
        obj_rtld.path = xstrdup(obj_main->interp);
+       __progname = obj_rtld.path;
     }
 
     digest_dynamic(obj_main);
     }
 
     digest_dynamic(obj_main);