fou6: Prevent unbounded recursion in GUE error handler
I forgot to deal with IPv6 in commit11789039da
("fou: Prevent unbounded recursion in GUE error handler"). Now syzbot reported what might be the same type of issue, caused by gue6_err(), that is, handling exceptions for direct UDP encapsulation in GUE (UDP-in-UDP) leads to unbounded recursion in the GUE exception handler. As it probably doesn't make sense to set up GUE this way, and it's currently not even possible to configure this, skip exception handling for UDP (or UDP-Lite) packets encapsulated in UDP (or UDP-Lite) packets with GUE on IPv6. Reported-by: syzbot+4ad25edc7a33e4ab91e0@syzkaller.appspotmail.com Reported-by: Willem de Bruijn <willemdebruijn.kernel@gmail.com> Reported-by: Eric Dumazet <eric.dumazet@gmail.com> Fixes:b8a51b38e4
("fou, fou6: ICMP error handlers for FoU and GUE") Signed-off-by: Stefano Brivio <sbrivio@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
bc6e019b6e
commit
44039e0017
|
@ -131,6 +131,14 @@ static int gue6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
|
|||
if (validate_gue_flags(guehdr, optlen))
|
||||
return -EINVAL;
|
||||
|
||||
/* Handling exceptions for direct UDP encapsulation in GUE would lead to
|
||||
* recursion. Besides, this kind of encapsulation can't even be
|
||||
* configured currently. Discard this.
|
||||
*/
|
||||
if (guehdr->proto_ctype == IPPROTO_UDP ||
|
||||
guehdr->proto_ctype == IPPROTO_UDPLITE)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
skb_set_transport_header(skb, -(int)sizeof(struct icmp6hdr));
|
||||
ret = gue6_err_proto_handler(guehdr->proto_ctype, skb,
|
||||
opt, type, code, offset, info);
|
||||
|
|
Loading…
Reference in New Issue