Page MenuHomeFreeBSD

D10004.diff
No OneTemporary

D10004.diff

Index: head/usr.sbin/syslogd/syslogd.c
===================================================================
--- head/usr.sbin/syslogd/syslogd.c
+++ head/usr.sbin/syslogd/syslogd.c
@@ -685,8 +685,10 @@
reapchild(WantReapchild);
if (MarkSet)
markit();
- if (WantDie)
+ if (WantDie) {
+ free(fdsr);
die(WantDie);
+ }
bzero(fdsr, howmany(fdsrmax+1, NFDBITS) *
sizeof(fd_mask));
@@ -2438,7 +2440,7 @@
struct allowedpeer *ap;
struct servent *se;
int masklen = -1;
- struct addrinfo hints, *res;
+ struct addrinfo hints, *res = NULL;
#ifdef INET
in_addr_t *addrp, *maskp;
#endif
@@ -2465,8 +2467,9 @@
ap->port = ntohs(se->s_port);
} else {
ap->port = strtol(cp1, &cp2, 0);
+ /* port not numeric */
if (*cp2 != '\0')
- return (-1); /* port not numeric */
+ goto err;
}
} else {
if ((se = getservbyname("syslog", "udp")))
@@ -2480,7 +2483,7 @@
strspn(cp1 + 1, "0123456789") == strlen(cp1 + 1)) {
*cp1 = '\0';
if ((masklen = atoi(cp1 + 1)) < 0)
- return (-1);
+ goto err;
}
#ifdef INET6
if (*s == '[') {
@@ -2526,8 +2529,7 @@
/* convert masklen to netmask */
*maskp = htonl(~((1 << (32 - masklen)) - 1));
} else {
- freeaddrinfo(res);
- return (-1);
+ goto err;
}
/* Lose any host bits in the network number. */
*addrp &= *maskp;
@@ -2535,10 +2537,9 @@
#endif
#ifdef INET6
case AF_INET6:
- if (masklen > 128) {
- freeaddrinfo(res);
- return (-1);
- }
+ if (masklen > 128)
+ goto err;
+
if (masklen < 0)
masklen = 128;
mask6p = (uint32_t *)&sstosin6(&ap->a_mask)->sin6_addr.s6_addr32[0];
@@ -2559,8 +2560,7 @@
break;
#endif
default:
- freeaddrinfo(res);
- return (-1);
+ goto err;
}
freeaddrinfo(res);
} else {
@@ -2596,7 +2596,13 @@
printf("port = %d\n", ap->port);
}
#endif
+
return (0);
+err:
+ if (res != NULL)
+ freeaddrinfo(res);
+ free(ap);
+ return (-1);
}
/*

File Metadata

Mime Type
text/plain
Expires
Mon, Sep 14, 8:27 PM (19 h, 33 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
38873648
Default Alt Text
D10004.diff (1 KB)

Event Timeline