mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-09 06:43:09 +00:00
ping: Fix potentail NULL deref for /proc/net/icmp.
After commitdbca1596bb
("ping: convert to RCU lookups, get rid of rwlock"), we use RCU for ping sockets, but we should use spinlock for /proc/net/icmp to avoid a potential NULL deref mentioned in the previous patch. Let's go back to using spinlock there. Note we can convert ping sockets to use hlist instead of hlist_nulls because we do not use SLAB_TYPESAFE_BY_RCU for ping sockets. Fixes:dbca1596bb
("ping: convert to RCU lookups, get rid of rwlock") Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com> Reviewed-by: Eric Dumazet <edumazet@google.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
0a78cf7264
commit
ab5fb73ffa
@ -1089,13 +1089,13 @@ static struct sock *ping_get_idx(struct seq_file *seq, loff_t pos)
|
||||
}
|
||||
|
||||
void *ping_seq_start(struct seq_file *seq, loff_t *pos, sa_family_t family)
|
||||
__acquires(RCU)
|
||||
__acquires(ping_table.lock)
|
||||
{
|
||||
struct ping_iter_state *state = seq->private;
|
||||
state->bucket = 0;
|
||||
state->family = family;
|
||||
|
||||
rcu_read_lock();
|
||||
spin_lock(&ping_table.lock);
|
||||
|
||||
return *pos ? ping_get_idx(seq, *pos-1) : SEQ_START_TOKEN;
|
||||
}
|
||||
@ -1121,9 +1121,9 @@ void *ping_seq_next(struct seq_file *seq, void *v, loff_t *pos)
|
||||
EXPORT_SYMBOL_GPL(ping_seq_next);
|
||||
|
||||
void ping_seq_stop(struct seq_file *seq, void *v)
|
||||
__releases(RCU)
|
||||
__releases(ping_table.lock)
|
||||
{
|
||||
rcu_read_unlock();
|
||||
spin_unlock(&ping_table.lock);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(ping_seq_stop);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user