Adhemerval Zanella 1a4c27355e elf: Fix pldd (BZ#18035)
Since 9182aa67994 (Fix vDSO l_name for GDB's, BZ#387) the initial link_map
for executable itself and loader will have both l_name and l_libname->name
holding the same value due:

 elf/dl-object.c

 95   new->l_name = *realname ? realname : (char *) newname->name + libname_len - 1;

Since newname->name points to new->l_libname->name.

This leads to pldd to an infinite call at:

 elf/pldd-xx.c

203     again:
204       while (1)
205         {
206           ssize_t n = pread64 (memfd, tmpbuf.data, tmpbuf.length, name_offset);

228           /* Try the l_libname element.  */
229           struct E(libname_list) ln;
230           if (pread64 (memfd, &ln, sizeof (ln), m.l_libname) == sizeof (ln))
231             {
232               name_offset = ln.name;
233               goto again;
234             }

Since the value at ln.name (l_libname->name) will be the same as previously
read. The straightforward fix is just avoid the check and read the new list
entry.

I checked also against binaries issues with old loaders with fix for BZ#387,
and pldd could dump the shared objects.

Checked on x86_64-linux-gnu, i686-linux-gnu, aarch64-linux-gnu, and
powerpc64le-linux-gnu.

	[BZ #18035]
	* elf/Makefile (tests-container): Add tst-pldd.
	* elf/pldd-xx.c: Use _Static_assert in of pldd_assert.
	(E(find_maps)): Avoid use alloca, use default read file operations
	instead of explicit LFS names, and fix infinite	loop.
	* elf/pldd.c: Explicit set _FILE_OFFSET_BITS, cleanup headers.
	(get_process_info): Use _Static_assert instead of assert, use default
	directory operations instead of explicit LFS names, and free some
	leadek pointers.
	* elf/tst-pldd.c: New file.
2019-04-23 18:13:08 -03:00
..
2019-02-27 13:55:45 +00:00
2002-07-17 00:34:35 +00:00
2002-06-30 07:17:02 +00:00
2002-07-17 00:34:35 +00:00
2002-07-17 00:34:35 +00:00
2002-07-17 00:34:35 +00:00
2002-06-30 07:17:02 +00:00
2001-01-21 17:15:50 +00:00
2000-12-17 17:50:56 +00:00
2001-09-06 01:03:05 +00:00
2001-09-06 01:03:05 +00:00
2000-12-15 16:03:57 +00:00
2000-12-15 16:03:57 +00:00
2000-12-15 16:03:57 +00:00
2000-12-15 16:03:57 +00:00
2019-02-12 10:30:34 +00:00
2019-03-13 10:45:35 +01:00
2000-12-17 17:50:56 +00:00
2000-08-19 07:17:09 +00:00
2000-12-17 17:50:56 +00:00
2000-12-17 17:50:56 +00:00
2001-02-06 10:38:10 +00:00
2001-03-21 07:21:34 +00:00
2001-04-06 15:23:41 +00:00
2009-06-03 16:21:40 -07:00
2009-06-22 15:07:40 -07:00
2009-06-22 15:07:40 -07:00
2013-06-05 20:44:03 +00:00
2009-06-22 15:07:40 -07:00
2013-06-05 20:44:03 +00:00
2009-10-30 00:48:54 -07:00
2009-06-03 16:21:40 -07:00
2009-10-30 00:48:54 -07:00
2009-06-22 15:07:40 -07:00
2009-06-22 15:07:40 -07:00
2009-06-22 15:07:40 -07:00
2009-06-22 15:07:40 -07:00
2009-06-22 15:07:40 -07:00
2009-06-22 15:07:40 -07:00
2009-06-22 15:07:40 -07:00
2009-06-22 15:07:40 -07:00
2009-06-22 15:07:40 -07:00
2009-10-30 00:48:54 -07:00
2009-06-22 15:07:40 -07:00
2001-02-02 06:54:15 +00:00
2004-04-21 18:58:31 +00:00
2019-02-12 10:30:34 +00:00
2000-11-26 06:18:02 +00:00
2000-12-17 17:50:56 +00:00
2000-12-15 16:03:57 +00:00
2019-04-23 18:13:08 -03:00
2000-11-26 06:18:02 +00:00
2000-12-17 17:50:56 +00:00
2000-12-17 17:50:56 +00:00
2000-12-17 17:50:56 +00:00
2000-12-17 17:50:56 +00:00
2000-12-31 06:09:08 +00:00
2000-12-31 06:09:08 +00:00
2012-01-07 23:57:22 -05:00
2006-03-01 06:18:49 +00:00
2000-12-17 17:50:56 +00:00
2000-12-17 17:50:56 +00:00
2003-01-12 10:11:16 +00:00
2000-08-25 19:33:19 +00:00
2000-08-25 19:33:19 +00:00
2000-12-17 17:50:56 +00:00
2000-08-25 19:33:19 +00:00
2002-02-10 22:40:17 +00:00
2000-07-21 04:42:21 +00:00
2002-03-03 19:43:30 +00:00
2000-07-21 04:42:21 +00:00
2000-11-26 06:18:02 +00:00
2000-11-26 06:18:02 +00:00
2000-12-17 17:50:56 +00:00
2019-04-23 18:13:08 -03:00
2019-04-23 18:13:08 -03:00
2000-12-15 16:03:57 +00:00
2001-09-08 17:45:32 +00:00
2013-08-21 19:48:48 +02:00
2001-09-22 15:44:07 +00:00
2001-05-22 23:55:23 +00:00
2001-06-22 13:50:51 +00:00
2001-05-22 23:55:23 +00:00
2001-06-22 13:50:51 +00:00
2001-09-22 15:44:35 +00:00
2003-01-12 10:11:16 +00:00
2001-10-01 00:14:14 +00:00
2001-10-01 00:14:14 +00:00
2001-10-01 00:14:14 +00:00
2001-10-01 00:14:14 +00:00
2001-10-01 00:14:14 +00:00
2002-04-15 17:10:22 +00:00
2002-04-15 17:10:22 +00:00
2002-04-15 17:10:22 +00:00
2002-12-30 20:25:40 +00:00
2002-12-30 20:25:40 +00:00
2002-12-30 20:25:40 +00:00
2002-12-30 20:25:40 +00:00
2003-01-12 10:11:16 +00:00
2003-01-12 10:11:16 +00:00
2003-01-12 10:11:16 +00:00
2003-01-12 10:11:16 +00:00
2013-08-21 19:48:48 +02:00
2000-12-17 17:50:56 +00:00
2000-12-17 17:50:56 +00:00
2000-12-17 17:50:56 +00:00
2000-12-17 17:50:56 +00:00
2000-11-26 06:18:02 +00:00
2001-05-22 22:30:18 +00:00
2019-03-22 17:30:44 -03:00
2000-12-15 16:03:57 +00:00
2000-12-15 16:03:57 +00:00
2000-12-15 16:03:57 +00:00
2000-12-15 16:03:57 +00:00
2000-12-15 16:03:57 +00:00
2013-06-05 20:44:03 +00:00
2003-01-27 21:03:22 +00:00
2003-01-27 21:03:22 +00:00
2005-07-07 23:00:02 +00:00
2005-07-07 23:00:02 +00:00
2005-07-07 23:00:02 +00:00
2005-07-07 23:00:02 +00:00
2005-07-07 23:00:02 +00:00
2004-09-23 07:45:38 +00:00
2004-09-23 07:45:38 +00:00
2004-09-23 07:45:38 +00:00
2004-10-27 20:27:40 +00:00
2017-12-15 20:22:29 -08:00
2004-07-16 17:56:45 +00:00
2019-04-23 18:13:08 -03:00
2013-10-18 19:45:36 +05:30
2011-09-10 14:34:15 -04:00
2011-09-10 14:34:15 -04:00
2011-09-10 14:34:15 -04:00
2003-04-17 19:19:29 +00:00
2003-07-24 20:07:00 +00:00
2005-03-20 22:25:59 +00:00
2006-03-01 06:18:49 +00:00
2000-12-17 17:50:56 +00:00
2000-12-17 17:50:56 +00:00
2005-03-03 08:28:23 +00:00
2005-03-03 08:28:23 +00:00
2005-03-03 08:28:23 +00:00
2005-03-03 08:28:23 +00:00
2005-03-18 10:54:53 +00:00
2005-03-18 10:54:53 +00:00
2005-04-27 01:39:11 +00:00
2011-08-24 09:32:13 +02:00
2006-03-01 06:18:49 +00:00
2000-08-26 23:41:19 +00:00
2018-01-04 18:46:24 +01:00
2003-03-29 03:46:03 +00:00