From ee4200d565d4fdab8ecba6d732c70f13ca3998d8 Mon Sep 17 00:00:00 2001 From: David Anderson Date: Wed, 3 Nov 2021 22:41:40 -0700 Subject: [PATCH] ANDROID: overlayfs: inode_owner_or_capable called during execv Using old_creds as an indication that we are not overriding the credentials, bypass call to inode_owner_or_capable. This solves a problem with all execv calls being blocked when using the caller's credentials. Bug: 204981027 Link: https://lore.kernel.org/lkml/20201021151903.652827-5-salyzyn@android.com/ Signed-off-by: David Anderson Signed-off-by: Mark Salyzyn Change-Id: I6b196483f7a3fa431f4f174c6671c2118e0088dd --- fs/overlayfs/file.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fs/overlayfs/file.c b/fs/overlayfs/file.c index b5bbe99c2603..6c748286843a 100644 --- a/fs/overlayfs/file.c +++ b/fs/overlayfs/file.c @@ -60,7 +60,8 @@ static struct file *ovl_open_realfile(const struct file *file, if (err) { realfile = ERR_PTR(err); } else { - if (!inode_owner_or_capable(real_mnt_userns, realinode)) + if (old_cred && !inode_owner_or_capable(real_mnt_userns, + realinode)) flags &= ~O_NOATIME; realfile = open_with_fake_path(&file->f_path, flags, realinode,