xref: /xnu-11417.101.15/tests/netagent_kctl_header_infodisc_56190773.c (revision e3723e1f17661b24996789d8afc084c0c3303b26)
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 // netagent_message_header, but with the padding between
16 // message_flags and message_id explicitly specified.
17 struct netagent_message_header_with_padding {
18 	uint8_t message_type;
19 	uint8_t message_flags;
20 	uint8_t padding[2];
21 	uint32_t message_id;
22 	uint32_t message_error;
23 	uint32_t message_payload_length;
24 };
25 
26 T_DECL(netagent_kctl_header_infodisc_56190773, "Zero out padding in netagent_message_header.")
27 {
28 	int s;
29 	struct sockaddr_ctl sc;
30 	struct ctl_info ci;
31 	struct netagent_message_header_with_padding m;
32 
33 	T_SETUPBEGIN;
34 	T_ASSERT_POSIX_SUCCESS(s = socket(AF_SYSTEM, SOCK_DGRAM, SYSPROTO_CONTROL), NULL);
35 
36 	bzero(&ci, sizeof(ci));
37 	strcpy(ci.ctl_name, "com.apple.net.netagent");
38 
39 	T_ASSERT_POSIX_SUCCESS(ioctl(s, CTLIOCGINFO, &ci), NULL);
40 
41 	bzero(&sc, sizeof(sc));
42 	sc.sc_id = ci.ctl_id;
43 	T_ASSERT_POSIX_SUCCESS(connect(s, (const struct sockaddr *)&sc, sizeof(sc)), NULL);
44 
45 	T_SETUPEND;
46 
47 	bzero(&m, sizeof(m));
48 	T_ASSERT_POSIX_SUCCESS(send(s, &m, sizeof(m), 0), NULL);
49 
50 	T_ASSERT_POSIX_SUCCESS(recv(s, &m, sizeof(m), 0), NULL);
51 	T_ASSERT_EQ(m.padding[0], 0, NULL);
52 	T_ASSERT_EQ(m.padding[1], 0, NULL);
53 }
54