Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 15 Feb 2013 02:01:41 +0000 (UTC)
From:      Lawrence Stewart <lstewart@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r246817 - projects/diffused_head/sbin/ipfw/diffuse_exporter
Message-ID:  <201302150201.r1F21fnI051547@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: lstewart
Date: Fri Feb 15 02:01:40 2013
New Revision: 246817
URL: http://svnweb.freebsd.org/changeset/base/246817

Log:
  Mitigate against possible unaligned access when converting from sockaddr to
  sockaddr_in.
  
  Reproted by:	clang

Modified:
  projects/diffused_head/sbin/ipfw/diffuse_exporter/diffuse_exporter.c

Modified: projects/diffused_head/sbin/ipfw/diffuse_exporter/diffuse_exporter.c
==============================================================================
--- projects/diffused_head/sbin/ipfw/diffuse_exporter/diffuse_exporter.c	Fri Feb 15 01:27:54 2013	(r246816)
+++ projects/diffused_head/sbin/ipfw/diffuse_exporter/diffuse_exporter.c	Fri Feb 15 02:01:40 2013	(r246817)
@@ -211,10 +211,9 @@ parse_anode(char *s, struct action_node 
 
 	if (curai != NULL) {
 		v4sockaddr = (struct sockaddr_in *)&an->an_details;
+		bcopy(curai->ai_addr, v4sockaddr, sizeof(struct sockaddr_in));
 		v4sockaddr->sin_family = curai->ai_family;
 		v4sockaddr->sin_port = port;
-		v4sockaddr->sin_addr.s_addr =
-		    ((struct sockaddr_in *)curai->ai_addr)->sin_addr.s_addr;
 	} else {
 		errx(EX_USAGE, "getaddrinfo() returned non IPv4 details");
 	}
@@ -252,6 +251,7 @@ parse_anodes(char *oparg)
 static void
 parse_class(char *oparg, uint32_t *class_ip, uint16_t *class_port)
 {
+	struct sockaddr_in v4sockaddr;
 	struct addrinfo *ai, *curai;
 	char *errptr, *p;
 	int ret;
@@ -276,8 +276,8 @@ parse_class(char *oparg, uint32_t *class
 		curai = curai->ai_next;
 
 	if (curai != NULL) {
-		*class_ip =
-		    ((struct sockaddr_in *)curai->ai_addr)->sin_addr.s_addr;
+		bcopy(curai->ai_addr, &v4sockaddr, sizeof(struct sockaddr_in));
+		*class_ip = v4sockaddr.sin_addr.s_addr;
 	} else {
 		errx(EX_USAGE, "getaddrinfo() returned non IPv4 details");
 	}
@@ -366,7 +366,7 @@ send_anode_pkt(struct action_node *anode
 
 	if (anode->proto == IPPROTO_SCTP) {
 		/* Send templates and data over different streams. */
-		if (tpllen > sizeof(struct dip_header)) {
+		if (tpllen > (int)sizeof(struct dip_header)) {
 			hdr = (struct dip_header *)colpkt + tplindex;
 			hdr->msg_len = htons(tpllen);
 			hdr->seq_no = htonl(anode->seq_no++);
@@ -377,7 +377,7 @@ send_anode_pkt(struct action_node *anode
 			    tpllen, &sinfo, 0);
 		}
 
-		if (!ret && datalen > sizeof(struct dip_header)) {
+		if (!ret && datalen > (int)sizeof(struct dip_header)) {
 			hdr = (struct dip_header *)colpkt + dataindex;
 			hdr->msg_len = htons(datalen);
 			hdr->seq_no = htonl(anode->seq_no++);
@@ -628,7 +628,7 @@ handle_anode_state_request(struct action
 		offs += sizeof(struct dip_templ_header);
 
 		/* Add the IE data for the default flowrule template. */
-		for (i = 0; i < N_DEFAULT_FLOWRULE_TEMPLATE_ITEMS; i++) {
+		for (i = 0; i < (int)N_DEFAULT_FLOWRULE_TEMPLATE_ITEMS; i++) {
 			be16enc(dstbuf + offs,
 			    dip_info[def_flowrule_template[i]].id);
 			offs += sizeof(uint16_t);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201302150201.r1F21fnI051547>