* error path in __ip_vs_init()
@ 2012-04-14 10:42 Tetsuo Handa
2012-04-14 10:55 ` Eric Dumazet
0 siblings, 1 reply; 2+ messages in thread
From: Tetsuo Handa @ 2012-04-14 10:42 UTC (permalink / raw)
To: netdev
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;
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: error path in __ip_vs_init()
2012-04-14 10:42 error path in __ip_vs_init() Tetsuo Handa
@ 2012-04-14 10:55 ` Eric Dumazet
0 siblings, 0 replies; 2+ messages in thread
From: Eric Dumazet @ 2012-04-14 10:55 UTC (permalink / raw)
To: Tetsuo Handa; +Cc: netdev
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@xmission.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@xmission.com>
Tested-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
So feel free to submit a patch ;)
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2012-04-14 10:55 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-04-14 10:42 error path in __ip_vs_init() Tetsuo Handa
2012-04-14 10:55 ` Eric Dumazet
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.