From b66e2621de1b69be3e117864607532a9bcbcce32 Mon Sep 17 00:00:00 2001 From: Sean Hefty Date: Thu, 9 Dec 2010 09:09:24 -0800 Subject: [PATCH] ibacm: check destination type when selecting source Add an explicit check for destination type in all cases when selecting the source. Fail requests if the source is not IPv4 or v6. Signed-off-by: Sean Hefty --- src/acm.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/acm.c b/src/acm.c index 67c4925..4ec01e8 100644 --- a/src/acm.c +++ b/src/acm.c @@ -1851,14 +1851,20 @@ static int acm_svr_select_src(struct acm_ep_addr_data *src, struct acm_ep_addr_d acm_log(2, "selecting source address\n"); memset(&addr, 0, sizeof addr); - if (dst->type == ACM_EP_INFO_ADDRESS_IP) { + switch (dst->type) { + case ACM_EP_INFO_ADDRESS_IP: ((struct sockaddr_in *) &addr)->sin_family = AF_INET; memcpy(&((struct sockaddr_in *) &addr)->sin_addr, dst->info.addr, 4); len = sizeof(struct sockaddr_in); - } else { + break; + case ACM_EP_INFO_ADDRESS_IP6: addr.sin6_family = AF_INET6; memcpy(&addr.sin6_addr, dst->info.addr, 16); len = sizeof(struct sockaddr_in6); + break; + default: + acm_log(1, "notice - bad destination type, cannot lookup source\n"); + return ACM_STATUS_EDESTTYPE; } s = socket(addr.sin6_family, SOCK_DGRAM, IPPROTO_UDP); -- 2.46.0