kernel - Flag cdevpriv use (2)
authorMatthew Dillon <dillon@apollo.backplane.com>
Mon, 12 Jan 2015 19:57:25 +0000 (11:57 -0800)
committerMatthew Dillon <dillon@apollo.backplane.com>
Mon, 12 Jan 2015 19:57:25 +0000 (11:57 -0800)
* Don't throw away fp->f_flag bits set prior to the call to
  vop_stdopen().

sys/kern/vfs_default.c
sys/sys/fcntl.h

index fd5011e..56c37f9 100644 (file)
@@ -1171,7 +1171,8 @@ vop_stdopen(struct vop_open_args *ap)
                        fp->f_type = DTYPE_VNODE;
                        break;
                }
-               fp->f_flag = ap->a_mode & FMASK;
+               /* retain flags not to be copied */
+               fp->f_flag = (fp->f_flag & ~FMASK) | (ap->a_mode & FMASK);
                fp->f_ops = &vnode_fileops;
                fp->f_data = vp;
                vref(vp);
index 58c0f85..6524c5c 100644 (file)
 #define        FFLAGS(oflags)  ((oflags) + 1)
 #define        OFLAGS(fflags)  ((fflags) - 1)
 
-/* bits to save after open */
+/*
+ * Bits to save after open from the ap.  Remaining bits are retained.
+ */
 #define        FMASK           (FREAD|FWRITE|FAPPEND|FASYNC|FFSYNC|FNONBLOCK|\
                         FAPPENDONLY|FREVOKED|O_DIRECT|O_MAPONREAD)
 /* bits settable by fcntl(F_SETFL, ...) */