Since our target is not in the same process, the netlink macros NLMSG_* must be rewritten for strace.
* netlink.c (nlmsg_ok, nlmsg_next): New functions. --- netlink.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/netlink.c b/netlink.c index 738c639..bb2c3a7 100644 --- a/netlink.c +++ b/netlink.c @@ -33,6 +33,32 @@ #include "xlat/netlink_flags.h" #include "xlat/netlink_types.h" +/* since our target is not in the same process, here are some utils for nlmsg */ +static int +nlmsg_ok(struct tcb *tcp, unsigned long nlh, unsigned long len) { + struct nlmsghdr nlmsghdr; + + if (umoven(tcp, nlh, sizeof(struct nlmsghdr), &nlmsghdr) == -1) + return 0; + + return (len >= (int)sizeof(struct nlmsghdr)) && + nlmsghdr.nlmsg_len >= sizeof(struct nlmsghdr) && + nlmsghdr.nlmsg_len <= len; +} + +static unsigned long +nlmsg_next(struct tcb *tcp, unsigned long nlh, unsigned long *len) { + struct nlmsghdr nlmsghdr; + + if (umoven(tcp, nlh, sizeof(struct nlmsghdr), &nlmsghdr) == -1) + return 0; + + *len -= NLMSG_ALIGN(nlmsghdr.nlmsg_len); + + return (unsigned long) + ((char *)(nlh) + NLMSG_ALIGN(nlmsghdr.nlmsg_len)); +} + void decode_netlink_or_printaddr(struct tcb *tcp, unsigned long addr, unsigned long size) -- 2.8.3 ------------------------------------------------------------------------------ What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic patterns at an interface-level. Reveals which users, apps, and protocols are consuming the most bandwidth. Provides multi-vendor support for NetFlow, J-Flow, sFlow and other flows. Make informed decisions using capacity planning reports. https://ad.doubleclick.net/ddm/clk/305295220;132659582;e _______________________________________________ Strace-devel mailing list Strace-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/strace-devel