mirror of https://gitee.com/openkylin/linux.git
strparser: Do not call mod_delayed_work with a timeout of LONG_MAX
struct sock's sk_rcvtimeo is initialized to
LONG_MAX/MAX_SCHEDULE_TIMEOUT in sock_init_data. Calling
mod_delayed_work with a timeout of LONG_MAX causes spurious execution of
the work function. timer->expires is set equal to jiffies + LONG_MAX.
When timer_base->clk falls behind the current value of jiffies,
the delta between timer_base->clk and jiffies + LONG_MAX causes the
expiration to be in the past. Returning early from strp_start_timer if
timeo == LONG_MAX solves this problem.
Found while testing net/tls_sw recv path.
Fixes: 43a0c6751a
("strparser: Stream parser for messages")
Reviewed-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Doron Roberts-Kedes <doronrk@fb.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
a957fa190a
commit
7c5aba211d
|
@ -67,7 +67,7 @@ static void strp_abort_strp(struct strparser *strp, int err)
|
|||
|
||||
static void strp_start_timer(struct strparser *strp, long timeo)
|
||||
{
|
||||
if (timeo)
|
||||
if (timeo && timeo != LONG_MAX)
|
||||
mod_delayed_work(strp_wq, &strp->msg_timer_work, timeo);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue