untrusted comment: signature from openbsd 5.6 base private key
RWR0EANmo9nqhl31oIXbJYtUWXNHHNzHGhJ+v2XZAAlwH5TwYDkTp2NHqjhnrJayp37glapQejDsm/LDGm1M5bnpkmHh7FGNGQ4=
OpenBSD 5.6 errata 8, Nov 17, 2014: Querying an invalid hostname with
gethostbyname(3) could cause a NULL deref.
/*
- * No address found in the dns packet. The blocking version
- * reports this as an error.
+ * No valid hostname or address found in the dns packet.
+ * Ignore it.
*/
if ((as->as_type == ASR_GETHOSTBYNAME &&
h->h.h_addr_list[0] == NULL) ||
- (as->as_type == ASR_GETHOSTBYADDR &&
- h->h.h_name == NULL)) {
+ h->h.h_name == NULL) {
free(h);
async_set_state(as, ASR_STATE_NEXT_DB);
break;
Index: lib/libc/asr/getnetnamadr_async.c
===================================================================
RCS file: /cvs/src/lib/libc/asr/getnetnamadr_async.c,v
retrieving revision 1.16
diff -u -p -r1.16 getnetnamadr_async.c
--- lib/libc/asr/getnetnamadr_async.c 23 Jul 2014 21:26:25 -0000 1.16
+++ lib/libc/asr/getnetnamadr_async.c 6 Nov 2014 13:00:40 -0000
@@ -239,11 +239,11 @@ getnetnamadr_async_run(struct asr_query
n->n.n_net = as->as.netnamadr.addr;
/*
- * No address found in the dns packet. The blocking version
- * reports this as an error.
+ * No valid hostname or address found in the dns packet.
+ * Ignore it.
*/
- if (as->as_type == ASR_GETNETBYNAME && n->n.n_net == 0) {
- /* XXX wrong */
+ if ((as->as_type == ASR_GETNETBYNAME && n->n.n_net == 0) ||
+ n->n.n_name == NULL) {
free(n);
async_set_state(as, ASR_STATE_NEXT_DB);
break;