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