Date: Wed, 1 Oct 2014 18:58:58 +0200 From: Michael Tuexen <Michael.Tuexen@lurchi.franken.de> To: FreeBSD Net <freebsd-net@freebsd.org> Subject: UDP/IPv6 handling Message-ID: <B30E0A41-51B0-442C-9476-0D9E99C0D37C@lurchi.franken.de>
next in thread | raw e-mail | index | archive | help
Dear all, in udp6_input() we have the following code: if (nxt =3D=3D IPPROTO_UDP && plen !=3D ulen) { UDPSTAT_INC(udps_badlen); goto badunlocked; }=20 /* * Checksum extended UDP header and data. */ if (uh->uh_sum =3D=3D 0) { if (ulen > plen || ulen < sizeof(struct udphdr)) { UDPSTAT_INC(udps_nosum); goto badunlocked; } } I'm trying to understand the UDP code path... So (ulen > plen) can't be true. I'm wondering why do we only check the = ulen is not too short only in the case when the UDP checksum is zero. A zero checksum = should also never happen. I think we should check for ulen < sizeof(struct udphdr) in any case. Opinions? Best regards Michael=
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?B30E0A41-51B0-442C-9476-0D9E99C0D37C>