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