Skip to content

Commit 6e1eb04

Browse files
dhowellsAl Viro
authored andcommitted
afs: Fix updating of i_mode due to 3rd party change
Fix afs_apply_status() to mask off the irrelevant bits from status->mode when OR'ing them into i_mode. This can happen when a 3rd party chmod occurs. Also fix afs_inode_init_from_status() to mask off the mode bits when initialising i_mode. Fixes: 260a980 ("[AFS]: Add "directory write" support.") Reported-by: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: David Howells <dhowells@redhat.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
1 parent ed94f87 commit 6e1eb04

1 file changed

Lines changed: 3 additions & 3 deletions

File tree

fs/afs/inode.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,13 +103,13 @@ static int afs_inode_init_from_status(struct afs_operation *op,
103103

104104
switch (status->type) {
105105
case AFS_FTYPE_FILE:
106-
inode->i_mode = S_IFREG | status->mode;
106+
inode->i_mode = S_IFREG | (status->mode & S_IALLUGO);
107107
inode->i_op = &afs_file_inode_operations;
108108
inode->i_fop = &afs_file_operations;
109109
inode->i_mapping->a_ops = &afs_fs_aops;
110110
break;
111111
case AFS_FTYPE_DIR:
112-
inode->i_mode = S_IFDIR | status->mode;
112+
inode->i_mode = S_IFDIR | (status->mode & S_IALLUGO);
113113
inode->i_op = &afs_dir_inode_operations;
114114
inode->i_fop = &afs_dir_file_operations;
115115
inode->i_mapping->a_ops = &afs_dir_aops;
@@ -199,7 +199,7 @@ static void afs_apply_status(struct afs_operation *op,
199199
if (status->mode != vnode->status.mode) {
200200
mode = inode->i_mode;
201201
mode &= ~S_IALLUGO;
202-
mode |= status->mode;
202+
mode |= status->mode & S_IALLUGO;
203203
WRITE_ONCE(inode->i_mode, mode);
204204
}
205205

0 commit comments

Comments
 (0)