xref: /xnu-8796.101.5/tests/netagent_kctl_header_infodisc_56190773.c (revision aca3beaa3dfbd42498b42c5e5ce20a938e6554e5)
1 #include <stdint.h>
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <string.h>
5 #include <strings.h>
6 
7 #include <sys/ioctl.h>
8 #include <sys/kern_control.h>
9 #include <sys/socket.h>
10 #include <sys/sys_domain.h>
11 #include <unistd.h>
12 
13 #include <darwintest.h>
14 
15 struct netagent_message_header {
16 	uint8_t message_type;
17 	uint8_t message_flags;
18 	uint8_t padding[2];
19 	uint32_t message_id;
20 	uint32_t message_error;
21 	uint32_t message_payload_length;
22 };
23 
24 T_DECL(netagent_kctl_header_infodisc_56190773, "Zero out padding in netagent_message_header.")
25 {
26 	int s;
27 	struct sockaddr_ctl sc;
28 	struct ctl_info ci;
29 	struct netagent_message_header m;
30 
31 	T_SETUPBEGIN;
32 	T_ASSERT_POSIX_SUCCESS(s = socket(AF_SYSTEM, SOCK_DGRAM, SYSPROTO_CONTROL), NULL);
33 
34 	bzero(&ci, sizeof(ci));
35 	strcpy(ci.ctl_name, "com.apple.net.netagent");
36 
37 	T_ASSERT_POSIX_SUCCESS(ioctl(s, CTLIOCGINFO, &ci), NULL);
38 
39 	bzero(&sc, sizeof(sc));
40 	sc.sc_id = ci.ctl_id;
41 	T_ASSERT_POSIX_SUCCESS(connect(s, (const struct sockaddr *)&sc, sizeof(sc)), NULL);
42 
43 	T_SETUPEND;
44 
45 	bzero(&m, sizeof(m));
46 	T_ASSERT_POSIX_SUCCESS(send(s, &m, sizeof(m), 0), NULL);
47 
48 	T_ASSERT_POSIX_SUCCESS(recv(s, &m, sizeof(m), 0), NULL);
49 	T_ASSERT_EQ(m.padding[0], 0, NULL);
50 	T_ASSERT_EQ(m.padding[1], 0, NULL);
51 }
52