On Sun, Jun 04, 2017 at 10:40:09PM +0300, Dmitry V. Levin wrote: > On Mon, Jul 11, 2016 at 12:54:59PM +0000, Fabien Siron wrote: > > Decode and print the type of the main netlink protocols. > > JingPiao Chen, I've reworked Fabien's commits from your netlink branch > up to and including this one (52dc63cc "netlink: add type decoding") > for merge into master. I've pushed them to ldv/netlink branch > and now waiting for a new version of your > "tests: add check for nlmsg_type decoding" commit to test these changes. > > A few notes about Fabien's code that might be useful for your netlink efforts: > > > @@ -96,7 +96,8 @@ print_iovec(struct tcb *tcp, void *elem_buf, size_t > > elem_size, void *data) > > len = c->data_size; > > if (c->data_size != (kernel_ulong_t) -1) > > c->data_size -= len; > > - decode_netlink(tcp, iov[0], len); > > + decode_netlink(tcp, *(int *)c->optional_data, > > + iov[0], len); > > break; > > default: > > printaddr(iov[0]); > > @@ -354,7 +354,7 @@ print_struct_msghdr(struct tcb *tcp, const struct > > msghdr *msg, > > tprints(", msg_iov="); > > > > tprint_iov_upto(tcp, msg->msg_iovlen, ptr_to_kulong(msg->msg_iov), > > - decode, data_size, NULL); > > + decode, data_size, &tcp->u_arg[0]); > > tprintf(", msg_iovlen=%" PRI_klu, (kernel_ulong_t) msg->msg_iovlen); > > > > decode_msg_control(tcp, ptr_to_kulong(msg->msg_control), > > If sizeof(tcp->u_arg[0]) > sizeof(int), a wrong value will be passed to > decode_netlink.
Thank you. [...] > > Well, not exactly into this because NETLINK_NETFILTER message types are not as > simple (even more complex than Fabien thought when he wrote this code). > > > @@ -132,20 +196,21 @@ decode_payload(struct tcb *const tcp, > > } > > > > static void > > -decode_nlmsghdr_with_payload(struct tcb *const tcp, > > +decode_nlmsghdr_with_payload(struct tcb *const tcp, int fd, > > const struct nlmsghdr *const nlmsghdr, > > const kernel_ulong_t addr, > > const kernel_ulong_t len) > > { > > tprints("{"); > > > > - print_nlmsghdr(tcp, nlmsghdr); > > + int proto = getfdnlproto(tcp, fd, netlink_protocols); > > + print_nlmsghdr(tcp, nlmsghdr, proto); > > getfdnlproto (get_fd_nl_family in my edition) is not cheap > (it invokes syscalls), needless calls should be avoided. I have read your code, I will rebase my code after you merge ldv/netlink branch. -- JingPiao Chen ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Strace-devel mailing list Strace-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/strace-devel