From 27027bb343909122893e418ee9e18070c1940c44 Mon Sep 17 00:00:00 2001 From: hailfinger Date: Sat, 5 Sep 2009 01:10:23 +0000 Subject: Fix strict aliasing in serprog. Initialize the sockaddr,sockaddr_in union directly instead of running memset later. Signed-off-by: Carl-Daniel Hailfinger Acked-by: Stefan Reinauer git-svn-id: https://code.coreboot.org/svn/flashrom/trunk@715 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1 --- serprog.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) (limited to 'serprog.c') diff --git a/serprog.c b/serprog.c index 23e1a0c..ee72da3 100644 --- a/serprog.c +++ b/serprog.c @@ -105,7 +105,7 @@ static int sp_opensocket(char *ip, unsigned int port) { int flag = 1; struct hostent *hostPtr = NULL; - struct sockaddr_in sp; + union { struct sockaddr_in si; struct sockaddr s; } sp = {}; int sock; printf_debug(MSGHEADER "IP %s port %d\n", ip, port); sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); @@ -117,11 +117,10 @@ static int sp_opensocket(char *ip, unsigned int port) if (NULL == hostPtr) sp_die("Error: cannot resolve"); } - memset(&sp, 0, sizeof(sp)); - sp.sin_family = AF_INET; - sp.sin_port = htons(port); - (void)memcpy(&sp.sin_addr, hostPtr->h_addr, hostPtr->h_length); - if (connect(sock, (struct sockaddr *)&sp, sizeof(sp)) < 0) { + sp.si.sin_family = AF_INET; + sp.si.sin_port = htons(port); + (void)memcpy(&sp.si.sin_addr, hostPtr->h_addr, hostPtr->h_length); + if (connect(sock, &sp.s, sizeof(sp.si)) < 0) { close(sock); sp_die("Error: serprog cannot connect"); } -- cgit v1.2.1