From 121e1489789bc6c1af5b42cb2fff78546788a867 Mon Sep 17 00:00:00 2001 From: "Dmitry V. Levin" Date: Sun, 25 Dec 2016 00:20:30 +0000 Subject: [PATCH] msghdr: change register based size types from unsigned long to kernel_ureg_t * defs.h (dumpiov_in_msghdr): Change data_size argument type from unsigned long to kernel_ureg_t. * msghdr.h (print_struct_msghdr): Likewise. * msghdr.c (print_struct_msghdr): Likewise. Cast msghdr.msg_iovlen and msghdr.msg_controllen to kernel_ureg_t instead of unsigned long. (decode_msghdr, dumpiov_in_msghdr): Change data_size argument type from unsigned long to kernel_ureg_t. (SYS_FUNC(sendmsg)): Pass -1 instead of -1UL as data_size argument to decode_msghdr. * mmsghdr.c (print_struct_mmsghdr): Pass (kernel_ureg_t) -1 instead of -1UL as data_size argument to print_struct_msghdr. (dumpiov_in_mmsghdr): Cast msghdr.msg_iovlen to kernel_ureg_t instead of unsigned long. * syscall.c (dumpio): Pass -1 instead of -1UL as data_size argument to dumpiov_in_msghdr --- defs.h | 2 +- mmsghdr.c | 4 ++-- msghdr.c | 14 +++++++------- msghdr.h | 5 ++++- syscall.c | 2 +- 5 files changed, 15 insertions(+), 12 deletions(-) diff --git a/defs.h b/defs.h index 7a11d011..d8f0d1ba 100644 --- a/defs.h +++ b/defs.h @@ -601,7 +601,7 @@ extern void print_numeric_umode_t(unsigned short); extern void print_numeric_long_umask(unsigned long); extern void -dumpiov_in_msghdr(struct tcb *, kernel_ureg_t addr, unsigned long data_size); +dumpiov_in_msghdr(struct tcb *, kernel_ureg_t addr, kernel_ureg_t data_size); extern void dumpiov_in_mmsghdr(struct tcb *, kernel_ureg_t addr); diff --git a/mmsghdr.c b/mmsghdr.c index 788a0fa9..a21a3003 100644 --- a/mmsghdr.c +++ b/mmsghdr.c @@ -68,7 +68,7 @@ print_struct_mmsghdr(struct tcb *tcp, void *elem_buf, tprints("{msg_hdr="); print_struct_msghdr(tcp, &mmsg->msg_hdr, c->p_user_msg_namelen, - c->use_msg_len ? mmsg->msg_len : -1UL); + c->use_msg_len ? mmsg->msg_len : (kernel_ureg_t) -1); if (c->msg_len_vlen) { tprintf(", msg_len=%u", mmsg->msg_len); --c->msg_len_vlen; @@ -160,7 +160,7 @@ dumpiov_in_mmsghdr(struct tcb *const tcp, kernel_ureg_t addr) if (!fetched) break; tprintf(" = %lu buffers in vector %u\n", - (unsigned long) mmsg.msg_hdr.msg_iovlen, i); + (kernel_ureg_t) mmsg.msg_hdr.msg_iovlen, i); dumpiov_upto(tcp, mmsg.msg_hdr.msg_iovlen, (kernel_ureg_t) mmsg.msg_hdr.msg_iov, mmsg.msg_len); } diff --git a/msghdr.c b/msghdr.c index 0c87165c..da99e55f 100644 --- a/msghdr.c +++ b/msghdr.c @@ -332,7 +332,7 @@ decode_msg_control(struct tcb *const tcp, const kernel_ureg_t addr, void print_struct_msghdr(struct tcb *tcp, const struct msghdr *msg, const int *const p_user_msg_namelen, - const unsigned long data_size) + const kernel_ureg_t data_size) { const int msg_namelen = p_user_msg_namelen && (int) msg->msg_namelen > *p_user_msg_namelen @@ -351,13 +351,13 @@ print_struct_msghdr(struct tcb *tcp, const struct msghdr *msg, tprints(", msg_iov="); - tprint_iov_upto(tcp, (unsigned long) msg->msg_iovlen, + tprint_iov_upto(tcp, msg->msg_iovlen, (kernel_ureg_t) msg->msg_iov, decode, data_size); - tprintf(", msg_iovlen=%lu", (unsigned long) msg->msg_iovlen); + tprintf(", msg_iovlen=%lu", (kernel_ureg_t) msg->msg_iovlen); decode_msg_control(tcp, (kernel_ureg_t) msg->msg_control, msg->msg_controllen); - tprintf(", msg_controllen=%lu", (unsigned long) msg->msg_controllen); + tprintf(", msg_controllen=%lu", (kernel_ureg_t) msg->msg_controllen); tprints(", msg_flags="); printflags(msg_flags, msg->msg_flags, "MSG_???"); @@ -380,7 +380,7 @@ fetch_msghdr_namelen(struct tcb *const tcp, const kernel_ureg_t addr, static void decode_msghdr(struct tcb *const tcp, const int *const p_user_msg_namelen, - const kernel_ureg_t addr, const unsigned long data_size) + const kernel_ureg_t addr, const kernel_ureg_t data_size) { struct msghdr msg; @@ -392,7 +392,7 @@ decode_msghdr(struct tcb *const tcp, const int *const p_user_msg_namelen, void dumpiov_in_msghdr(struct tcb *const tcp, const kernel_ureg_t addr, - const unsigned long data_size) + const kernel_ureg_t data_size) { struct msghdr msg; @@ -406,7 +406,7 @@ SYS_FUNC(sendmsg) { printfd(tcp, tcp->u_arg[0]); tprints(", "); - decode_msghdr(tcp, 0, tcp->u_arg[1], -1UL); + decode_msghdr(tcp, 0, tcp->u_arg[1], -1); /* flags */ tprints(", "); printflags(msg_flags, tcp->u_arg[2], "MSG_???"); diff --git a/msghdr.h b/msghdr.h index 41dfd8ca..c693df31 100644 --- a/msghdr.h +++ b/msghdr.h @@ -12,6 +12,9 @@ struct mmsghdr { # endif struct tcb; -extern void print_struct_msghdr(struct tcb *, const struct msghdr *, const int *, unsigned long); + +extern void +print_struct_msghdr(struct tcb *, const struct msghdr *, + const int *p_user_msg_namelen, kernel_ureg_t data_size); #endif /* !STRACE_MSGHDR_H */ diff --git a/syscall.c b/syscall.c index 63d3b001..6839dabe 100644 --- a/syscall.c +++ b/syscall.c @@ -494,7 +494,7 @@ dumpio(struct tcb *tcp) dumpiov_upto(tcp, tcp->u_arg[2], tcp->u_arg[1], -1); break; case SEN_sendmsg: - dumpiov_in_msghdr(tcp, tcp->u_arg[1], -1UL); + dumpiov_in_msghdr(tcp, tcp->u_arg[1], -1); break; case SEN_sendmmsg: dumpiov_in_mmsghdr(tcp, tcp->u_arg[1]); -- 2.40.0