tmpfs - Fix write-append/mmap-read race
authorMatthew Dillon <dillon@apollo.backplane.com>
Sat, 4 Jul 2015 04:55:10 +0000 (21:55 -0700)
committerMatthew Dillon <dillon@apollo.backplane.com>
Sat, 4 Jul 2015 04:55:10 +0000 (21:55 -0700)
commitb37a7c00afef1d167a3d2e2de799d16d733854f2
tree13e2f4de30486e7ace75fd506ee04a61c3e2c1e1
parent0d0c907180977f9b5ab1377e9d91db014366c4b1
tmpfs - Fix write-append/mmap-read race

* tmpfs_write() was not extending the target file atomically with the
  write via a file node lock.  Although the vnode is locked exclusively,
  this only prevents read() and write() related races.  lseek() and memory
  mapped reads could still race.

* Adjust the NODE LOCK to cover the entire tmpfs_write() operation.  This
  fixes races against lseek() or stat() which would otherwise allow the
  new post-append file size to be returned before the write completes.

-Matt

Reported-by: Ben Woolley <tautolog@gmail.com>
sys/vfs/tmpfs/tmpfs.h
sys/vfs/tmpfs/tmpfs_subr.c
sys/vfs/tmpfs/tmpfs_vnops.c