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>
This commit is contained in:
@@ -29,9 +29,7 @@ const struct inet6_protocol __rcu *inet6_protos[MAX_INET_PROTOS] __read_mostly;
|
||||
|
||||
int inet6_add_protocol(const struct inet6_protocol *prot, unsigned char protocol)
|
||||
{
|
||||
int hash = protocol & (MAX_INET_PROTOS - 1);
|
||||
|
||||
return !cmpxchg((const struct inet6_protocol **)&inet6_protos[hash],
|
||||
return !cmpxchg((const struct inet6_protocol **)&inet6_protos[protocol],
|
||||
NULL, prot) ? 0 : -1;
|
||||
}
|
||||
EXPORT_SYMBOL(inet6_add_protocol);
|
||||
@@ -42,9 +40,9 @@ EXPORT_SYMBOL(inet6_add_protocol);
|
||||
|
||||
int inet6_del_protocol(const struct inet6_protocol *prot, unsigned char protocol)
|
||||
{
|
||||
int ret, hash = protocol & (MAX_INET_PROTOS - 1);
|
||||
int ret;
|
||||
|
||||
ret = (cmpxchg((const struct inet6_protocol **)&inet6_protos[hash],
|
||||
ret = (cmpxchg((const struct inet6_protocol **)&inet6_protos[protocol],
|
||||
prot, NULL) == prot) ? 0 : -1;
|
||||
|
||||
synchronize_net();
|
||||
|
Reference in New Issue
Block a user