netagent_kctl_header_infodisc_56190773.c   [plain text]


#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>

#include <sys/ioctl.h>
#include <sys/kern_control.h>
#include <sys/socket.h>
#include <sys/sys_domain.h>
#include <unistd.h>

#include <darwintest.h>

struct netagent_message_header {
	uint8_t message_type;
	uint8_t message_flags;
	uint8_t padding[2];
	uint32_t message_id;
	uint32_t message_error;
	uint32_t message_payload_length;
};

T_DECL(netagent_kctl_header_infodisc_56190773, "Zero out padding in netagent_message_header.")
{
	int s;
	struct sockaddr_ctl sc;
	struct ctl_info ci;
	struct netagent_message_header m;

	T_SETUPBEGIN;
	T_ASSERT_POSIX_SUCCESS(s = socket(AF_SYSTEM, SOCK_DGRAM, SYSPROTO_CONTROL), NULL);

	bzero(&ci, sizeof(ci));
	strcpy(ci.ctl_name, "com.apple.net.netagent");

	T_ASSERT_POSIX_SUCCESS(ioctl(s, CTLIOCGINFO, &ci), NULL);

	bzero(&sc, sizeof(sc));
	sc.sc_id = ci.ctl_id;
	T_ASSERT_POSIX_SUCCESS(connect(s, (const struct sockaddr *)&sc, sizeof(sc)), NULL);

	T_SETUPEND;

	bzero(&m, sizeof(m));
	T_ASSERT_POSIX_SUCCESS(send(s, &m, sizeof(m), 0), NULL);

	T_ASSERT_POSIX_SUCCESS(recv(s, &m, sizeof(m), 0), NULL);
	T_ASSERT_EQ(m.padding[0], 0, NULL);
	T_ASSERT_EQ(m.padding[1], 0, NULL);
}