diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c
index 6980625537caa15e5f0a479eccca15c3341073a3..f29ada827a6acfe04afd7e3752724013ac58c27f 100644
--- a/net/bridge/br_multicast.c
+++ b/net/bridge/br_multicast.c
@@ -723,7 +723,7 @@ static int br_multicast_igmp3_report(struct net_bridge *br,
 		if (!pskb_may_pull(skb, len))
 			return -EINVAL;
 
-		grec = (void *)(skb->data + len);
+		grec = (void *)(skb->data + len - sizeof(*grec));
 		group = grec->grec_mca;
 		type = grec->grec_type;