mirror of
https://github.com/torvalds/linux.git
synced 2026-06-06 13:37:36 +02:00
sctp: fix sleep in atomic context bug in timer handlers
[ Upstream commitb89fc26f74] There are sleep in atomic context bugs in timer handlers of sctp such as sctp_generate_t3_rtx_event(), sctp_generate_probe_event(), sctp_generate_t1_init_event(), sctp_generate_timeout_event(), sctp_generate_t3_rtx_event() and so on. The root cause is sctp_sched_prio_init_sid() with GFP_KERNEL parameter that may sleep could be called by different timer handlers which is in interrupt context. One of the call paths that could trigger bug is shown below: (interrupt context) sctp_generate_probe_event sctp_do_sm sctp_side_effects sctp_cmd_interpreter sctp_outq_teardown sctp_outq_init sctp_sched_set_sched n->init_sid(..,GFP_KERNEL) sctp_sched_prio_init_sid //may sleep This patch changes gfp_t parameter of init_sid in sctp_sched_set_sched() from GFP_KERNEL to GFP_ATOMIC in order to prevent sleep in atomic context bugs. Fixes:5bbbbe32a4("sctp: introduce stream scheduler foundations") Signed-off-by: Duoming Zhou <duoming@zju.edu.cn> Acked-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com> Link: https://lore.kernel.org/r/20220723015809.11553-1-duoming@zju.edu.cn Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
fad6caf9b1
commit
aeb2ff9f9f
|
|
@ -163,7 +163,7 @@ int sctp_sched_set_sched(struct sctp_association *asoc,
|
||||||
if (!SCTP_SO(&asoc->stream, i)->ext)
|
if (!SCTP_SO(&asoc->stream, i)->ext)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
ret = n->init_sid(&asoc->stream, i, GFP_KERNEL);
|
ret = n->init_sid(&asoc->stream, i, GFP_ATOMIC);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user