Subject: Re: WARNING in __rcu_read_unlock

From: Stefano Brivio <[email-masked]>
Date: Tue, 18 Dec 2018 00:18:28 +0100

On Mon, 17 Dec 2018 16:53:36 +0100
Dmitry Vyukov <[email-masked]> wrote:

> On Mon, Dec 17, 2018 at 4:24 PM Stefano Brivio <[email-masked]> wrote:
> >
> > On Mon, 17 Dec 2018 06:57:35 -0800
> > Eric Dumazet <[email-masked]> wrote:
> >  
> > > Might be cause by commit b8a51b38e4d4dec3e379d52c0fe1a66827f7cf1e
> > > fou, fou6: ICMP error handlers for FoU and GUE  
> >
> > This:
> >
> > diff --git a/net/ipv4/fou.c b/net/ipv4/fou.c
> > index 0d0ad19ecb87..20a6de26d146 100644
> > --- a/net/ipv4/fou.c
> > +++ b/net/ipv4/fou.c
> > @@ -1008,6 +1008,9 @@ static int gue_err_proto_handler(int proto, struct sk_buff *skb, u32 info)
> >  {
> >         const struct net_protocol *ipprot = rcu_dereference(inet_protos[proto]);
> >
> > +       if (ipprot == IPPROTO_UDP)
> > +               return -EINVAL;
> > +
> >         if (ipprot && ipprot->err_handler) {
> >                 if (!ipprot->err_handler(skb, info))
> >                         return 0;
> >
> > should fix the issue, but I still have to run tests and make sure we
> > don't hit similar cases.  
> 
> Please don't forget to add a regression test for it too ;)

Where would you suggest to add this? The only selftest that goes
through this path currently is net/pmtu.sh, but as configuration of an
actual UDP-in-GUE tunnel is currently not supported, I would really
need to forge that specific packet, so that doesn't seem to be a good
fit.

Won't syzbot add this to some list of reproducers that are checked in
the future?

-- 
Stefano