proc.c revision 47d70f6efd145113ad555dd2ba542d1050bbb784
1/*
2 * This file is part of ltrace.
3 * Copyright (C) 2011,2012 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, "process_status %d: %s", pid,
213				strerror(errno));
214	} else
215		/* If the file is not present, the process presumably
216		 * exited already.  */
217		ret = ps_zombie;
218
219	return ret;
220}
221
222static int
223all_digits(const char *str)
224{
225	while (isdigit(*str))
226		str++;
227	return !*str;
228}
229
230int
231process_tasks(pid_t pid, pid_t **ret_tasks, size_t *ret_n)
232{
233	PROC_PID_FILE(fn, "/proc/%d/task", pid);
234	DIR * d = opendir(fn);
235	if (d == NULL)
236		return -1;
237
238	pid_t *tasks = NULL;
239	size_t n = 0;
240	size_t alloc = 0;
241
242	while (1) {
243		struct dirent entry;
244		struct dirent *result;
245		if (readdir_r(d, &entry, &result) != 0) {
246			free(tasks);
247			return -1;
248		}
249		if (result == NULL)
250			break;
251		if (result->d_type == DT_DIR && all_digits(result->d_name)) {
252			pid_t npid = atoi(result->d_name);
253			if (n >= alloc) {
254				alloc = alloc > 0 ? (2 * alloc) : 8;
255				pid_t *ntasks = realloc(tasks,
256							sizeof(*tasks) * alloc);
257				if (ntasks == NULL) {
258					free(tasks);
259					return -1;
260				}
261				tasks = ntasks;
262			}
263			if (n >= alloc)
264				abort();
265			tasks[n++] = npid;
266		}
267	}
268
269	closedir(d);
270
271	*ret_tasks = tasks;
272	*ret_n = n;
273	return 0;
274}
275
276/* On native 64-bit system, we need to be careful when handling cross
277 * tracing.  This select appropriate pointer depending on host and
278 * target architectures.  XXX Really we should abstract this into the
279 * ABI object, as theorized about somewhere on pmachata/revamp
280 * branch.  */
281static void *
282select_32_64(struct Process *proc, void *p32, void *p64)
283{
284	if (sizeof(long) == 4 || proc->mask_32bit)
285		return p32;
286	else
287		return p64;
288}
289
290static int
291fetch_dyn64(struct Process *proc, arch_addr_t *addr, Elf64_Dyn *ret)
292{
293	if (umovebytes(proc, *addr, ret, sizeof(*ret)) != sizeof(*ret))
294		return -1;
295	*addr += sizeof(*ret);
296	return 0;
297}
298
299static int
300fetch_dyn32(struct Process *proc, arch_addr_t *addr, Elf64_Dyn *ret)
301{
302	Elf32_Dyn dyn;
303	if (umovebytes(proc, *addr, &dyn, sizeof(dyn)) != sizeof(dyn))
304		return -1;
305
306	*addr += sizeof(dyn);
307	ret->d_tag = dyn.d_tag;
308	ret->d_un.d_val = dyn.d_un.d_val;
309
310	return 0;
311}
312
313static int (*
314dyn_fetcher(struct Process *proc))(struct Process *,
315				   arch_addr_t *, Elf64_Dyn *)
316{
317	return select_32_64(proc, fetch_dyn32, fetch_dyn64);
318}
319
320int
321proc_find_dynamic_entry_addr(struct Process *proc, arch_addr_t src_addr,
322			     int d_tag, arch_addr_t *ret)
323{
324	debug(DEBUG_FUNCTION, "find_dynamic_entry()");
325
326	if (ret == NULL || src_addr == 0 || d_tag < 0)
327		return -1;
328
329	int i = 0;
330	while (1) {
331		Elf64_Dyn entry;
332		if (dyn_fetcher(proc)(proc, &src_addr, &entry) < 0
333		    || entry.d_tag == DT_NULL
334		    || i++ > 100) { /* Arbitrary cut-off so that we
335				     * don't loop forever if the
336				     * binary is corrupted.  */
337			debug(2, "Couldn't find address for dtag!");
338			return -1;
339		}
340
341		if (entry.d_tag == d_tag) {
342			/* XXX The double cast should be removed when
343			 * arch_addr_t becomes integral type.  */
344			*ret = (arch_addr_t)(uintptr_t)entry.d_un.d_val;
345			debug(2, "found address: %p in dtag %d", *ret, d_tag);
346			return 0;
347		}
348	}
349}
350
351/* Our own type for representing 32-bit linkmap.  We can't rely on the
352 * definition in link.h, because that's only accurate for our host
353 * architecture, not for target architecture (where the traced process
354 * runs). */
355#define LT_LINK_MAP(BITS)			\
356	{					\
357		Elf##BITS##_Addr l_addr;	\
358		Elf##BITS##_Addr l_name;	\
359		Elf##BITS##_Addr l_ld;		\
360		Elf##BITS##_Addr l_next;	\
361		Elf##BITS##_Addr l_prev;	\
362	}
363struct lt_link_map_32 LT_LINK_MAP(32);
364struct lt_link_map_64 LT_LINK_MAP(64);
365
366static int
367fetch_lm64(struct Process *proc, arch_addr_t addr,
368	   struct lt_link_map_64 *ret)
369{
370	if (umovebytes(proc, addr, ret, sizeof(*ret)) != sizeof(*ret))
371		return -1;
372	return 0;
373}
374
375static int
376fetch_lm32(struct Process *proc, arch_addr_t addr,
377	   struct lt_link_map_64 *ret)
378{
379	struct lt_link_map_32 lm;
380	if (umovebytes(proc, addr, &lm, sizeof(lm)) != sizeof(lm))
381		return -1;
382
383	ret->l_addr = lm.l_addr;
384	ret->l_name = lm.l_name;
385	ret->l_ld = lm.l_ld;
386	ret->l_next = lm.l_next;
387	ret->l_prev = lm.l_prev;
388
389	return 0;
390}
391
392static int (*
393lm_fetcher(struct Process *proc))(struct Process *,
394				  arch_addr_t, struct lt_link_map_64 *)
395{
396	return select_32_64(proc, fetch_lm32, fetch_lm64);
397}
398
399/* The same as above holds for struct r_debug.  */
400#define LT_R_DEBUG(BITS)			\
401	{					\
402		int r_version;			\
403		Elf##BITS##_Addr r_map;		\
404		Elf##BITS##_Addr r_brk;		\
405		int r_state;			\
406		Elf##BITS##_Addr r_ldbase;	\
407	}
408
409struct lt_r_debug_32 LT_R_DEBUG(32);
410struct lt_r_debug_64 LT_R_DEBUG(64);
411
412static int
413fetch_rd64(struct Process *proc, arch_addr_t addr,
414	   struct lt_r_debug_64 *ret)
415{
416	if (umovebytes(proc, addr, ret, sizeof(*ret)) != sizeof(*ret))
417		return -1;
418	return 0;
419}
420
421static int
422fetch_rd32(struct Process *proc, arch_addr_t addr,
423	   struct lt_r_debug_64 *ret)
424{
425	struct lt_r_debug_32 rd;
426	if (umovebytes(proc, addr, &rd, sizeof(rd)) != sizeof(rd))
427		return -1;
428
429	ret->r_version = rd.r_version;
430	ret->r_map = rd.r_map;
431	ret->r_brk = rd.r_brk;
432	ret->r_state = rd.r_state;
433	ret->r_ldbase = rd.r_ldbase;
434
435	return 0;
436}
437
438static int (*
439rdebug_fetcher(struct Process *proc))(struct Process *,
440				      arch_addr_t, struct lt_r_debug_64 *)
441{
442	return select_32_64(proc, fetch_rd32, fetch_rd64);
443}
444
445static int
446fetch_auxv64_entry(int fd, Elf64_auxv_t *ret)
447{
448	/* Reaching EOF is as much problem as not reading whole
449	 * entry.  */
450	return read(fd, ret, sizeof(*ret)) == sizeof(*ret) ? 0 : -1;
451}
452
453static int
454fetch_auxv32_entry(int fd, Elf64_auxv_t *ret)
455{
456	Elf32_auxv_t auxv;
457	if (read(fd, &auxv, sizeof(auxv)) != sizeof(auxv))
458		return -1;
459
460	ret->a_type = auxv.a_type;
461	ret->a_un.a_val = auxv.a_un.a_val;
462	return 0;
463}
464
465static int (*
466auxv_fetcher(struct Process *proc))(int, Elf64_auxv_t *)
467{
468	return select_32_64(proc, fetch_auxv32_entry, fetch_auxv64_entry);
469}
470
471static void
472crawl_linkmap(struct Process *proc, struct lt_r_debug_64 *dbg)
473{
474	debug (DEBUG_FUNCTION, "crawl_linkmap()");
475
476	if (!dbg || !dbg->r_map) {
477		debug(2, "Debug structure or it's linkmap are NULL!");
478		return;
479	}
480
481	/* XXX The double cast should be removed when
482	 * arch_addr_t becomes integral type.  */
483	arch_addr_t addr = (arch_addr_t)(uintptr_t)dbg->r_map;
484
485	while (addr != 0) {
486		struct lt_link_map_64 rlm;
487		if (lm_fetcher(proc)(proc, addr, &rlm) < 0) {
488			debug(2, "Unable to read link map");
489			return;
490		}
491
492		arch_addr_t key = addr;
493		/* XXX The double cast should be removed when
494		 * arch_addr_t becomes integral type.  */
495		addr = (arch_addr_t)(uintptr_t)rlm.l_next;
496		if (rlm.l_name == 0) {
497			debug(2, "Name of mapped library is NULL");
498			return;
499		}
500
501		char lib_name[BUFSIZ];
502		/* XXX The double cast should be removed when
503		 * arch_addr_t becomes integral type.  */
504		umovebytes(proc, (arch_addr_t)(uintptr_t)rlm.l_name,
505			   lib_name, sizeof(lib_name));
506
507		if (*lib_name == '\0') {
508			/* VDSO.  No associated file, XXX but we might
509			 * load it from the address space of the
510			 * process.  */
511			continue;
512		}
513
514		/* Do we have that library already?  */
515		if (proc_each_library(proc, NULL, library_with_key_cb, &key))
516			continue;
517
518		struct library *lib = malloc(sizeof(*lib));
519		if (lib == NULL) {
520		fail:
521			if (lib != NULL)
522				library_destroy(lib);
523			fprintf(stderr, "Couldn't load ELF object %s: %s\n",
524				lib_name, strerror(errno));
525			continue;
526		}
527		library_init(lib, LT_LIBTYPE_DSO);
528
529		if (ltelf_read_library(lib, proc, lib_name, rlm.l_addr) < 0)
530			goto fail;
531
532		lib->key = key;
533		proc_add_library(proc, lib);
534	}
535	return;
536}
537
538static int
539load_debug_struct(struct Process *proc, struct lt_r_debug_64 *ret)
540{
541	debug(DEBUG_FUNCTION, "load_debug_struct");
542
543	if (rdebug_fetcher(proc)(proc, proc->os.debug_addr, ret) < 0) {
544		debug(2, "This process does not have a debug structure!\n");
545		return -1;
546	}
547
548	return 0;
549}
550
551static void
552rdebug_bp_on_hit(struct breakpoint *bp, struct Process *proc)
553{
554	debug(DEBUG_FUNCTION, "arch_check_dbg");
555
556	struct lt_r_debug_64 rdbg;
557	if (load_debug_struct(proc, &rdbg) < 0) {
558		debug(2, "Unable to load debug structure!");
559		return;
560	}
561
562	if (rdbg.r_state == RT_CONSISTENT) {
563		debug(2, "Linkmap is now consistent");
564		switch (proc->os.debug_state) {
565		case RT_ADD:
566			debug(2, "Adding DSO to linkmap");
567			crawl_linkmap(proc, &rdbg);
568			break;
569		case RT_DELETE:
570			debug(2, "Removing DSO from linkmap");
571			// XXX unload that library
572			break;
573		default:
574			debug(2, "Unexpected debug state!");
575		}
576	}
577
578	proc->os.debug_state = rdbg.r_state;
579}
580
581#ifndef ARCH_HAVE_FIND_DL_DEBUG
582int
583arch_find_dl_debug(struct Process *proc, arch_addr_t dyn_addr,
584		   arch_addr_t *ret)
585{
586	return proc_find_dynamic_entry_addr(proc, dyn_addr, DT_DEBUG, ret);
587}
588#endif
589
590int
591linkmap_init(struct Process *proc, arch_addr_t dyn_addr)
592{
593	debug(DEBUG_FUNCTION, "linkmap_init(%d, dyn_addr=%p)", proc->pid, dyn_addr);
594
595	if (arch_find_dl_debug(proc, dyn_addr, &proc->os.debug_addr) == -1) {
596		debug(2, "Couldn't find debug structure!");
597		return -1;
598	}
599
600	int status;
601	struct lt_r_debug_64 rdbg;
602	if ((status = load_debug_struct(proc, &rdbg)) < 0) {
603		debug(2, "No debug structure or no memory to allocate one!");
604		return status;
605	}
606
607	/* XXX The double cast should be removed when
608	 * arch_addr_t becomes integral type.  */
609	arch_addr_t addr = (arch_addr_t)(uintptr_t)rdbg.r_brk;
610	if (arch_translate_address_dyn(proc, addr, &addr) < 0)
611		return -1;
612
613	struct breakpoint *rdebug_bp = insert_breakpoint(proc, addr, NULL);
614	static struct bp_callbacks rdebug_callbacks = {
615		.on_hit = rdebug_bp_on_hit,
616	};
617	rdebug_bp->cbs = &rdebug_callbacks;
618
619	crawl_linkmap(proc, &rdbg);
620
621	return 0;
622}
623
624int
625task_kill (pid_t pid, int sig)
626{
627	// Taken from GDB
628        int ret;
629
630        errno = 0;
631        ret = syscall (__NR_tkill, pid, sig);
632	return ret;
633}
634
635void
636process_removed(struct Process *proc)
637{
638	delete_events_for(proc);
639}
640
641int
642process_get_entry(struct Process *proc,
643		  arch_addr_t *entryp,
644		  arch_addr_t *interp_biasp)
645{
646	PROC_PID_FILE(fn, "/proc/%d/auxv", proc->pid);
647	int fd = open(fn, O_RDONLY);
648	if (fd == -1) {
649	fail:
650		fprintf(stderr, "couldn't read %s: %s", fn, strerror(errno));
651	done:
652		if (fd != -1)
653			close(fd);
654		return fd == -1 ? -1 : 0;
655	}
656
657	arch_addr_t at_entry = 0;
658	arch_addr_t at_bias = 0;
659	while (1) {
660		Elf64_auxv_t entry;
661		if (auxv_fetcher(proc)(fd, &entry) < 0)
662			goto fail;
663
664		switch (entry.a_type) {
665		case AT_BASE:
666			/* XXX The double cast should be removed when
667			 * arch_addr_t becomes integral type.  */
668			at_bias = (arch_addr_t)(uintptr_t)entry.a_un.a_val;
669			continue;
670
671		case AT_ENTRY:
672			/* XXX The double cast should be removed when
673			 * arch_addr_t becomes integral type.  */
674			at_entry = (arch_addr_t)(uintptr_t)entry.a_un.a_val;
675		default:
676			continue;
677
678		case AT_NULL:
679			break;
680		}
681		break;
682	}
683
684	if (entryp != NULL)
685		*entryp = at_entry;
686	if (interp_biasp != NULL)
687		*interp_biasp = at_bias;
688	goto done;
689}
690
691int
692os_process_init(struct Process *proc)
693{
694	proc->os.debug_addr = 0;
695	proc->os.debug_state = 0;
696	return 0;
697}
698
699void
700os_process_destroy(struct Process *proc)
701{
702}
703
704int
705os_process_clone(struct Process *retp, struct Process *proc)
706{
707	retp->os = proc->os;
708	return 0;
709}
710
711int
712os_process_exec(struct Process *proc)
713{
714	return 0;
715}
716