[PATCH 2/2] tests: check decoding of NETLINK_SELINUX protocol

JingPiao Chen chenjingpiao at gmail.com
Fri Jul 14 16:22:57 UTC 2017


On Fri, Jul 14, 2017 at 01:16:37PM +0800, JingPiao Chen wrote:
[...]
> +static void
> +test_selnl_msg_setenforce(const int fd)
> +{
> +	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
> +	static char pattern[4096];
> +	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
> +
> +	static const struct selnl_msg_setenforce msg = {
> +		.val = 0xfbdcdfab
> +	};
> +	TEST_NETLINK_OBJECT(fd, nlh0,
> +			    SELNL_MSG_SETENFORCE, NLM_F_REQUEST,
> +			    pattern, msg,
> +			    PRINT_FIELD_D("{", msg, val);
> +			    printf("}"));
> +}
> +
> +static void
> +test_selnl_msg_policyload(const int fd)
> +{
> +	void *const nlh0 = tail_alloc(NLMSG_HDRLEN);
> +	static char pattern[4096];
> +	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);

Move ...

> +
> +	static const struct selnl_msg_policyload msg = {
> +		.seqno = 0xabdcfabc
> +	};
> +	TEST_NETLINK_OBJECT(fd, nlh0,
> +			    SELNL_MSG_POLICYLOAD, NLM_F_REQUEST,
> +			    pattern, msg,
> +			    PRINT_FIELD_U("{", msg, seqno);
> +			    printf("}"));
> +}
> +
>  int main(void)
>  {
>  	skip_if_unavailable("/proc/self/fd/");
> @@ -57,6 +103,9 @@ int main(void)
>  	int fd = create_nl_socket(NETLINK_SELINUX);
>  
>  	test_nlmsg_type(fd);
> +	test_selnl_msg_unspec(fd);
> +	test_selnl_msg_setenforce(fd);
> +	test_selnl_msg_policyload(fd);
>  
>  	printf("+++ exited with 0 +++\n");
>  
> diff --git a/tests/test_netlink.h b/tests/test_netlink.h
> index 7049128..b6f6ac9 100644
> --- a/tests/test_netlink.h
> +++ b/tests/test_netlink.h
> @@ -45,3 +45,33 @@
>  		      (type_), #type_,					\
>  		      (flags_), #flags_,				\
>  		      (data_len_), (src_), (slen_), __VA_ARGS__)
> +
> +#define TEST_NETLINK_OBJECT(fd_, nlh0_,					\
> +			    type_, flags_,				\
> +			    pattern_, obj_, ...)			\
> +	do {								\
> +		const unsigned int plen =				\
> +			sizeof(obj_) - 1 > DEFAULT_STRLEN		\
> +			? DEFAULT_STRLEN : (int) sizeof(obj_) - 1;	\

... here. The template of TEST_NETLINK_OBJECT is TEST_NLATTR_OBJECT.
I think pattern can declare here instead of in the caller.
If this thought is ok, I will send version 2.

> +		/* len < sizeof(obj_) */				\
> +		TEST_NETLINK_((fd_), (nlh0_),				\
> +			      (type_), #type_,				\
> +			      (flags_), #flags_,			\
> +			      plen, (pattern_), plen,			\
> +			      print_quoted_hex((pattern_), plen));	\
> +		/* short read of sizeof(obj_) */			\
> +		TEST_NETLINK_((fd_), (nlh0_),				\
> +			      (type_), #type_,				\
> +			      (flags_), #flags_,			\
> +			      sizeof(obj_),				\
> +			      (pattern_), sizeof(obj_) - 1,		\
> +			      printf("%p",				\
> +				     NLMSG_DATA(TEST_NETLINK_nlh)));	\
> +		/* sizeof(obj_) */					\
> +		TEST_NETLINK_((fd_), (nlh0_),				\
> +			      (type_), #type_,				\
> +			      (flags_), #flags_,			\
> +			      sizeof(obj_),				\
> +			      &(obj_), sizeof(obj_),			\
> +			      __VA_ARGS__);				\
> +	} while (0)

--
JingPiao Chen




More information about the Strace-devel mailing list