Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 1 Oct 2014 19:34:04 -0400
From:      Tom Pusateri <pusateri@bangj.com>
To:        Michael Tuexen <Michael.Tuexen@lurchi.franken.de>
Cc:        FreeBSD Net <freebsd-net@freebsd.org>
Subject:   Re: UDP/IPv6 handling
Message-ID:  <2DA609BE-5704-463A-99BB-E64CB71931B2@bangj.com>
In-Reply-To: <B30E0A41-51B0-442C-9476-0D9E99C0D37C@lurchi.franken.de>
References:  <B30E0A41-51B0-442C-9476-0D9E99C0D37C@lurchi.franken.de>

next in thread | previous in thread | raw e-mail | index | archive | help
Lots of embedded devices (like Cisco IP Phones) send TFTP requests with 0 ch=
ecksums.=20

Tom



> On Oct 1, 2014, at 12:58 PM, Michael Tuexen <Michael.Tuexen@lurchi.franken=
.de> wrote:
>=20
> Dear all,
>=20
> in udp6_input() we have the following code:
>=20
>    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;
>        }
>    }
>=20
> I'm trying to understand the UDP code path...
>=20
> So (ulen > plen) can't be true. I'm wondering why do we only check the ule=
n is not too
> short only in the case when the UDP checksum is zero. A zero checksum shou=
ld also never happen.
>=20
> I think we should check for ulen < sizeof(struct udphdr) in any case.
>=20
> Opinions?
>=20
> Best regards
> Michael
> _______________________________________________
> freebsd-net@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-net
> To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org"



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?2DA609BE-5704-463A-99BB-E64CB71931B2>