Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
62fb4a15
Commit
62fb4a15
authored
Dec 26, 2015
by
Al Viro
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
don't carry MAY_OPEN in op->acc_mode
Signed-off-by:
Al Viro
<
viro@zeniv.linux.org.uk
>
parent
b40ef869
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
12 additions
and
18 deletions
+12
-18
fs/exec.c
fs/exec.c
+2
-2
fs/namei.c
fs/namei.c
+9
-12
fs/open.c
fs/open.c
+1
-4
No files found.
fs/exec.c
View file @
62fb4a15
...
...
@@ -119,7 +119,7 @@ SYSCALL_DEFINE1(uselib, const char __user *, library)
int
error
=
PTR_ERR
(
tmp
);
static
const
struct
open_flags
uselib_flags
=
{
.
open_flag
=
O_LARGEFILE
|
O_RDONLY
|
__FMODE_EXEC
,
.
acc_mode
=
MAY_READ
|
MAY_EXEC
|
MAY_OPEN
,
.
acc_mode
=
MAY_READ
|
MAY_EXEC
,
.
intent
=
LOOKUP_OPEN
,
.
lookup_flags
=
LOOKUP_FOLLOW
,
};
...
...
@@ -763,7 +763,7 @@ static struct file *do_open_execat(int fd, struct filename *name, int flags)
int
err
;
struct
open_flags
open_exec_flags
=
{
.
open_flag
=
O_LARGEFILE
|
O_RDONLY
|
__FMODE_EXEC
,
.
acc_mode
=
MAY_EXEC
|
MAY_OPEN
,
.
acc_mode
=
MAY_EXEC
,
.
intent
=
LOOKUP_OPEN
,
.
lookup_flags
=
LOOKUP_FOLLOW
,
};
...
...
fs/namei.c
View file @
62fb4a15
...
...
@@ -2663,10 +2663,6 @@ static int may_open(struct path *path, int acc_mode, int flag)
struct
inode
*
inode
=
dentry
->
d_inode
;
int
error
;
/* O_PATH? */
if
(
!
acc_mode
)
return
0
;
if
(
!
inode
)
return
-
ENOENT
;
...
...
@@ -2688,7 +2684,7 @@ static int may_open(struct path *path, int acc_mode, int flag)
break
;
}
error
=
inode_permission
(
inode
,
acc_mode
);
error
=
inode_permission
(
inode
,
MAY_OPEN
|
acc_mode
);
if
(
error
)
return
error
;
...
...
@@ -2880,7 +2876,7 @@ static int atomic_open(struct nameidata *nd, struct dentry *dentry,
if
(
*
opened
&
FILE_CREATED
)
{
WARN_ON
(
!
(
open_flag
&
O_CREAT
));
fsnotify_create
(
dir
,
dentry
);
acc_mode
=
MAY_OPEN
;
acc_mode
=
0
;
}
error
=
may_open
(
&
file
->
f_path
,
acc_mode
,
open_flag
);
if
(
error
)
...
...
@@ -3093,7 +3089,7 @@ static int do_last(struct nameidata *nd,
/* Don't check for write permission, don't truncate */
open_flag
&=
~
O_TRUNC
;
will_truncate
=
false
;
acc_mode
=
MAY_OPEN
;
acc_mode
=
0
;
path_to_nameidata
(
&
path
,
nd
);
goto
finish_open_created
;
}
...
...
@@ -3177,10 +3173,11 @@ static int do_last(struct nameidata *nd,
got_write
=
true
;
}
finish_open_created:
error
=
may_open
(
&
nd
->
path
,
acc_mode
,
open_flag
);
if
(
error
)
goto
out
;
if
(
likely
(
!
(
open_flag
&
O_PATH
)))
{
error
=
may_open
(
&
nd
->
path
,
acc_mode
,
open_flag
);
if
(
error
)
goto
out
;
}
BUG_ON
(
*
opened
&
FILE_OPENED
);
/* once it's opened, it's opened */
error
=
vfs_open
(
&
nd
->
path
,
file
,
current_cred
());
if
(
!
error
)
{
...
...
@@ -3267,7 +3264,7 @@ static int do_tmpfile(struct nameidata *nd, unsigned flags,
goto
out2
;
audit_inode
(
nd
->
name
,
child
,
0
);
/* Don't check for other permissions, the inode was just created */
error
=
may_open
(
&
path
,
MAY_OPEN
,
op
->
open_flag
);
error
=
may_open
(
&
path
,
0
,
op
->
open_flag
);
if
(
error
)
goto
out2
;
file
->
f_path
.
mnt
=
path
.
mnt
;
...
...
fs/open.c
View file @
62fb4a15
...
...
@@ -887,7 +887,7 @@ EXPORT_SYMBOL(dentry_open);
static
inline
int
build_open_flags
(
int
flags
,
umode_t
mode
,
struct
open_flags
*
op
)
{
int
lookup_flags
=
0
;
int
acc_mode
;
int
acc_mode
=
ACC_MODE
(
flags
)
;
if
(
flags
&
(
O_CREAT
|
__O_TMPFILE
))
op
->
mode
=
(
mode
&
S_IALLUGO
)
|
S_IFREG
;
...
...
@@ -909,7 +909,6 @@ static inline int build_open_flags(int flags, umode_t mode, struct open_flags *o
if
(
flags
&
__O_TMPFILE
)
{
if
((
flags
&
O_TMPFILE_MASK
)
!=
O_TMPFILE
)
return
-
EINVAL
;
acc_mode
=
MAY_OPEN
|
ACC_MODE
(
flags
);
if
(
!
(
acc_mode
&
MAY_WRITE
))
return
-
EINVAL
;
}
else
if
(
flags
&
O_PATH
)
{
...
...
@@ -919,8 +918,6 @@ static inline int build_open_flags(int flags, umode_t mode, struct open_flags *o
*/
flags
&=
O_DIRECTORY
|
O_NOFOLLOW
|
O_PATH
;
acc_mode
=
0
;
}
else
{
acc_mode
=
MAY_OPEN
|
ACC_MODE
(
flags
);
}
op
->
open_flag
=
flags
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment