Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/usr.sbin/ldpd Fix more memory leaks in case malloc fails
details: https://anonhg.NetBSD.org/src/rev/53b6d4a34b85
branches: trunk
changeset: 760405:53b6d4a34b85
user: kefren <kefren%NetBSD.org@localhost>
date: Tue Jan 04 10:18:42 2011 +0000
description:
Fix more memory leaks in case malloc fails
diffstat:
usr.sbin/ldpd/mpls_interface.c | 43 +++++++++++++++++++++++++++++++----------
1 files changed, 32 insertions(+), 11 deletions(-)
diffs (91 lines):
diff -r a953f32eae9c -r 53b6d4a34b85 usr.sbin/ldpd/mpls_interface.c
--- a/usr.sbin/ldpd/mpls_interface.c Tue Jan 04 10:14:25 2011 +0000
+++ b/usr.sbin/ldpd/mpls_interface.c Tue Jan 04 10:18:42 2011 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: mpls_interface.c,v 1.3 2011/01/04 09:42:21 wiz Exp $ */
+/* $NetBSD: mpls_interface.c,v 1.4 2011/01/04 10:18:42 kefren Exp $ */
/*-
* Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -83,10 +83,12 @@
* let's loop until we have it..
*/
- so_dest = make_inet_union(inet_ntoa(*addr));
- if (len != 32)
- so_pref = from_cidr_to_union(len);
-
+ if ((so_dest = make_inet_union(inet_ntoa(*addr))) == NULL)
+ return LDP_E_MEMORY;
+ if (len != 32 && (so_pref = from_cidr_to_union(len)) == NULL) {
+ free(so_dest);
+ return LDP_E_MEMORY;
+ }
do {
if (kount == rlookup) {
debugp("No route for this prefix\n");
@@ -166,16 +168,25 @@
so_dest = make_mpls_union(lab->binding);
so_nexthop = malloc(sizeof(*so_nexthop));
if (!so_nexthop) {
+ free(so_dest);
fatalp("Out of memory\n");
return LDP_E_MEMORY;
}
memcpy(so_nexthop, so_gate, so_gate->sa.sa_len);
- so_tag = make_mpls_union(label);
+ if ((so_tag = make_mpls_union(label)) == NULL) {
+ free(so_dest);
+ free(so_nexthop);
+ fatalp("Out of memory\n");
+ return LDP_E_MEMORY;
+ }
if (add_route(so_dest, NULL, so_nexthop, NULL, so_tag, FREESO, RTM_ADD) != LDP_E_OK)
return LDP_E_ROUTE_ERROR;
/* Now, let's add tag to IPv4 route and point it to mpls interface */
- so_dest = make_inet_union(inet_ntoa(*addr));
+ if ((so_dest = make_inet_union(inet_ntoa(*addr))) == NULL) {
+ fatalp("Out of memory\n");
+ return LDP_E_MEMORY;
+ }
/* if prefixlen == 32 check if it's inserted as host
* and treat it as host. It may also be set as /32 prefix
@@ -183,12 +194,18 @@
*/
if ((len == 32) && (rgp->m_rtm.rtm_flags & RTF_HOST))
so_pref = NULL;
- else
- so_pref = from_cidr_to_union(len);
+ else if ((so_pref = from_cidr_to_union(len)) == NULL) {
+ free(so_dest);
+ fatalp("Out of memory\n");
+ return LDP_E_MEMORY;
+ }
/* Add tag to route */
so_nexthop = malloc(sizeof(*so_nexthop));
if (!so_nexthop) {
+ free(so_dest);
+ if (so_pref != NULL)
+ free(so_pref);
fatalp("Out of memory\n");
return LDP_E_MEMORY;
}
@@ -196,9 +213,13 @@
so_tag = make_mpls_union(label);
if (so_oldifa != NULL) {
so_ifa = malloc(sizeof(*so_ifa));
- if (!so_ifa) {
+ if (so_ifa == NULL) {
+ free(so_dest);
+ if (so_pref != NULL)
+ free(so_pref);
+ free(so_tag);
+ free(so_nexthop);
fatalp("Out of memory\n");
- free(so_nexthop);
return LDP_E_MEMORY;
}
memcpy(so_ifa, so_oldifa, so_oldifa->sa.sa_len);
Home |
Main Index |
Thread Index |
Old Index