lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <1334400945.5300.10050.camel@edumazet-glaptop>
Date:	Sat, 14 Apr 2012 12:55:45 +0200
From:	Eric Dumazet <eric.dumazet@...il.com>
To:	Tetsuo Handa <penguin-kernel@...ove.SAKURA.ne.jp>
Cc:	netdev@...r.kernel.org
Subject: Re: error path in __ip_vs_init()

On Sat, 2012-04-14 at 19:42 +0900, Tetsuo Handa wrote:
> Line 1880 cannot become true because net_generic() cannot return NULL.
> Redundant check?
> 
> include/net/netns/generic.h:
>  34 static inline void *net_generic(const struct net *net, int id)
>  35 {
>  36         struct net_generic *ng;
>  37         void *ptr;
>  38 
>  39         rcu_read_lock();
>  40         ng = rcu_dereference(net->gen);
>  41         BUG_ON(id == 0 || id > ng->len);
>  42         ptr = ng->ptr[id - 1];
>  43         rcu_read_unlock();
>  44 
>  45         BUG_ON(!ptr);
>  46         return ptr;
>  47 }
> 
> net/netfilter/ipvs/ip_vs_core.c:
> 1875 static int __net_init __ip_vs_init(struct net *net)
> 1876 {
> 1877         struct netns_ipvs *ipvs;
> 1878 
> 1879         ipvs = net_generic(net, ip_vs_net_id);
> 1880         if (ipvs == NULL)
> 1881                 return -ENOMEM;
> --

Yep, because the BUG_ON(!ptr) was added very recently :

commit 5ee4433efe99b9f39f6eff5052a177bbcfe72cea
Author: Eric W. Biederman <ebiederm@...ssion.com>
Date:   Thu Jan 26 14:02:55 2012 +0000

    netns: Fail conspicously if someone uses net_generic at an inappropriate time.
    
    By definition net_generic should never be called when it can return
    NULL.  Fail conspicously with a BUG_ON to make it clear when people mess
    up that a NULL return should never happen.
    
    Recently there was a bug in the CAIF subsystem where it was registered
    with register_pernet_device instead of register_pernet_subsys.  It was
    erroneously concluded that net_generic could validly return NULL and
    that net_assign_generic was buggy (when it was just inefficient).
    Hopefully this BUG_ON will prevent people to coming to similar erroneous
    conclusions in the futrue.
    
    Signed-off-by: Eric W. Biederman <ebiederm@...ssion.com>
    Tested-by: Sasha Levin <levinsasha928@...il.com>
    Signed-off-by: David S. Miller <davem@...emloft.net>


So feel free to submit a patch ;)


--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ