proc.c revision 02a796e5e49c147982020c78b0066930e979f3e4
1/*
2 * This file is part of ltrace.
3 * Copyright (C) 2011,2012,2013 Petr Machata, Red Hat Inc.
4 * Copyright (C) 2010 Zachary T Welch, CodeSourcery
5 * Copyright (C) 2010 Joe Damato
6 * Copyright (C) 1998,2008,2009 Juan Cespedes
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License as
10 * published by the Free Software Foundation; either version 2 of the
11 * License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful, but
14 * WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16 * General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
21 * 02110-1301 USA
22 */
23
24#define _GNU_SOURCE /* For getline.  */
25#include "config.h"
26
27#include <sys/stat.h>
28#include <sys/syscall.h>
29#include <sys/types.h>
30#include <ctype.h>
31#include <dirent.h>
32#include <errno.h>
33#include <fcntl.h>
34#include <inttypes.h>
35#include <link.h>
36#include <signal.h>
37#include <stdio.h>
38#include <stdlib.h>
39#include <string.h>
40#include <unistd.h>
41
42#include "backend.h"
43#include "breakpoint.h"
44#include "config.h"
45#include "debug.h"
46#include "events.h"
47#include "library.h"
48#include "ltrace-elf.h"
49#include "proc.h"
50
51/* /proc/pid doesn't exist just after the fork, and sometimes `ltrace'
52 * couldn't open it to find the executable.  So it may be necessary to
53 * have a bit delay
54 */
55
56#define	MAX_DELAY	100000	/* 100000 microseconds = 0.1 seconds */
57
58#define PROC_PID_FILE(VAR, FORMAT, PID)		\
59	char VAR[strlen(FORMAT) + 6];		\
60	sprintf(VAR, FORMAT, PID)
61
62/*
63 * Returns a (malloc'd) file name corresponding to a running pid
64 */
65char *
66pid2name(pid_t pid) {
67	if (!kill(pid, 0)) {
68		int delay = 0;
69
70		PROC_PID_FILE(proc_exe, "/proc/%d/exe", pid);
71
72		while (delay < MAX_DELAY) {
73			if (!access(proc_exe, F_OK)) {
74				return strdup(proc_exe);
75			}
76			delay += 1000;	/* 1 milisecond */
77		}
78	}
79	return NULL;
80}
81
82static FILE *
83open_status_file(pid_t pid)
84{
85	PROC_PID_FILE(fn, "/proc/%d/status", pid);
86	/* Don't complain if we fail.  This would typically happen
87	   when the process is about to terminate, and these files are
88	   not available anymore.  This function is called from the
89	   event loop, and we don't want to clutter the output just
90	   because the process terminates.  */
91	return fopen(fn, "r");
92}
93
94static char *
95find_line_starting(FILE * file, const char * prefix, size_t len)
96{
97	char * line = NULL;
98	size_t line_len = 0;
99	while (!feof(file)) {
100		if (getline(&line, &line_len, file) < 0)
101			return NULL;
102		if (strncmp(line, prefix, len) == 0)
103			return line;
104	}
105	return NULL;
106}
107
108static void
109each_line_starting(FILE *file, const char *prefix,
110		   enum callback_status (*cb)(const char *line,
111					      const char *prefix,
112					      void *data),
113		   void *data)
114{
115	size_t len = strlen(prefix);
116	char * line;
117	while ((line = find_line_starting(file, prefix, len)) != NULL) {
118		enum callback_status st = (*cb)(line, prefix, data);
119		free(line);
120		if (st == CBS_STOP)
121			return;
122	}
123}
124
125static enum callback_status
126process_leader_cb(const char *line, const char *prefix, void *data)
127{
128	pid_t * pidp = data;
129	*pidp = atoi(line + strlen(prefix));
130	return CBS_STOP;
131}
132
133pid_t
134process_leader(pid_t pid)
135{
136	pid_t tgid = 0;
137	FILE * file = open_status_file(pid);
138	if (file != NULL) {
139		each_line_starting(file, "Tgid:\t", &process_leader_cb, &tgid);
140		fclose(file);
141	}
142
143	return tgid;
144}
145
146static enum callback_status
147process_stopped_cb(const char *line, const char *prefix, void *data)
148{
149	char c = line[strlen(prefix)];
150	// t:tracing stop, T:job control stop
151	*(int *)data = (c == 't' || c == 'T');
152	return CBS_STOP;
153}
154
155int
156process_stopped(pid_t pid)
157{
158	int is_stopped = -1;
159	FILE * file = open_status_file(pid);
160	if (file != NULL) {
161		each_line_starting(file, "State:\t", &process_stopped_cb,
162				   &is_stopped);
163		fclose(file);
164	}
165	return is_stopped;
166}
167
168static enum callback_status
169process_status_cb(const char *line, const char *prefix, void *data)
170{
171	const char * status = line + strlen(prefix);
172	const char c = *status;
173
174#define RETURN(C) do {					\
175		*(enum process_status *)data = C;	\
176		return CBS_STOP;			\
177	} while (0)
178
179	switch (c) {
180	case 'Z': RETURN(PS_ZOMBIE);
181	case 't': RETURN(PS_TRACING_STOP);
182	case 'T':
183		/* This can be either "T (stopped)" or, for older
184		 * kernels, "T (tracing stop)".  */
185		if (!strcmp(status, "T (stopped)\n"))
186			RETURN(PS_STOP);
187		else if (!strcmp(status, "T (tracing stop)\n"))
188			RETURN(PS_TRACING_STOP);
189		else {
190			fprintf(stderr, "Unknown process status: %s",
191				status);
192			RETURN(PS_STOP); /* Some sort of stop
193					  * anyway.  */
194		}
195	case 'D':
196	case 'S': RETURN(PS_SLEEPING);
197	}
198
199	RETURN(PS_OTHER);
200#undef RETURN
201}
202
203enum process_status
204process_status(pid_t pid)
205{
206	enum process_status ret = PS_INVALID;
207	FILE * file = open_status_file(pid);
208	if (file != NULL) {
209		each_line_starting(file, "State:\t", &process_status_cb, &ret);
210		fclose(file);
211		if (ret == PS_INVALID)
212			fprintf(stderr,
213				"Couldn't determine status of process %d: %s\n",
214				pid, strerror(errno));
215	} else {
216		/* If the file is not present, the process presumably
217		 * exited already.  */
218		ret = PS_ZOMBIE;
219	}
220
221	return ret;
222}
223
224static int
225all_digits(const char *str)
226{
227	while (isdigit(*str))
228		str++;
229	return !*str;
230}
231
232int
233process_tasks(pid_t pid, pid_t **ret_tasks, size_t *ret_n)
234{
235	PROC_PID_FILE(fn, "/proc/%d/task", pid);
236	DIR *d = opendir(fn);
237	if (d == NULL)
238		return -1;
239
240	pid_t *tasks = NULL;
241	size_t n = 0;
242	size_t alloc = 0;
243
244	while (1) {
245		struct dirent entry;
246		struct dirent *result;
247		if (readdir_r(d, &entry, &result) != 0) {
248		fail:
249			free(tasks);
250			closedir(d);
251			return -1;
252		}
253		if (result == NULL)
254			break;
255		if (result->d_type == DT_DIR && all_digits(result->d_name)) {
256			pid_t npid = atoi(result->d_name);
257			if (n >= alloc) {
258				alloc = alloc > 0 ? (2 * alloc) : 8;
259				pid_t *ntasks = realloc(tasks,
260							sizeof(*tasks) * alloc);
261				if (ntasks == NULL)
262					goto fail;
263				tasks = ntasks;
264			}
265			assert(n < alloc);
266			tasks[n++] = npid;
267		}
268	}
269
270	closedir(d);
271
272	*ret_tasks = tasks;
273	*ret_n = n;
274	return 0;
275}
276
277/* On native 64-bit system, we need to be careful when handling cross
278 * tracing.  This select appropriate pointer depending on host and
279 * target architectures.  XXX Really we should abstract this into the
280 * ABI object, as theorized about somewhere on pmachata/revamp
281 * branch.  */
282static void *
283select_32_64(struct process *proc, void *p32, void *p64)
284{
285	if (sizeof(long) == 4 || proc->mask_32bit)
286		return p32;
287	else
288		return p64;
289}
290
291static int
292fetch_dyn64(struct process *proc, arch_addr_t *addr, Elf64_Dyn *ret)
293{
294	if (umovebytes(proc, *addr, ret, sizeof(*ret)) != sizeof(*ret))
295		return -1;
296	*addr += sizeof(*ret);
297	return 0;
298}
299
300static int
301fetch_dyn32(struct process *proc, arch_addr_t *addr, Elf64_Dyn *ret)
302{
303	Elf32_Dyn dyn;
304	if (umovebytes(proc, *addr, &dyn, sizeof(dyn)) != sizeof(dyn))
305		return -1;
306
307	*addr += sizeof(dyn);
308	ret->d_tag = dyn.d_tag;
309	ret->d_un.d_val = dyn.d_un.d_val;
310
311	return 0;
312}
313
314static int (*
315dyn_fetcher(struct process *proc))(struct process *,
316				   arch_addr_t *, Elf64_Dyn *)
317{
318	return select_32_64(proc, fetch_dyn32, fetch_dyn64);
319}
320
321int
322proc_find_dynamic_entry_addr(struct process *proc, arch_addr_t src_addr,
323			     int d_tag, arch_addr_t *ret)
324{
325	debug(DEBUG_FUNCTION, "find_dynamic_entry()");
326
327	if (ret == NULL || src_addr == 0 || d_tag < 0)
328		return -1;
329
330	int i = 0;
331	while (1) {
332		Elf64_Dyn entry;
333		if (dyn_fetcher(proc)(proc, &src_addr, &entry) < 0
334		    || entry.d_tag == DT_NULL
335		    || i++ > 100) { /* Arbitrary cut-off so that we
336				     * don't loop forever if the
337				     * binary is corrupted.  */
338			debug(2, "Couldn't find address for dtag!");
339			return -1;
340		}
341
342		if (entry.d_tag == d_tag) {
343			/* XXX The double cast should be removed when
344			 * arch_addr_t becomes integral type.  */
345			*ret = (arch_addr_t)(uintptr_t)entry.d_un.d_val;
346			debug(2, "found address: %p in dtag %d", *ret, d_tag);
347			return 0;
348		}
349	}
350}
351
352/* Our own type for representing 32-bit linkmap.  We can't rely on the
353 * definition in link.h, because that's only accurate for our host
354 * architecture, not for target architecture (where the traced process
355 * runs). */
356#define LT_LINK_MAP(BITS)			\
357	{					\
358		Elf##BITS##_Addr l_addr;	\
359		Elf##BITS##_Addr l_name;	\
360		Elf##BITS##_Addr l_ld;		\
361		Elf##BITS##_Addr l_next;	\
362		Elf##BITS##_Addr l_prev;	\
363	}
364struct lt_link_map_32 LT_LINK_MAP(32);
365struct lt_link_map_64 LT_LINK_MAP(64);
366
367static int
368fetch_lm64(struct process *proc, arch_addr_t addr,
369	   struct lt_link_map_64 *ret)
370{
371	if (umovebytes(proc, addr, ret, sizeof(*ret)) != sizeof(*ret))
372		return -1;
373	return 0;
374}
375
376static int
377fetch_lm32(struct process *proc, arch_addr_t addr,
378	   struct lt_link_map_64 *ret)
379{
380	struct lt_link_map_32 lm;
381	if (umovebytes(proc, addr, &lm, sizeof(lm)) != sizeof(lm))
382		return -1;
383
384	ret->l_addr = lm.l_addr;
385	ret->l_name = lm.l_name;
386	ret->l_ld = lm.l_ld;
387	ret->l_next = lm.l_next;
388	ret->l_prev = lm.l_prev;
389
390	return 0;
391}
392
393static int (*
394lm_fetcher(struct process *proc))(struct process *,
395				  arch_addr_t, struct lt_link_map_64 *)
396{
397	return select_32_64(proc, fetch_lm32, fetch_lm64);
398}
399
400/* The same as above holds for struct r_debug.  */
401#define LT_R_DEBUG(BITS)			\
402	{					\
403		int r_version;			\
404		Elf##BITS##_Addr r_map;		\
405		Elf##BITS##_Addr r_brk;		\
406		int r_state;			\
407		Elf##BITS##_Addr r_ldbase;	\
408	}
409
410struct lt_r_debug_32 LT_R_DEBUG(32);
411struct lt_r_debug_64 LT_R_DEBUG(64);
412
413static int
414fetch_rd64(struct process *proc, arch_addr_t addr,
415	   struct lt_r_debug_64 *ret)
416{
417	if (umovebytes(proc, addr, ret, sizeof(*ret)) != sizeof(*ret))
418		return -1;
419	return 0;
420}
421
422static int
423fetch_rd32(struct process *proc, arch_addr_t addr,
424	   struct lt_r_debug_64 *ret)
425{
426	struct lt_r_debug_32 rd;
427	if (umovebytes(proc, addr, &rd, sizeof(rd)) != sizeof(rd))
428		return -1;
429
430	ret->r_version = rd.r_version;
431	ret->r_map = rd.r_map;
432	ret->r_brk = rd.r_brk;
433	ret->r_state = rd.r_state;
434	ret->r_ldbase = rd.r_ldbase;
435
436	return 0;
437}
438
439static int (*
440rdebug_fetcher(struct process *proc))(struct process *,
441				      arch_addr_t, struct lt_r_debug_64 *)
442{
443	return select_32_64(proc, fetch_rd32, fetch_rd64);
444}
445
446static int
447fetch_auxv64_entry(int fd, Elf64_auxv_t *ret)
448{
449	/* Reaching EOF is as much problem as not reading whole
450	 * entry.  */
451	return read(fd, ret, sizeof(*ret)) == sizeof(*ret) ? 0 : -1;
452}
453
454static int
455fetch_auxv32_entry(int fd, Elf64_auxv_t *ret)
456{
457	Elf32_auxv_t auxv;
458	if (read(fd, &auxv, sizeof(auxv)) != sizeof(auxv))
459		return -1;
460
461	ret->a_type = auxv.a_type;
462	ret->a_un.a_val = auxv.a_un.a_val;
463	return 0;
464}
465
466static int (*
467auxv_fetcher(struct process *proc))(int, Elf64_auxv_t *)
468{
469	return select_32_64(proc, fetch_auxv32_entry, fetch_auxv64_entry);
470}
471
472static void
473crawl_linkmap(struct process *proc, struct lt_r_debug_64 *dbg)
474{
475	debug (DEBUG_FUNCTION, "crawl_linkmap()");
476
477	if (!dbg || !dbg->r_map) {
478		debug(2, "Debug structure or it's linkmap are NULL!");
479		return;
480	}
481
482	/* XXX The double cast should be removed when
483	 * arch_addr_t becomes integral type.  */
484	arch_addr_t addr = (arch_addr_t)(uintptr_t)dbg->r_map;
485
486	while (addr != 0) {
487		struct lt_link_map_64 rlm = {};
488		if (lm_fetcher(proc)(proc, addr, &rlm) < 0) {
489			debug(2, "Unable to read link map");
490			return;
491		}
492
493		arch_addr_t key = addr;
494		/* XXX The double cast should be removed when
495		 * arch_addr_t becomes integral type.  */
496		addr = (arch_addr_t)(uintptr_t)rlm.l_next;
497		if (rlm.l_name == 0) {
498			debug(2, "Name of mapped library is NULL");
499			return;
500		}
501
502		char lib_name[BUFSIZ];
503		/* XXX The double cast should be removed when
504		 * arch_addr_t becomes integral type.  */
505		umovebytes(proc, (arch_addr_t)(uintptr_t)rlm.l_name,
506			   lib_name, sizeof(lib_name));
507
508		/* Library name can be an empty string, in which case
509		 * the entry represents either the main binary, or a
510		 * VDSO.  Unfortunately we can't rely on that, as in
511		 * recent glibc, that entry is initialized to VDSO
512		 * SONAME.
513		 *
514		 * It's not clear how to detect VDSO in this case.  We
515		 * can't assume that l_name of real DSOs will be
516		 * either absolute or relative (for LD_LIBRARY_PATH=:
517		 * it will be neither).  We can't compare l_addr with
518		 * AT_SYSINFO_EHDR either, as l_addr is bias (which
519		 * also means it's not unique, and therefore useless
520		 * for this).  We could load VDSO from process image
521		 * and at least compare actual SONAMEs.  For now, this
522		 * kludge is about the best that we can do.  */
523		if (*lib_name == 0
524		    || strcmp(lib_name, "linux-vdso.so.1") == 0
525		    || strcmp(lib_name, "linux-gate.so.1") == 0
526		    || strcmp(lib_name, "linux-vdso32.so.1") == 0
527		    || strcmp(lib_name, "linux-vdso64.so.1") == 0)
528			continue;
529
530		/* Do we have that library already?  */
531		if (proc_each_library(proc, NULL, library_with_key_cb, &key))
532			continue;
533
534		struct library *lib = malloc(sizeof(*lib));
535		if (lib == NULL) {
536		fail:
537			free(lib);
538			fprintf(stderr, "Couldn't load ELF object %s: %s\n",
539				lib_name, strerror(errno));
540			continue;
541		}
542
543		if (library_init(lib, LT_LIBTYPE_DSO) < 0)
544			goto fail;
545
546		if (ltelf_read_library(lib, proc, lib_name, rlm.l_addr) < 0) {
547			library_destroy(lib);
548			goto fail;
549		}
550
551		lib->key = key;
552		proc_add_library(proc, lib);
553	}
554	return;
555}
556
557static int
558load_debug_struct(struct process *proc, struct lt_r_debug_64 *ret)
559{
560	debug(DEBUG_FUNCTION, "load_debug_struct");
561
562	if (rdebug_fetcher(proc)(proc, proc->os.debug_addr, ret) < 0) {
563		debug(2, "This process does not have a debug structure!");
564		return -1;
565	}
566
567	return 0;
568}
569
570static void
571rdebug_bp_on_hit(struct breakpoint *bp, struct process *proc)
572{
573	debug(DEBUG_FUNCTION, "arch_check_dbg");
574
575	struct lt_r_debug_64 rdbg;
576	if (load_debug_struct(proc, &rdbg) < 0) {
577		debug(2, "Unable to load debug structure!");
578		return;
579	}
580
581	if (rdbg.r_state == RT_CONSISTENT) {
582		debug(2, "Linkmap is now consistent");
583		switch (proc->os.debug_state) {
584		case RT_ADD:
585			debug(2, "Adding DSO to linkmap");
586			crawl_linkmap(proc, &rdbg);
587			break;
588		case RT_DELETE:
589			debug(2, "Removing DSO from linkmap");
590			// XXX unload that library
591			break;
592		default:
593			debug(2, "Unexpected debug state!");
594		}
595	}
596
597	proc->os.debug_state = rdbg.r_state;
598}
599
600#ifndef ARCH_HAVE_FIND_DL_DEBUG
601int
602arch_find_dl_debug(struct process *proc, arch_addr_t dyn_addr,
603		   arch_addr_t *ret)
604{
605	return proc_find_dynamic_entry_addr(proc, dyn_addr, DT_DEBUG, ret);
606}
607#endif
608
609int
610linkmap_init(struct process *proc, arch_addr_t dyn_addr)
611{
612	debug(DEBUG_FUNCTION, "linkmap_init(%d, dyn_addr=%p)", proc->pid, dyn_addr);
613
614	if (arch_find_dl_debug(proc, dyn_addr, &proc->os.debug_addr) == -1) {
615		debug(2, "Couldn't find debug structure!");
616		return -1;
617	}
618
619	int status;
620	struct lt_r_debug_64 rdbg;
621	if ((status = load_debug_struct(proc, &rdbg)) < 0) {
622		debug(2, "No debug structure or no memory to allocate one!");
623		return status;
624	}
625
626	crawl_linkmap(proc, &rdbg);
627
628	/* XXX The double cast should be removed when
629	 * arch_addr_t becomes integral type.  */
630	arch_addr_t addr = (arch_addr_t)(uintptr_t)rdbg.r_brk;
631	if (arch_translate_address_dyn(proc, addr, &addr) < 0)
632		return -1;
633
634	struct breakpoint *rdebug_bp = insert_breakpoint_at(proc, addr, NULL);
635	if (rdebug_bp == NULL) {
636		/* This is not fatal, the tracing can continue with
637		 * reduced functionality.  */
638		fprintf(stderr,
639			"Couldn't insert _r_debug breakpoint to %d: %s.\n"
640			"As a result of that, ltrace will not be able to "
641			"detect and trace\nnewly-loaded libraries.\n",
642			proc->pid, strerror(errno));
643	} else {
644		static struct bp_callbacks rdebug_callbacks = {
645			.on_hit = rdebug_bp_on_hit,
646		};
647		rdebug_bp->cbs = &rdebug_callbacks;
648	}
649
650	return 0;
651}
652
653int
654task_kill (pid_t pid, int sig)
655{
656	// Taken from GDB
657        int ret;
658
659        errno = 0;
660        ret = syscall (__NR_tkill, pid, sig);
661	return ret;
662}
663
664void
665process_removed(struct process *proc)
666{
667	delete_events_for(proc);
668}
669
670int
671process_get_entry(struct process *proc,
672		  arch_addr_t *entryp,
673		  arch_addr_t *interp_biasp)
674{
675	PROC_PID_FILE(fn, "/proc/%d/auxv", proc->pid);
676	int fd = open(fn, O_RDONLY);
677	int ret = 0;
678	if (fd == -1) {
679	fail:
680		fprintf(stderr, "couldn't read %s: %s", fn, strerror(errno));
681		ret = -1;
682	done:
683		if (fd != -1)
684			close(fd);
685		return ret;
686	}
687
688	arch_addr_t at_entry = 0;
689	arch_addr_t at_bias = 0;
690	while (1) {
691		Elf64_auxv_t entry = {};
692		if (auxv_fetcher(proc)(fd, &entry) < 0)
693			goto fail;
694
695		switch (entry.a_type) {
696		case AT_BASE:
697			/* XXX The double cast should be removed when
698			 * arch_addr_t becomes integral type.  */
699			at_bias = (arch_addr_t)(uintptr_t)entry.a_un.a_val;
700			continue;
701
702		case AT_ENTRY:
703			/* XXX The double cast should be removed when
704			 * arch_addr_t becomes integral type.  */
705			at_entry = (arch_addr_t)(uintptr_t)entry.a_un.a_val;
706		default:
707			continue;
708
709		case AT_NULL:
710			break;
711		}
712		break;
713	}
714
715	if (entryp != NULL)
716		*entryp = at_entry;
717	if (interp_biasp != NULL)
718		*interp_biasp = at_bias;
719	goto done;
720}
721
722int
723os_process_init(struct process *proc)
724{
725	proc->os.debug_addr = 0;
726	proc->os.debug_state = 0;
727	return 0;
728}
729
730void
731os_process_destroy(struct process *proc)
732{
733}
734
735int
736os_process_clone(struct process *retp, struct process *proc)
737{
738	retp->os = proc->os;
739	return 0;
740}
741
742int
743os_process_exec(struct process *proc)
744{
745	return 0;
746}
747