diff options
author | 2009-01-29 16:39:24 +0000 | |
---|---|---|
committer | 2009-01-29 16:39:24 +0000 | |
commit | 8fa0670b034e43fbe1f633934add06b7bc4ddbec (patch) | |
tree | 02e3d1fdbe0a17058697a2839b8b9cab3b496259 | |
parent | from Yoshihiko Sarumaru, freebsd pr #76333: fseek(3) can clear EOF too; (diff) | |
download | wireguard-openbsd-8fa0670b034e43fbe1f633934add06b7bc4ddbec.tar.xz wireguard-openbsd-8fa0670b034e43fbe1f633934add06b7bc4ddbec.zip |
lsa_get_prefix() should return the number of bytes consumed and not the
number of bytes left in the buffer. OK stsp@
-rw-r--r-- | usr.sbin/ospf6d/rde_lsdb.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/usr.sbin/ospf6d/rde_lsdb.c b/usr.sbin/ospf6d/rde_lsdb.c index 163b1d5df14..781a6fbac7a 100644 --- a/usr.sbin/ospf6d/rde_lsdb.c +++ b/usr.sbin/ospf6d/rde_lsdb.c @@ -1,4 +1,4 @@ -/* $OpenBSD: rde_lsdb.c,v 1.15 2009/01/28 22:47:36 stsp Exp $ */ +/* $OpenBSD: rde_lsdb.c,v 1.16 2009/01/29 16:39:24 claudio Exp $ */ /* * Copyright (c) 2004, 2005 Claudio Jeker <claudio@openbsd.org> @@ -835,6 +835,7 @@ lsa_get_prefix(void *buf, u_int16_t len, struct rt_prefix *p) struct lsa_prefix *lp = buf; u_int32_t *buf32, *addr = NULL; u_int8_t prefixlen; + u_int16_t consumed = 0; if (len < sizeof(*lp)) return (-1); @@ -850,16 +851,16 @@ lsa_get_prefix(void *buf, u_int16_t len, struct rt_prefix *p) } buf32 = (u_int32_t *)(lp + 1); - len -= sizeof(*lp); + consumed += sizeof(*lp); for (; ((prefixlen + 31) / 32) > 0; prefixlen -= 32) { - if (len < sizeof(u_int32_t)) + if (len < consumed + sizeof(u_int32_t)) return (-1); if (addr) *addr++ = *buf32++; - len -= sizeof(u_int32_t); + consumed += sizeof(u_int32_t); } - return (len); + return (consumed); } |