diff options
author | Baptiste Daroussin <bapt@FreeBSD.org> | 2016-08-02 22:47:06 +0000 |
---|---|---|
committer | Baptiste Daroussin <bapt@FreeBSD.org> | 2016-08-02 22:47:06 +0000 |
commit | 0f21f5285b755652faf5f371d455e10da87741f0 (patch) | |
tree | 9c0aa86ebd66c224955d9bfb94d8fdc87a49eac1 /usr.bin/truss/setup.c | |
parent | 08ed5b80daaae5cfb887b8e960dde7ce0b1eaae2 (diff) | |
download | src-0f21f5285b755652faf5f371d455e10da87741f0.tar.gz src-0f21f5285b755652faf5f371d455e10da87741f0.zip |
truss: fix uninitialized trussinfo->curthread in add_threads()/enter_syscall
trussinfo->curthread must be initialized before calling enter_syscall(),
it is used by t->proc->abi->fetch_args().
Without that truss is segfaulting and the attached program also crash.
Submitted by: Nikita Kozlov (nikita@gandi.net)
Reviewed by: jhb
MFC after: 3 days
Differential Revision: https://reviews.freebsd.org/D7399
Notes
Notes:
svn path=/head/; revision=303685
Diffstat (limited to 'usr.bin/truss/setup.c')
-rw-r--r-- | usr.bin/truss/setup.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/usr.bin/truss/setup.c b/usr.bin/truss/setup.c index c134405907d3..a14c01664ef5 100644 --- a/usr.bin/truss/setup.c +++ b/usr.bin/truss/setup.c @@ -223,8 +223,10 @@ add_threads(struct trussinfo *info, struct procinfo *p) t = new_thread(p, lwps[i]); if (ptrace(PT_LWPINFO, lwps[i], (caddr_t)&pl, sizeof(pl)) == -1) err(1, "ptrace(PT_LWPINFO)"); - if (pl.pl_flags & PL_FLAG_SCE) + if (pl.pl_flags & PL_FLAG_SCE) { + info->curthread = t; enter_syscall(info, t, &pl); + } } free(lwps); } |