From owner-freebsd-bugs@FreeBSD.ORG Wed Mar 9 21:00:10 2005 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id F010116A4CE for ; Wed, 9 Mar 2005 21:00:09 +0000 (GMT) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id A76D043D58 for ; Wed, 9 Mar 2005 21:00:09 +0000 (GMT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.3/8.13.3) with ESMTP id j29L095P088159 for ; Wed, 9 Mar 2005 21:00:09 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.13.3/8.13.1/Submit) id j29L097b088158; Wed, 9 Mar 2005 21:00:09 GMT (envelope-from gnats) Resent-Date: Wed, 9 Mar 2005 21:00:09 GMT Resent-Message-Id: <200503092100.j29L097b088158@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Jean-Yves Lefort Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id AB4F516A4CE for ; Wed, 9 Mar 2005 20:58:41 +0000 (GMT) Received: from gateway.lefort.net (212.68.242.177.brutele.be [212.68.242.177]) by mx1.FreeBSD.org (Postfix) with ESMTP id 2D38743D2D for ; Wed, 9 Mar 2005 20:58:41 +0000 (GMT) (envelope-from jylefort@brutele.be) Received: from jsite.lefort.net (jsite.lefort.net [192.168.1.2]) by gateway.lefort.net (Postfix) with ESMTP id D017E549A for ; Wed, 9 Mar 2005 21:58:39 +0100 (CET) Received: by jsite.lefort.net (Postfix, from userid 1000) id 799348380; Wed, 9 Mar 2005 21:58:39 +0100 (CET) Message-Id: <20050309205839.799348380@jsite.lefort.net> Date: Wed, 9 Mar 2005 21:58:39 +0100 (CET) From: Jean-Yves Lefort To: FreeBSD-gnats-submit@FreeBSD.org X-Send-Pr-Version: 3.113 Subject: bin/78646: [patch] libmap should canonicalize pathnames before matching them against constraints X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list Reply-To: Jean-Yves Lefort List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 09 Mar 2005 21:00:10 -0000 >Number: 78646 >Category: bin >Synopsis: [patch] libmap should canonicalize pathnames before matching them against constraints >Confidential: no >Severity: non-critical >Priority: medium >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Wed Mar 09 21:00:09 GMT 2005 >Closed-Date: >Last-Modified: >Originator: Jean-Yves Lefort >Release: FreeBSD 5.3-RELEASE-p5 i386 >Organization: >Environment: System: FreeBSD jsite.lefort.net 5.3-RELEASE-p5 FreeBSD 5.3-RELEASE-p5 #0: Mon Feb 14 18:06:40 CET 2005 jylefort@jsite.lefort.net:/usr/obj/usr/src/sys/JSITE i386 >Description: lm_find() should canonicalize the pathname it passes to lmp_find(), in order to follow symbolic links, etc. >How-To-Repeat: [/foo1/bar.so] lib.so replacement.so If /foo2/bar.so (a symlink to /foo1/bar.so) is dlopen()ed, the libmap.conf mapping will not be honoured, because libmap matches /foo2/bar.so instead of /foo1/bar.so. >Fix: --- libexec/rtld-elf/libmap.c.orig Wed Mar 9 21:17:50 2005 +++ libexec/rtld-elf/libmap.c Wed Mar 9 21:19:05 2005 @@ -8,6 +8,7 @@ #include #include #include +#include #include "debug.h" #include "rtld.h" @@ -200,15 +201,24 @@ dbg("%s(\"%s\", \"%s\")", __func__, p, f); - if (p != NULL && (lml = lmp_find(p)) != NULL) { - t = lml_find(lml, f); - if (t != NULL) { - /* - * Add a global mapping if we have - * a successful constrained match. - */ - lm_add(NULL, f, t); - return (t); + if (p != NULL) { + char *rp; + char rpbuf[PATH_MAX]; + + rp = realpath(p, rpbuf); + if (rp != NULL) + p = rp; + + if ((lml = lmp_find(p)) != NULL) { + t = lml_find(lml, f); + if (t != NULL) { + /* + * Add a global mapping if we have + * a successful constrained match. + */ + lm_add(NULL, f, t); + return (t); + } } } lml = lmp_find("$DEFAULT$"); >Release-Note: >Audit-Trail: >Unformatted: