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 ------------------------------------------------------------------------------ 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