]> Zhao Yanbai Git Server - minix.git/commit
VFS: fix filp reuse race
authorThomas Veerman <thomas@minix3.org>
Fri, 13 Apr 2012 09:08:39 +0000 (09:08 +0000)
committerThomas Veerman <thomas@minix3.org>
Fri, 13 Apr 2012 13:22:57 +0000 (13:22 +0000)
commit26ec619a3089cb3563f4030119f36a6ae244f469
tree612e0ab16a45948bd1b9350ca2bce8332f4982e8
parente292ba487ed880409d86376f0c7712bd14d1b289
VFS: fix filp reuse race

Pipes consist of two filps (read filp and write filp) and a shared
vnode. When the writer leaves the filp reference count drops to
zero and subsequent find_filp()s should not find the filp when a
reader looks for it and the reader gets EOF. However, the pipe()
system call tries to find two filps, marks them in use, and only
after a successful node creation on PFS, overwrites the shared
vnode with the new vnode. Consequently, this leaves a small window
where a just closed 'pipe write filp' gets reused and marked as
present, before becoming the actual new 'pipe write filp' for a new
pipe. A reader for the old pipe will think a writer is present and
wait for that writer to write something or to leave; both actions
should revive the suspended reader. This will never happen and the
reader will be stuck forever.
servers/vfs/filedes.c