* netlink.c: decode family NETLINK_KOBJECT_UEVENT if prefix is libudev * linux/netlink_kobject_uevent.h: New struct (udev_monitor_netlink_header)
Signed-off-by: Harsha Sharma <harshasharmai...@gmail.com> --- linux/netlink_kobject_uevent.h | 16 ++++++++++++++++ netlink.c | 27 ++++++++++++++++++++++++++- 2 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 linux/netlink_kobject_uevent.h diff --git a/linux/netlink_kobject_uevent.h b/linux/netlink_kobject_uevent.h new file mode 100644 index 00000000..d83ccad5 --- /dev/null +++ b/linux/netlink_kobject_uevent.h @@ -0,0 +1,16 @@ +#ifndef STRACE_LINUX_NETLINK_KOBJECT_UEVENT_H +#define STRACE_LINUX_NETLINK_KOBJECT_UEVENT_H + +struct udev_monitor_netlink_header { + char prefix[8]; + unsigned int magic; + unsigned int header_size; + unsigned int properties_off; + unsigned int properties_len; + unsigned int filter_subsystem_hash; + unsigned int filter_devtype_hash; + unsigned int filter_tag_bloom_hi; + unsigned int filter_tag_bloom_lo; +}; + +#endif /* !STRACE_LINUX_NETLINK_KOBJECT_UEVENT_H */ diff --git a/netlink.c b/netlink.c index 6b9a1f5c..e991ed86 100644 --- a/netlink.c +++ b/netlink.c @@ -32,6 +32,7 @@ #include "nlattr.h" #include <linux/audit.h> #include <linux/rtnetlink.h> +#include <linux/netlink_kobject_uevent.h> #include <linux/xfrm.h> #include "xlat/netlink_ack_flags.h" #include "xlat/netlink_delete_flags.h" @@ -183,6 +184,29 @@ decode_nlmsg_type_netfilter(const struct xlat *const xlat, tprintf("%#x", msg_type); } +static bool +decode_nlmsg_type_kobject_uevent(struct tcb *tcp, kernel_ulong_t addr, + kernel_ulong_t len, + const void *const opaque_data) +{ + struct udev_monitor_netlink_header uh; + const char *prefix = "libudev"; + + if (len < sizeof(uh)) + return false; + if (!umove_or_printaddr(tcp, addr, &uh) && + strcmp(uh.prefix, prefix) == 0) { + tprintf("{prefix=%s, magic=%u, header_size=%u, properties_off=%u, properties_len=%u, filter_subsystem_hash=%u, filter_devtype_hash=%u, filter_tag_bloom_hi=%u, filter_tag_bloom_lo=%u}", uh.prefix, + uh.magic, uh.header_size, uh.properties_off, + uh.properties_len, uh.filter_subsystem_hash, + uh.filter_devtype_hash, uh.filter_tag_bloom_hi, + uh.filter_tag_bloom_lo); + return true; + } + return false; +} + + typedef void (*nlmsg_types_decoder_t)(const struct xlat *, uint16_t type, const char *dflt); @@ -628,7 +652,8 @@ decode_netlink(struct tcb *const tcp, const int family = get_fd_nl_family(tcp, fd); if (family == NETLINK_KOBJECT_UEVENT) { - printstrn(tcp, addr, len); + if (!decode_nlmsg_type_kobject_uevent(tcp, addr, len, NULL)) + printstrn(tcp, addr, len); return; } -- 2.11.0 ------------------------------------------------------------------------------ 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