Module Name: src
Committed By: roy
Date: Thu Jun 27 15:46:40 UTC 2013
Modified Files:
src/usr.sbin/rtadvd: rtadvd.c
Log Message:
Check valid lengths of RDNSS and DNSSL options when rtadvd receives RA/RS.
rtadvd doesn't actually look into the option itself, but it may do in the
future to warn about consistency.
To generate a diff of this commit:
cvs rdiff -u -r1.41 -r1.42 src/usr.sbin/rtadvd/rtadvd.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/usr.sbin/rtadvd/rtadvd.c
diff -u src/usr.sbin/rtadvd/rtadvd.c:1.41 src/usr.sbin/rtadvd/rtadvd.c:1.42
--- src/usr.sbin/rtadvd/rtadvd.c:1.41 Fri Dec 14 09:48:31 2012
+++ src/usr.sbin/rtadvd/rtadvd.c Thu Jun 27 15:46:40 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: rtadvd.c,v 1.41 2012/12/14 09:48:31 roy Exp $ */
+/* $NetBSD: rtadvd.c,v 1.42 2013/06/27 15:46:40 roy Exp $ */
/* $KAME: rtadvd.c,v 1.92 2005/10/17 14:40:02 suz Exp $ */
/*
@@ -1379,7 +1379,13 @@ nd6_options(struct nd_opt_hdr *hdr, int
if ((hdr->nd_opt_type == ND_OPT_MTU &&
(optlen != sizeof(struct nd_opt_mtu))) ||
((hdr->nd_opt_type == ND_OPT_PREFIX_INFORMATION &&
- optlen != sizeof(struct nd_opt_prefix_info)))) {
+ optlen != sizeof(struct nd_opt_prefix_info))) ||
+ (hdr->nd_opt_type == ND_OPT_RDNSS &&
+ ((optlen < (int)sizeof(struct nd_opt_rdnss) ||
+ (optlen - sizeof(struct nd_opt_rdnss)) % 16 != 0))) ||
+ (hdr->nd_opt_type == ND_OPT_DNSSL &&
+ optlen < (int)sizeof(struct nd_opt_dnssl)))
+ {
syslog(LOG_INFO, "<%s> invalid option length",
__func__);
continue;
@@ -1388,6 +1394,8 @@ nd6_options(struct nd_opt_hdr *hdr, int
switch (hdr->nd_opt_type) {
case ND_OPT_TARGET_LINKADDR:
case ND_OPT_REDIRECTED_HEADER:
+ case ND_OPT_RDNSS:
+ case ND_OPT_DNSSL:
break; /* we don't care about these options */
case ND_OPT_SOURCE_LINKADDR:
case ND_OPT_MTU: