From owner-svn-src-head@freebsd.org Wed Sep 6 16:24:35 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 93291E0AAEB; Wed, 6 Sep 2017 16:24:35 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4E8C53290; Wed, 6 Sep 2017 16:24:35 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v86GOYp6036205; Wed, 6 Sep 2017 16:24:34 GMT (envelope-from markj@FreeBSD.org) Received: (from markj@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v86GOY1H036202; Wed, 6 Sep 2017 16:24:34 GMT (envelope-from markj@FreeBSD.org) Message-Id: <201709061624.v86GOY1H036202@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: markj set sender to markj@FreeBSD.org using -f From: Mark Johnston Date: Wed, 6 Sep 2017 16:24:34 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r323227 - head/lib/libproc X-SVN-Group: head X-SVN-Commit-Author: markj X-SVN-Commit-Paths: head/lib/libproc X-SVN-Commit-Revision: 323227 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 06 Sep 2017 16:24:35 -0000 Author: markj Date: Wed Sep 6 16:24:34 2017 New Revision: 323227 URL: https://svnweb.freebsd.org/changeset/base/323227 Log: Avoid keeping a dangling pointer when the mappings array is resized. Sponsored by: Dell EMC Isilon Modified: head/lib/libproc/_libproc.h head/lib/libproc/proc_rtld.c head/lib/libproc/proc_sym.c Modified: head/lib/libproc/_libproc.h ============================================================================== --- head/lib/libproc/_libproc.h Wed Sep 6 16:18:53 2017 (r323226) +++ head/lib/libproc/_libproc.h Wed Sep 6 16:24:34 2017 (r323227) @@ -72,7 +72,7 @@ struct proc_handle { struct map_info *mappings; /* File mappings for proc. */ size_t maparrsz; /* Map array size. */ size_t nmappings; /* Number of mappings. */ - prmap_t *exec_map; /* Executable text mapping. */ + size_t exec_map; /* Executable text mapping index. */ lwpstatus_t lwps; /* Process status. */ struct procstat *procstat; /* libprocstat handle. */ char execpath[PATH_MAX]; /* Path to program executable. */ Modified: head/lib/libproc/proc_rtld.c ============================================================================== --- head/lib/libproc/proc_rtld.c Wed Sep 6 16:18:53 2017 (r323226) +++ head/lib/libproc/proc_rtld.c Wed Sep 6 16:24:34 2017 (r323227) @@ -62,7 +62,7 @@ map_iter(const rd_loadobj_t *lop, void *arg) rdl2prmap(lop, &mapping->map); if (strcmp(lop->rdl_path, phdl->execpath) == 0 && (lop->rdl_prot & RD_RDL_X) != 0) - phdl->exec_map = &mapping->map; + phdl->exec_map = phdl->nmappings; file = NULL; if (lop->rdl_path[0] != '\0') { Modified: head/lib/libproc/proc_sym.c ============================================================================== --- head/lib/libproc/proc_sym.c Wed Sep 6 16:18:53 2017 (r323226) +++ head/lib/libproc/proc_sym.c Wed Sep 6 16:24:34 2017 (r323227) @@ -511,7 +511,8 @@ _proc_name2map(struct proc_handle *p, const char *name return (&p->mappings[i]); } if (strcmp(name, "a.out") == 0) - return (_proc_addr2map(p, p->exec_map->pr_vaddr)); + return (_proc_addr2map(p, + p->mappings[p->exec_map].map.pr_vaddr)); return (NULL); }