Index: vfs_vnops.c =================================================================== --- vfs_vnops.c (revision 200056) +++ vfs_vnops.c (working copy) @@ -212,7 +212,7 @@ restart: accmode |= VREAD; if (fmode & FEXEC) accmode |= VEXEC; - if (fmode & O_APPEND) + if ((fmode & O_APPEND) && (fmode & FWRITE)) accmode |= VAPPEND; #ifdef MAC error = mac_vnode_check_open(cred, vp, accmode); Index: vfs_syscalls.c =================================================================== --- vfs_syscalls.c (revision 200056) +++ vfs_syscalls.c (working copy) @@ -4426,7 +4426,7 @@ fhopen(td, uap) } if (fmode & FREAD) accmode |= VREAD; - if (fmode & O_APPEND) + if ((fmode & O_APPEND) && (fmode & FWRITE)) accmode |= VAPPEND; #ifdef MAC error = mac_vnode_check_open(td->td_ucred, vp, accmode);