static void dumpio(struct tcb *tcp) { if (syserror(tcp)) return; int fd = tcp->u_arg[0]; if (fd < 0) return; if (is_number_in_set(fd, read_set)) { switch (tcp->s_ent->sen) { case SEN_read: case SEN_pread: case SEN_recv: case SEN_recvfrom: case SEN_mq_timedreceive: dumpstr(tcp, tcp->u_arg[1], tcp->u_rval); return; case SEN_readv: case SEN_preadv: case SEN_preadv2: dumpiov_upto(tcp, tcp->u_arg[2], tcp->u_arg[1], tcp->u_rval); return; case SEN_recvmsg: dumpiov_in_msghdr(tcp, tcp->u_arg[1], tcp->u_rval); return; case SEN_recvmmsg: dumpiov_in_mmsghdr(tcp, tcp->u_arg[1]); return; } } if (is_number_in_set(fd, write_set)) { switch (tcp->s_ent->sen) { case SEN_write: case SEN_pwrite: case SEN_send: case SEN_sendto: case SEN_mq_timedsend: dumpstr(tcp, tcp->u_arg[1], tcp->u_arg[2]); break; case SEN_writev: case SEN_pwritev: case SEN_pwritev2: case SEN_vmsplice: dumpiov_upto(tcp, tcp->u_arg[2], tcp->u_arg[1], -1); break; case SEN_sendmsg: dumpiov_in_msghdr(tcp, tcp->u_arg[1], -1); break; case SEN_sendmmsg: dumpiov_in_mmsghdr(tcp, tcp->u_arg[1]); break; } } }
static void dumpio(struct tcb *tcp) { int (*func)(); if (syserror(tcp)) return; if ((unsigned long) tcp->u_arg[0] >= num_quals) return; func = tcp->s_ent->sys_func; if (func == printargs) return; if (qual_flags[tcp->u_arg[0]] & QUAL_READ) { if (func == sys_read || func == sys_pread || func == sys_recv || func == sys_recvfrom) { dumpstr(tcp, tcp->u_arg[1], tcp->u_rval); return; } else if (func == sys_readv) { dumpiov(tcp, tcp->u_arg[2], tcp->u_arg[1]); return; #if HAVE_SENDMSG } else if (func == sys_recvmsg) { dumpiov_in_msghdr(tcp, tcp->u_arg[1]); return; } else if (func == sys_recvmmsg) { dumpiov_in_mmsghdr(tcp, tcp->u_arg[1]); return; #endif } } if (qual_flags[tcp->u_arg[0]] & QUAL_WRITE) { if (func == sys_write || func == sys_pwrite || func == sys_send || func == sys_sendto) dumpstr(tcp, tcp->u_arg[1], tcp->u_arg[2]); else if (func == sys_writev) dumpiov(tcp, tcp->u_arg[2], tcp->u_arg[1]); #if HAVE_SENDMSG else if (func == sys_sendmsg) dumpiov_in_msghdr(tcp, tcp->u_arg[1]); else if (func == sys_sendmmsg) dumpiov_in_mmsghdr(tcp, tcp->u_arg[1]); #endif } }