|
@@ -1604,10 +1604,6 @@ int may_open(struct nameidata *nd, int acc_mode, int flag)
|
|
|
if (S_ISDIR(inode->i_mode) && (flag & FMODE_WRITE))
|
|
|
return -EISDIR;
|
|
|
|
|
|
- error = vfs_permission(nd, acc_mode);
|
|
|
- if (error)
|
|
|
- return error;
|
|
|
-
|
|
|
/*
|
|
|
* FIFO's, sockets and device files are special: they don't
|
|
|
* actually live on the filesystem itself, and as such you
|
|
@@ -1622,6 +1618,10 @@ int may_open(struct nameidata *nd, int acc_mode, int flag)
|
|
|
flag &= ~O_TRUNC;
|
|
|
} else if (IS_RDONLY(inode) && (flag & FMODE_WRITE))
|
|
|
return -EROFS;
|
|
|
+
|
|
|
+ error = vfs_permission(nd, acc_mode);
|
|
|
+ if (error)
|
|
|
+ return error;
|
|
|
/*
|
|
|
* An append-only file must be opened in append mode for writing.
|
|
|
*/
|