Messages in this thread | | | Date | Mon, 11 Mar 2019 10:29:37 -0700 (PDT) | Subject | Re: [PATCH net] net: sit: fix UBSAN Undefined behaviour in check_6rd | From | David Miller <> |
| |
From: linmiaohe <linmiaohe@huawei.com> Date: Mon, 11 Mar 2019 16:29:32 +0800
> @@ -778,8 +778,9 @@ static bool check_6rd(struct ip_tunnel *tunnel, const struct in6_addr *v6dst, > pbw0 = tunnel->ip6rd.prefixlen >> 5; > pbi0 = tunnel->ip6rd.prefixlen & 0x1f; > > - d = (ntohl(v6dst->s6_addr32[pbw0]) << pbi0) >> > - tunnel->ip6rd.relay_prefixlen; > + d = tunnel->ip6rd.relay_prefixlen < 32 ? > + (ntohl(v6dst->s6_addr32[pbw0]) << pbi0) >> > + tunnel->ip6rd.relay_prefixlen : 0; >
I hate the fact that we have to guard against something which the rest of the code makes sure NEVER EVER happens.
Every assignment of ->relay_prefixlen is guarded by a check against 32.
I don't like this at all, and I have to put my foot down somehow.
So I'm not applying this, sorry.
| |