Commit 4957d56
epoll: Keep a reference on files added to the check list
commit a9ed4a6 upstream.
When adding a new fd to an epoll, and that this new fd is an
epoll fd itself, we recursively scan the fds attached to it
to detect cycles, and add non-epool files to a "check list"
that gets subsequently parsed.
However, this check list isn't completely safe when deletions
can happen concurrently. To sidestep the issue, make sure that
a struct file placed on the check list sees its f_count increased,
ensuring that a concurrent deletion won't result in the file
disapearing from under our feet.
Cc: stable@vger.kernel.org
Signed-off-by: Marc Zyngier <maz@kernel.org>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>1 parent 2ff3c97 commit 4957d56
1 file changed
Lines changed: 7 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1890 | 1890 | | |
1891 | 1891 | | |
1892 | 1892 | | |
1893 | | - | |
| 1893 | + | |
| 1894 | + | |
1894 | 1895 | | |
1895 | 1896 | | |
| 1897 | + | |
1896 | 1898 | | |
1897 | 1899 | | |
1898 | 1900 | | |
| |||
1936 | 1938 | | |
1937 | 1939 | | |
1938 | 1940 | | |
| 1941 | + | |
1939 | 1942 | | |
1940 | 1943 | | |
1941 | 1944 | | |
| |||
2095 | 2098 | | |
2096 | 2099 | | |
2097 | 2100 | | |
2098 | | - | |
| 2101 | + | |
| 2102 | + | |
2099 | 2103 | | |
2100 | 2104 | | |
| 2105 | + | |
2101 | 2106 | | |
2102 | 2107 | | |
2103 | 2108 | | |
| |||
0 commit comments