skip incomplete entries in /etc/hosts and /etc/networks
authoreric <eric@openbsd.org>
Tue, 13 May 2014 11:57:35 +0000 (11:57 +0000)
committereric <eric@openbsd.org>
Tue, 13 May 2014 11:57:35 +0000 (11:57 +0000)
fix null deref spotted by Seth Hanford, pinpointed by dtucker@

ok florian@

lib/libc/asr/gethostnamadr_async.c
lib/libc/asr/getnetnamadr_async.c

index 674bcb4..f94d410 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: gethostnamadr_async.c,v 1.28 2014/03/26 18:13:15 eric Exp $   */
+/*     $OpenBSD: gethostnamadr_async.c,v 1.29 2014/05/13 11:57:35 eric Exp $   */
 /*
  * Copyright (c) 2012 Eric Faurot <eric@openbsd.org>
  *
@@ -432,6 +432,10 @@ hostent_file_match(FILE *f, int reqtype, int family, const char *data,
                        return (NULL);
                }
 
+               /* there must be an address and at least one name */
+               if (n < 2)
+                       continue;
+
                if (reqtype == ASR_GETHOSTBYNAME) {
                        for (i = 1; i < n; i++) {
                                if (strcasecmp(data, tokens[i]))
index ce3e8cf..f030ca9 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: getnetnamadr_async.c,v 1.14 2014/03/26 18:13:15 eric Exp $    */
+/*     $OpenBSD: getnetnamadr_async.c,v 1.15 2014/05/13 11:57:35 eric Exp $    */
 /*
  * Copyright (c) 2012 Eric Faurot <eric@openbsd.org>
  *
@@ -287,6 +287,10 @@ netent_file_match(FILE *f, int reqtype, const char *data)
                        return (NULL);
                }
 
+               /* there must be an address and at least one name */
+               if (n < 2)
+                       continue;
+
                if (reqtype == ASR_GETNETBYADDR) {
                        net = inet_network(tokens[1]);
                        if (memcmp(&net, data, sizeof net) == 0)