summaryrefslogtreecommitdiff
path: root/usr/src/lib/libsocket/inet
diff options
context:
space:
mode:
authorAndrew Stormont <astormont@racktopsystems.com>2017-06-28 00:53:45 +0100
committerDan McDonald <danmcd@joyent.com>2017-07-10 09:13:05 -0400
commit51c62b7bcb67b1e65d7e2773b20f465cf58b91b2 (patch)
tree8ce2c5a3182cfeb7b12339431b67a6dddaedc558 /usr/src/lib/libsocket/inet
parent1ee1bcba6f9a17099e11b5bb0d1eeab71c729aa3 (diff)
downloadillumos-joyent-51c62b7bcb67b1e65d7e2773b20f465cf58b91b2.tar.gz
8429 getallifaddrs dereferences invalid pointer causing SIGSEGV
Reviewed by: Sebastian Wiedenroth <sw@core.io> Reviewed by: Yuri Pankov <yuripv@gmx.com> Reviewed by: Toomas Soome <tsoome@me.com> Approved by: Dan McDonald <danmcd@joyent.com>
Diffstat (limited to 'usr/src/lib/libsocket/inet')
-rw-r--r--usr/src/lib/libsocket/inet/getifaddrs.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/usr/src/lib/libsocket/inet/getifaddrs.c b/usr/src/lib/libsocket/inet/getifaddrs.c
index df6d4199d1..66dfedbd10 100644
--- a/usr/src/lib/libsocket/inet/getifaddrs.c
+++ b/usr/src/lib/libsocket/inet/getifaddrs.c
@@ -21,6 +21,7 @@
/*
* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright 2017 RackTop Systems.
*/
#include <netdb.h>
@@ -102,6 +103,14 @@ getallifaddrs(sa_family_t af, struct ifaddrs **ifap, int64_t flags)
int sock6;
int err;
+ /*
+ * Initialize ifap to NULL so we can safely call freeifaddrs
+ * on it in case of error.
+ */
+ if (ifap == NULL)
+ return (EINVAL);
+ *ifap = NULL;
+
if ((sock4 = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
return (-1);
if ((sock6 = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) {
@@ -123,7 +132,6 @@ retry:
*/
prev = NULL;
lifrp = buf;
- *ifap = NULL;
for (n = 0; n < numifs; n++, lifrp++) {
/* Prepare for the ioctl call */