瀏覽代碼

dns: check length field in tcp response message

The received length field in the message may be greater than the
size of the 'answer' buffer in which the message resides. Currently,
ABUF_SIZE is 768. And if we get a larger 'alens[i]', it will result
in an out-of-bounds reading in __dns_parse().

To fix this, limit the length to the size of the received buffer.
Alexey Kodanev 2 年之前
父節點
當前提交
77327ed064
共有 1 個文件被更改,包括 1 次插入0 次删除
  1. 1 0
      src/network/lookup_name.c

+ 1 - 0
src/network/lookup_name.c

@@ -179,6 +179,7 @@ static int name_from_dns(struct address buf[static MAXADDRS], char canon[static
 
 	for (i=nq-1; i>=0; i--) {
 		ctx.rrtype = qtypes[i];
+		if (alens[i] > sizeof(abuf[i])) alens[i] = sizeof abuf[i];
 		__dns_parse(abuf[i], alens[i], dns_parse_callback, &ctx);
 	}