Bug 212295
Summary: | pipe deadlocks since kernel v5.8 after resizing (race condition) | ||
---|---|---|---|
Product: | File System | Reporter: | Lukas Schauer (kernel.org) |
Component: | Other | Assignee: | fs_other |
Status: | NEW --- | ||
Severity: | normal | CC: | brauner, dhowells, jgoerzen, kernel.org, me, sam |
Priority: | P1 | ||
Hardware: | All | ||
OS: | Linux | ||
Kernel Version: | 5.8-latest | Subsystem: | |
Regression: | Yes | Bisected commit-id: | |
Attachments: |
Code to reproduce the issue
Patch fixing the race condition [PATCH] fs/pipe: wakeup wr_wait after setting max_usage |
Description
Lukas Schauer
2021-03-15 18:00:06 UTC
I can reproduce the issue using the provided code. Created attachment 295881 [details]
Patch fixing the race condition
I've found the race condition.
After resizing a pipe a wakeup is issued for pipe_write, before actually raising the max_usage value for that pipe.
Depending on wether the pipe was full before resizing or not this could result in a deadlock situation.
I've attached a patch for this to this issue. It's build against v5.8 because that's what I've been using for testing. If necessary please let me know and I'll rebase it for a newer version.
Created attachment 296031 [details]
[PATCH] fs/pipe: wakeup wr_wait after setting max_usage
I revised the patch to better address the regression instead of weirdly pasting code around and also sent it to the linux-kernel mailing list with Alan Cox and David Howells in Cc.
What is the current status of getting this merged? I recently encountered it in the wild. Thanks. |