diff options
author | David S. Miller <davem@davemloft.net> | 2012-06-19 21:56:21 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-06-19 21:56:21 -0400 |
commit | f9242b6b28d61295f2bf7e8adfb1060b382e5381 (patch) | |
tree | b395670bd6ae832e9f6f87f47a1840baf3a06d0d /net/ipv6/protocol.c | |
parent | 677a3d60fb3153f786a0d28fcf0287670e7bd3c2 (diff) |
inet: Sanitize inet{,6} protocol demux.
Don't pretend that inet_protos[] and inet6_protos[] are hashes, thay
are just a straight arrays. Remove all unnecessary hash masking.
Document MAX_INET_PROTOS.
Use RAW_HTABLE_SIZE when appropriate.
Reported-by: Ben Hutchings <bhutchings@solarflare.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv6/protocol.c')
-rw-r--r-- | net/ipv6/protocol.c | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/net/ipv6/protocol.c b/net/ipv6/protocol.c index 9a7978fdc02a..053082dfc93e 100644 --- a/net/ipv6/protocol.c +++ b/net/ipv6/protocol.c | |||
@@ -29,9 +29,7 @@ const struct inet6_protocol __rcu *inet6_protos[MAX_INET_PROTOS] __read_mostly; | |||
29 | 29 | ||
30 | int inet6_add_protocol(const struct inet6_protocol *prot, unsigned char protocol) | 30 | int inet6_add_protocol(const struct inet6_protocol *prot, unsigned char protocol) |
31 | { | 31 | { |
32 | int hash = protocol & (MAX_INET_PROTOS - 1); | 32 | return !cmpxchg((const struct inet6_protocol **)&inet6_protos[protocol], |
33 | |||
34 | return !cmpxchg((const struct inet6_protocol **)&inet6_protos[hash], | ||
35 | NULL, prot) ? 0 : -1; | 33 | NULL, prot) ? 0 : -1; |
36 | } | 34 | } |
37 | EXPORT_SYMBOL(inet6_add_protocol); | 35 | EXPORT_SYMBOL(inet6_add_protocol); |
@@ -42,9 +40,9 @@ EXPORT_SYMBOL(inet6_add_protocol); | |||
42 | 40 | ||
43 | int inet6_del_protocol(const struct inet6_protocol *prot, unsigned char protocol) | 41 | int inet6_del_protocol(const struct inet6_protocol *prot, unsigned char protocol) |
44 | { | 42 | { |
45 | int ret, hash = protocol & (MAX_INET_PROTOS - 1); | 43 | int ret; |
46 | 44 | ||
47 | ret = (cmpxchg((const struct inet6_protocol **)&inet6_protos[hash], | 45 | ret = (cmpxchg((const struct inet6_protocol **)&inet6_protos[protocol], |
48 | prot, NULL) == prot) ? 0 : -1; | 46 | prot, NULL) == prot) ? 0 : -1; |
49 | 47 | ||
50 | synchronize_net(); | 48 | synchronize_net(); |