When doing the initial open of the proc via procfs, complain if we are
unable to open the /proc/pid/mem file. Otherwise doing a truss on a nonexistant pid makes us return success even though no such process exists.
This commit is contained in:
parent
187844b0ae
commit
fbf5f18034
@ -32,7 +32,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
extern int setup_and_wait(char **);
|
extern int setup_and_wait(char **);
|
||||||
extern int start_tracing(int, int, int);
|
extern int start_tracing(int, int, int, int);
|
||||||
extern void restore_proc(int);
|
extern void restore_proc(int);
|
||||||
extern const char *ioctlname(register_t val);
|
extern const char *ioctlname(register_t val);
|
||||||
extern char *strsig(int sig);
|
extern char *strsig(int sig);
|
||||||
|
@ -165,12 +165,16 @@ main(int ac, char **av)
|
|||||||
char **command;
|
char **command;
|
||||||
struct procfs_status pfs;
|
struct procfs_status pfs;
|
||||||
struct ex_types *funcs;
|
struct ex_types *funcs;
|
||||||
int in_exec = 0;
|
int in_exec, sigexit, initial_open;
|
||||||
char *fname = NULL;
|
char *fname;
|
||||||
int sigexit = 0;
|
|
||||||
struct trussinfo *trussinfo;
|
struct trussinfo *trussinfo;
|
||||||
char *signame;
|
char *signame;
|
||||||
|
|
||||||
|
in_exec = 0;
|
||||||
|
sigexit = 0;
|
||||||
|
fname = NULL;
|
||||||
|
initial_open = 1;
|
||||||
|
|
||||||
/* Initialize the trussinfo struct */
|
/* Initialize the trussinfo struct */
|
||||||
trussinfo = (struct trussinfo *)malloc(sizeof(struct trussinfo));
|
trussinfo = (struct trussinfo *)malloc(sizeof(struct trussinfo));
|
||||||
if (trussinfo == NULL)
|
if (trussinfo == NULL)
|
||||||
@ -246,9 +250,11 @@ main(int ac, char **av)
|
|||||||
|
|
||||||
START_TRACE:
|
START_TRACE:
|
||||||
Procfd = start_tracing(
|
Procfd = start_tracing(
|
||||||
trussinfo->pid, S_EXEC | S_SCE | S_SCX | S_CORE | S_EXIT |
|
trussinfo->pid, initial_open,
|
||||||
|
S_EXEC | S_SCE | S_SCX | S_CORE | S_EXIT |
|
||||||
((trussinfo->flags & NOSIGS) ? 0 : S_SIG),
|
((trussinfo->flags & NOSIGS) ? 0 : S_SIG),
|
||||||
((trussinfo->flags & FOLLOWFORKS) ? PF_FORK : 0));
|
((trussinfo->flags & FOLLOWFORKS) ? PF_FORK : 0));
|
||||||
|
initial_open = 0;
|
||||||
if (Procfd == -1)
|
if (Procfd == -1)
|
||||||
return (0);
|
return (0);
|
||||||
|
|
||||||
|
@ -129,7 +129,7 @@ setup_and_wait(char *command[])
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
int
|
int
|
||||||
start_tracing(int pid, int eventflags, int flags)
|
start_tracing(int pid, int failisfatal, int eventflags, int flags)
|
||||||
{
|
{
|
||||||
int fd;
|
int fd;
|
||||||
char buf[32];
|
char buf[32];
|
||||||
@ -144,8 +144,8 @@ start_tracing(int pid, int eventflags, int flags)
|
|||||||
* happens with SUGID programs. So we need to see if it still
|
* happens with SUGID programs. So we need to see if it still
|
||||||
* exists before we complain bitterly.
|
* exists before we complain bitterly.
|
||||||
*/
|
*/
|
||||||
if (kill(pid, 0) == -1)
|
if (!failisfatal && kill(pid, 0) == -1)
|
||||||
return -1;
|
return (-1);
|
||||||
err(8, "cannot open %s", buf);
|
err(8, "cannot open %s", buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user