diff options
| author | Robert Watson <rwatson@FreeBSD.org> | 2009-06-23 20:19:09 +0000 |
|---|---|---|
| committer | Robert Watson <rwatson@FreeBSD.org> | 2009-06-23 20:19:09 +0000 |
| commit | 8c0fec805f76bef04e007ca08552bd80ab64daf9 (patch) | |
| tree | 5ce1a7dad67026f119a839b3325454ebafa72c51 /sys/netinet/ip_options.c | |
| parent | abcd328be6335621a1152ed2ce08b4550ab4242c (diff) | |
Notes
Diffstat (limited to 'sys/netinet/ip_options.c')
| -rw-r--r-- | sys/netinet/ip_options.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/sys/netinet/ip_options.c b/sys/netinet/ip_options.c index b59d708c6d42..09a1d6279202 100644 --- a/sys/netinet/ip_options.c +++ b/sys/netinet/ip_options.c @@ -164,9 +164,8 @@ ip_dooptions(struct mbuf *m, int pass) goto bad; } ipaddr.sin_addr = ip->ip_dst; - ia = (struct in_ifaddr *) - ifa_ifwithaddr((struct sockaddr *)&ipaddr); - if (ia == NULL) { + if (ifa_ifwithaddr_check((struct sockaddr *)&ipaddr) + == 0) { if (opt == IPOPT_SSRR) { type = ICMP_UNREACH; code = ICMP_UNREACH_SRCFAIL; @@ -245,6 +244,7 @@ dropit: ip->ip_dst = ipaddr.sin_addr; (void)memcpy(cp + off, &(IA_SIN(ia)->sin_addr), sizeof(struct in_addr)); + ifa_free(&ia->ia_ifa); cp[IPOPT_OFFSET] += sizeof(struct in_addr); /* * Let ip_intr's mcast routing check handle mcast pkts @@ -286,6 +286,7 @@ dropit: } (void)memcpy(cp + off, &(IA_SIN(ia)->sin_addr), sizeof(struct in_addr)); + ifa_free(&ia->ia_ifa); cp[IPOPT_OFFSET] += sizeof(struct in_addr); break; @@ -331,6 +332,7 @@ dropit: continue; (void)memcpy(sin, &IA_SIN(ia)->sin_addr, sizeof(struct in_addr)); + ifa_free(&ia->ia_ifa); cp[IPOPT_OFFSET] += sizeof(struct in_addr); off += sizeof(struct in_addr); break; |
