Linus Lüssing
2020-Jul-05 19:10 UTC
[Bridge] [PATCH net v2] bridge: mcast: Fix MLD2 Report IPv6 payload length check
Commit e57f61858b7c ("net: bridge: mcast: fix stale nsrcs pointer in igmp3/mld2 report handling") introduced a bug in the IPv6 header payload length check which would potentially lead to rejecting a valid MLD2 Report: 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") Acked-by: Nikolay Aleksandrov <nikolay at cumulusnetworks.com> Signed-off-by: Linus L?ssing <linus.luessing at c0d3.blue> --- Changelog v2: * updated commit message, the issue is accidentally rejcting a valid and not accepting an invalid MLD2 Report net/bridge/br_multicast.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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); -- 2.27.0
David Miller
2020-Jul-07 22:39 UTC
[Bridge] [PATCH net v2] bridge: mcast: Fix MLD2 Report IPv6 payload length check
From: Linus L?ssing <linus.luessing at c0d3.blue> Date: Sun, 5 Jul 2020 21:10:17 +0200> Commit e57f61858b7c ("net: bridge: mcast: fix stale nsrcs pointer in > igmp3/mld2 report handling") introduced a bug in the IPv6 header payload > length check which would potentially lead to rejecting a valid MLD2 Report: > > 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") > Acked-by: Nikolay Aleksandrov <nikolay at cumulusnetworks.com> > Signed-off-by: Linus L?ssing <linus.luessing at c0d3.blue>Applied and queued up for -stable, thank you.