Nikolay Aleksandrov
2020-Jul-05 18:33 UTC
[Bridge] [PATCH net] bridge: mcast: Fix MLD2 Report IPv6 payload length check
On 05/07/2020 21:22, Linus L?ssing wrote:> Commit e57f61858b7c ("net: bridge: mcast: fix stale nsrcs pointer in > igmp3/mld2 report handling") introduced a small bug which would potentially > lead to accepting an MLD2 Report with a broken IPv6 header payload length > field. > > The check needs to take into account the 2 bytes for the "Number of > Sources" field in the "Multicast Address Record" before reading it. > And not the size of a pointer to this field. > > Fixes: e57f61858b7c ("net: bridge: mcast: fix stale nsrcs pointer in igmp3/mld2 report handling") > Signed-off-by: Linus L?ssing <linus.luessing at c0d3.blue> > --- > net/bridge/br_multicast.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) >I'd rather be more concerned with it rejecting a valid report due to wrong size. The ptr size would always be bigger. :) Thanks! Acked-by: Nikolay Aleksandrov <nikolay at cumulusnetworks.com>> diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c > index 83490bf73a13..4c4a93abde68 100644 > --- a/net/bridge/br_multicast.c > +++ b/net/bridge/br_multicast.c > @@ -1000,21 +1000,21 @@ static int br_ip6_multicast_mld2_report(struct net_bridge *br, > num = ntohs(icmp6h->icmp6_dataun.un_data16[1]); > len = skb_transport_offset(skb) + sizeof(*icmp6h); > > for (i = 0; i < num; i++) { > __be16 *_nsrcs, __nsrcs; > u16 nsrcs; > > nsrcs_offset = len + offsetof(struct mld2_grec, grec_nsrcs); > > if (skb_transport_offset(skb) + ipv6_transport_len(skb) < > - nsrcs_offset + sizeof(_nsrcs)) > + nsrcs_offset + sizeof(__nsrcs)) > return -EINVAL; > > _nsrcs = skb_header_pointer(skb, nsrcs_offset, > sizeof(__nsrcs), &__nsrcs); > if (!_nsrcs) > return -EINVAL; > > nsrcs = ntohs(*_nsrcs); > grec_len = struct_size(grec, grec_src, nsrcs); > >
Linus Lüssing
2020-Jul-05 19:08 UTC
[Bridge] [PATCH net] bridge: mcast: Fix MLD2 Report IPv6 payload length check
On Sun, Jul 05, 2020 at 09:33:13PM +0300, Nikolay Aleksandrov wrote:> On 05/07/2020 21:22, Linus L?ssing wrote: > > Commit e57f61858b7c ("net: bridge: mcast: fix stale nsrcs pointer in > > igmp3/mld2 report handling") introduced a small bug which would potentially > > lead to accepting an MLD2 Report with a broken IPv6 header payload length > > field. > > > > The check needs to take into account the 2 bytes for the "Number of > > Sources" field in the "Multicast Address Record" before reading it. > > And not the size of a pointer to this field. > > > > Fixes: e57f61858b7c ("net: bridge: mcast: fix stale nsrcs pointer in igmp3/mld2 report handling") > > Signed-off-by: Linus L?ssing <linus.luessing at c0d3.blue> > > --- > > net/bridge/br_multicast.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > I'd rather be more concerned with it rejecting a valid report due to wrong size. The ptr > size would always be bigger. :) > > Thanks! > Acked-by: Nikolay Aleksandrov <nikolay at cumulusnetworks.com>Aiy, you're right, it's the other way round. I'll update the commit message and send a v2 in a minute, with your Acked-by included.