diff mbox series

net: igmp: fix source address check for IGMPv3 reports

Message ID 20180119105046.44870-1-nbd@nbd.name
State Accepted, archived
Delegated to: David Miller
Headers show
Series net: igmp: fix source address check for IGMPv3 reports | expand

Commit Message

Felix Fietkau Jan. 19, 2018, 10:50 a.m. UTC
Commit "net: igmp: Use correct source address on IGMPv3 reports"
introduced a check to validate the source address of locally generated
IGMPv3 packets.
Instead of checking the local interface address directly, it uses
inet_ifa_match(fl4->saddr, ifa), which checks if the address is on the
local subnet (or equal to the point-to-point address if used).

This breaks for point-to-point interfaces, so check against
ifa->ifa_local directly.

Cc: Kevin Cernekee <cernekee@chromium.org>
Fixes: a46182b00290 ("net: igmp: Use correct source address on IGMPv3 reports")
Reported-by: Sebastian Gottschall <s.gottschall@dd-wrt.com>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
---
 net/ipv4/igmp.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

David Miller Jan. 22, 2018, 9:17 p.m. UTC | #1
From: Felix Fietkau <nbd@nbd.name>
Date: Fri, 19 Jan 2018 11:50:46 +0100

> Commit "net: igmp: Use correct source address on IGMPv3 reports"
> introduced a check to validate the source address of locally generated
> IGMPv3 packets.
> Instead of checking the local interface address directly, it uses
> inet_ifa_match(fl4->saddr, ifa), which checks if the address is on the
> local subnet (or equal to the point-to-point address if used).
> 
> This breaks for point-to-point interfaces, so check against
> ifa->ifa_local directly.
> 
> Cc: Kevin Cernekee <cernekee@chromium.org>
> Fixes: a46182b00290 ("net: igmp: Use correct source address on IGMPv3 reports")
> Reported-by: Sebastian Gottschall <s.gottschall@dd-wrt.com>
> Signed-off-by: Felix Fietkau <nbd@nbd.name>

Applied, thanks.
Felix Fietkau Jan. 23, 2018, 9:48 a.m. UTC | #2
On 2018-01-22 22:17, David Miller wrote:
> From: Felix Fietkau <nbd@nbd.name>
> Date: Fri, 19 Jan 2018 11:50:46 +0100
> 
>> Commit "net: igmp: Use correct source address on IGMPv3 reports"
>> introduced a check to validate the source address of locally generated
>> IGMPv3 packets.
>> Instead of checking the local interface address directly, it uses
>> inet_ifa_match(fl4->saddr, ifa), which checks if the address is on the
>> local subnet (or equal to the point-to-point address if used).
>> 
>> This breaks for point-to-point interfaces, so check against
>> ifa->ifa_local directly.
>> 
>> Cc: Kevin Cernekee <cernekee@chromium.org>
>> Fixes: a46182b00290 ("net: igmp: Use correct source address on IGMPv3 reports")
>> Reported-by: Sebastian Gottschall <s.gottschall@dd-wrt.com>
>> Signed-off-by: Felix Fietkau <nbd@nbd.name>
> 
> Applied, thanks.
Thanks. Please queue it up for stable as well, since the commit fixed by
this patch has already made it to stable kernels.

- Felix
David Miller Jan. 23, 2018, 4:18 p.m. UTC | #3
From: Felix Fietkau <nbd@nbd.name>
Date: Tue, 23 Jan 2018 10:48:59 +0100

> On 2018-01-22 22:17, David Miller wrote:
>> From: Felix Fietkau <nbd@nbd.name>
>> Date: Fri, 19 Jan 2018 11:50:46 +0100
>> 
>>> Commit "net: igmp: Use correct source address on IGMPv3 reports"
>>> introduced a check to validate the source address of locally generated
>>> IGMPv3 packets.
>>> Instead of checking the local interface address directly, it uses
>>> inet_ifa_match(fl4->saddr, ifa), which checks if the address is on the
>>> local subnet (or equal to the point-to-point address if used).
>>> 
>>> This breaks for point-to-point interfaces, so check against
>>> ifa->ifa_local directly.
>>> 
>>> Cc: Kevin Cernekee <cernekee@chromium.org>
>>> Fixes: a46182b00290 ("net: igmp: Use correct source address on IGMPv3 reports")
>>> Reported-by: Sebastian Gottschall <s.gottschall@dd-wrt.com>
>>> Signed-off-by: Felix Fietkau <nbd@nbd.name>
>> 
>> Applied, thanks.
> Thanks. Please queue it up for stable as well, since the commit fixed by
> this patch has already made it to stable kernels.

I did, thank you.
diff mbox series

Patch

diff --git a/net/ipv4/igmp.c b/net/ipv4/igmp.c
index 726f6b608274..2d49717a7421 100644
--- a/net/ipv4/igmp.c
+++ b/net/ipv4/igmp.c
@@ -332,7 +332,7 @@  static __be32 igmpv3_get_srcaddr(struct net_device *dev,
 		return htonl(INADDR_ANY);
 
 	for_ifa(in_dev) {
-		if (inet_ifa_match(fl4->saddr, ifa))
+		if (fl4->saddr == ifa->ifa_local)
 			return fl4->saddr;
 	} endfor_ifa(in_dev);