mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
net: neighbor: fix a crash caused by mod zero
pneigh_enqueue() tries to obtain a random delay by mod NEIGH_VAR(p, PROXY_DELAY). However, NEIGH_VAR(p, PROXY_DELAY) migth be zero at that point because someone could write zero to /proc/sys/net/ipv4/neigh/[device]/proxy_delay after the callers check it. This patch uses prandom_u32_max() to get a random delay instead which avoids potential division by zero. Signed-off-by: weichenchen <weichen.chen@linux.alibaba.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
21fdca22eb
commit
a533b70a65
@ -1569,10 +1569,8 @@ static void neigh_proxy_process(struct timer_list *t)
|
||||
void pneigh_enqueue(struct neigh_table *tbl, struct neigh_parms *p,
|
||||
struct sk_buff *skb)
|
||||
{
|
||||
unsigned long now = jiffies;
|
||||
|
||||
unsigned long sched_next = now + (prandom_u32() %
|
||||
NEIGH_VAR(p, PROXY_DELAY));
|
||||
unsigned long sched_next = jiffies +
|
||||
prandom_u32_max(NEIGH_VAR(p, PROXY_DELAY));
|
||||
|
||||
if (tbl->proxy_queue.qlen > NEIGH_VAR(p, PROXY_QLEN)) {
|
||||
kfree_skb(skb);
|
||||
|
Loading…
Reference in New Issue
Block a user