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

Reply via email to