[PATCH v7] tests: extend for decoding of udev_monitor_netlink_header

Dmitry V. Levin ldv at altlinux.org
Thu Apr 12 02:38:07 UTC 2018


On Sun, Apr 08, 2018 at 11:48:56PM +0530, Harsha Sharma wrote:
> * tests/netlink_kobject_uevent.c: Add test_nlmsg_type_udev and
> test_nlmsg_type_kernel.
> ---
> Changes in v7:
> * Rebase against master
> * Use sys_send
> 
> Changes in v6:
> * invoke sprintrc before printf call in existing testcases
> * change argument of print_quoted_memory to DEFAULT_STRLEN
> * Add case for len == offset
> 
> Changes in v5:
> * invoke sprintrc before first printf call
> 
> Changes in v4:
> * invoke sprintrc before first printf call
> * minor fix
> 
> Changes in v3:
> * change format type
> 
> Changes in v2:
> * Add decoding of kernel messages
> * initialize udev_monitor_netlink_header with non-zero values
> * cover case for length exceeding size of structure
> 
>  tests/netlink_kobject_uevent.c | 78 ++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 78 insertions(+)
> 
> diff --git a/tests/netlink_kobject_uevent.c b/tests/netlink_kobject_uevent.c
> index 7edacd7d..29cf85c2 100644
> --- a/tests/netlink_kobject_uevent.c
> +++ b/tests/netlink_kobject_uevent.c
> @@ -27,9 +27,12 @@
>   */
>  
>  #include "tests.h"
> +#include <string.h>
>  #include <stdio.h>
>  #include <sys/socket.h>
> +#include <arpa/inet.h>
>  #include "netlink.h"
> +#include "netlink_kobject_uevent.h"
>  
>  static const char *errstr;
>  
> @@ -41,6 +44,79 @@ sys_send(const int fd, const void *const buf, const size_t len)
>  	return rc;
>  }
>  
> +static void
> +test_nlmsg_type_udev(const int fd)
> +{
> +	unsigned int offset = 8;
> +	struct udev_monitor_netlink_header uh = {
> +		.prefix = "libudev",
> +		.magic = htonl(0xfeedcafe),
> +		.header_size = sizeof(uh),
> +		.properties_off = 40,
> +		.properties_len = 299,
> +		.filter_subsystem_hash = htonl(0xc370b302),
> +		.filter_devtype_hash = htonl(0x10800000),
> +		.filter_tag_bloom_hi = htonl(0x2000400),
> +		.filter_tag_bloom_lo = htonl(0x10800000),
> +	};
> +	unsigned int len = sizeof(uh);
> +	char buf[len + offset];
> +	memcpy(buf, &uh, len);
> +	memcpy(buf + len, "12345678", offset);
> +
> +	sys_send(fd, &uh, len);
> +	printf("sendto(%d, {{prefix=\"%s\", magic=htonl(%#x)"
> +	       ", header_size=%u, properties_off=%u, properties_len=%u"
> +	       ", filter_subsystem_hash=htonl(%#x)"
> +	       ", filter_devtype_hash=htonl(%#x)"
> +	       ", filter_tag_bloom_hi=htonl(%#x)"
> +	       ", filter_tag_bloom_lo=htonl(%#x)}}, %u, MSG_DONTWAIT, NULL, "
> +	       "0) = %s\n"
> +	       , fd, uh.prefix,
> +	       ntohl(uh.magic), uh.header_size, uh.properties_off,
> +	       uh.properties_len, ntohl(uh.filter_subsystem_hash),
> +	       ntohl(uh.filter_devtype_hash), ntohl(uh.filter_tag_bloom_hi),
> +	       ntohl(uh.filter_tag_bloom_lo), len, errstr);
> +
> +	sys_send(fd, &buf, len + offset);
> +	printf("sendto(%d, {{prefix=\"%s\", magic=htonl(%#x)"
> +	       ", header_size=%u, properties_off=%u, properties_len=%u"
> +	       ", filter_subsystem_hash=htonl(%#x)"
> +	       ", filter_devtype_hash=htonl(%#x)"
> +	       ", filter_tag_bloom_hi=htonl(%#x)"
> +	       ", filter_tag_bloom_lo=htonl(%#x)}, "
> +	       , fd, uh.prefix,
> +	       ntohl(uh.magic), uh.header_size, uh.properties_off,
> +	       uh.properties_len, ntohl(uh.filter_subsystem_hash),
> +	       ntohl(uh.filter_devtype_hash), ntohl(uh.filter_tag_bloom_hi),
> +	       ntohl(uh.filter_tag_bloom_lo));
> +	print_quoted_memory(buf + len, offset);
> +	printf("}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
> +	       len + offset, errstr);
> +
> +}
> +
> +static void
> +test_nlmsg_type_kernel(const int fd)
> +{
> +	struct udev_monitor_netlink_header uh = {
> +		.prefix = "change@",
> +		.magic = htonl(0xfeedcafe),
> +		.header_size = sizeof(uh),
> +		.properties_off = 10,
> +		.properties_len = 299,
> +		.filter_subsystem_hash = htonl(0xfffffff),
> +		.filter_devtype_hash = htonl(0x10000000),
> +		.filter_tag_bloom_hi = htonl(0x2000400),
> +	};
> +
> +	sys_send(fd, &uh, sizeof(uh));
> +	printf("sendto(%d, ", fd);
> +	print_quoted_memory(&uh, DEFAULT_STRLEN);
> +	printf("..., %u, MSG_DONTWAIT, NULL, 0) = %s\n",
> +	       (unsigned) sizeof(uh), errstr);
> +}
> +
>  int
>  main(void)
>  {
> @@ -48,6 +124,8 @@ main(void)
>  
>  	int fd = create_nl_socket(NETLINK_KOBJECT_UEVENT);
>  
> +	test_nlmsg_type_udev(fd);
> +	test_nlmsg_type_kernel(fd);
>  	/* test using data that looks like a zero-length C string */
>  	char *const buf = tail_alloc(DEFAULT_STRLEN + 1);
>  	buf[0] = '=';

OK, I think this could be merged, thanks.

There is still a not yet covered case of unfetchable memory,
but it could be done later.


-- 
ldv
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: not available
URL: <http://lists.strace.io/pipermail/strace-devel/attachments/20180412/cb909936/attachment.bin>


More information about the Strace-devel mailing list