On Thu, Oct 04 2018, David Howells wrote: > NeilBrown <neilb@xxxxxxxx> wrote: > >> diff --git a/fs/afs/security.c b/fs/afs/security.c >> index 81dfedb7879f..ac2e39de8bff 100644 >> --- a/fs/afs/security.c >> +++ b/fs/afs/security.c >> @@ -349,6 +349,16 @@ int afs_permission(struct inode *inode, int mask) >> if (mask & MAY_NOT_BLOCK) >> return -ECHILD; >> >> + /* Short-circuit for owner */ >> + if (mask & MAY_ACT_AS_OWNER) { >> + if (inode_owner_or_capable(inode)) > > You don't know that inode->i_uid in meaningful. You may have noticed that > afs_permission() ignores i_uid and i_gid entirely. It queries the server (if > this information is not otherwise cached) to ask what permits the user is > granted - where the user identity is defined by the key returned from > afs_request_key()[*]. > > So, NAK for the afs piece. Thanks for the review. As afs doesn't use the generic xattr code and doesn't call setattr_prepare(), this is all largely irrelevant for afs. afs_permission() will probably only get MAY_ACT_AS_OWNER passed when someone uses fcntl(F_SETFL) to set the O_NOATIME flag. Currently a permission test based on UID is performed which, as you say, is wrong. My patch simply preserved this current (wrong) behaviour. Shall I change it to always allow access, like with NFS? Probably O_NOATIME is ignored, in which case f_op->check_flags should probably report -EINVAL (???) ... or might that cause a regression? Thanks, NeilBrown
Attachment:
signature.asc
Description: PGP signature