From 9b4ff1899e6a1f0a79a0a76f8490498aa55b29d6 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: 297913716 Link: https://lore.kernel.org/lkml/20201021151903.652827-5-salyzyn@android.com/ Change-Id: I1ae009a33a55da7404033e574c8873b079c795be Signed-off-by: David Anderson Signed-off-by: Mark Salyzyn Signed-off-by: Daniel Roseberg Test: adb-remount-test.sh --- 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 9bbdb9066a3d..78fc2a8982fd 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_idmap, realinode)) + if (old_cred && !inode_owner_or_capable(real_idmap, + realinode)) flags &= ~O_NOATIME; realfile = backing_file_open(&file->f_path, flags, realpath,