mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
rpmsg: virtio: fix error handling in TX buffer wait
The TX buffer wait loop in rpmsg_send_offchannel_raw() ignores the
possibility of wait_event_interruptible_timeout() returning a
negative value, which happens when the wait is interrupted by a
signal. In that case the loop spins back around and re-arms the
wait instead of propagating the signal, which can stall a task
that is trying to be killed.
Separately, on a genuine timeout (return value 0) the function
returns -ERESTARTSYS, which is reserved for signal-interrupted
syscalls that the kernel may restart. A timeout is not a signal
and should not be treated as restartable; return -ETIMEDOUT
instead.
Handle both cases explicitly: return err directly when negative,
and return -ETIMEDOUT on timeout.
Fixes: bcabbccabf ("rpmsg: add virtio-based remote processor messaging bus")
Signed-off-by: Atul Akella <atul.akella@gmail.com>
Link: https://lore.kernel.org/r/20261013160055.1362-1-atul.akella@gmail.com
Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
This commit is contained in:
parent
00e100cfbf
commit
7dd4cffdf4
|
|
@ -535,10 +535,13 @@ static int rpmsg_send_offchannel_raw(struct rpmsg_device *rpdev,
|
|||
(msg = get_a_tx_buf(vrp)),
|
||||
msecs_to_jiffies(15000));
|
||||
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
/* timeout ? */
|
||||
if (!err) {
|
||||
dev_err(dev, "timeout waiting for a tx buffer\n");
|
||||
return -ERESTARTSYS;
|
||||
return -ETIMEDOUT;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user