* [PATCH][V2] vfs: Use upper filesystem inode in bprm_fill_uid()
@ 2017-02-13 20:45 Vivek Goyal
2017-02-14 7:52 ` Eric W. Biederman
0 siblings, 1 reply; 2+ messages in thread
From: Vivek Goyal @ 2017-02-13 20:45 UTC (permalink / raw)
To: linux-fsdevel
Cc: Amir Goldstein, Eric W. Biederman, Al Viro, James Bottomley,
Miklos Szeredi
Right now bprm_fill_uid() uses inode fetched from file_inode(bprm->file).
This in turn returns inode of lower filesystem (in a stacked filesystem
setup).
I was playing with modified patches of shiftfs posted by james bottomley
and realized that through shiftfs setuid bit does not take effect. And
reason being that we fetch uid/gid from inode of lower fs (and not from
shiftfs inode). And that results in following checks failing.
/* We ignore suid/sgid if there are no mappings for them in the ns */
if (!kuid_has_mapping(bprm->cred->user_ns, uid) ||
!kgid_has_mapping(bprm->cred->user_ns, gid))
return;
uid/gid fetched from lower fs inode might not be mapped inside the user
namespace of container. So we need to look at uid/gid fetched from
upper filesystem (shiftfs in this particular case) and these should be
mapped and setuid bit can take affect.
Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
---
fs/exec.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Index: rhvgoyal-linux/fs/exec.c
===================================================================
--- rhvgoyal-linux.orig/fs/exec.c 2017-02-13 15:22:57.107114781 -0500
+++ rhvgoyal-linux/fs/exec.c 2017-02-13 15:24:19.568114781 -0500
@@ -1479,7 +1479,7 @@ static void bprm_fill_uid(struct linux_b
if (task_no_new_privs(current))
return;
- inode = file_inode(bprm->file);
+ inode = bprm->file->f_path.dentry->d_inode;
mode = READ_ONCE(inode->i_mode);
if (!(mode & (S_ISUID|S_ISGID)))
return;
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH][V2] vfs: Use upper filesystem inode in bprm_fill_uid()
2017-02-13 20:45 [PATCH][V2] vfs: Use upper filesystem inode in bprm_fill_uid() Vivek Goyal
@ 2017-02-14 7:52 ` Eric W. Biederman
0 siblings, 0 replies; 2+ messages in thread
From: Eric W. Biederman @ 2017-02-14 7:52 UTC (permalink / raw)
To: Vivek Goyal
Cc: linux-fsdevel, Amir Goldstein, Al Viro, James Bottomley,
Miklos Szeredi
Vivek Goyal <vgoyal@redhat.com> writes:
> Right now bprm_fill_uid() uses inode fetched from file_inode(bprm->file).
> This in turn returns inode of lower filesystem (in a stacked filesystem
> setup).
>
> I was playing with modified patches of shiftfs posted by james bottomley
> and realized that through shiftfs setuid bit does not take effect. And
> reason being that we fetch uid/gid from inode of lower fs (and not from
> shiftfs inode). And that results in following checks failing.
>
> /* We ignore suid/sgid if there are no mappings for them in the ns */
> if (!kuid_has_mapping(bprm->cred->user_ns, uid) ||
> !kgid_has_mapping(bprm->cred->user_ns, gid))
> return;
>
> uid/gid fetched from lower fs inode might not be mapped inside the user
> namespace of container. So we need to look at uid/gid fetched from
> upper filesystem (shiftfs in this particular case) and these should be
> mapped and setuid bit can take affect.
>
> Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
Applied thanks,
Eric
> ---
> fs/exec.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> Index: rhvgoyal-linux/fs/exec.c
> ===================================================================
> --- rhvgoyal-linux.orig/fs/exec.c 2017-02-13 15:22:57.107114781 -0500
> +++ rhvgoyal-linux/fs/exec.c 2017-02-13 15:24:19.568114781 -0500
> @@ -1479,7 +1479,7 @@ static void bprm_fill_uid(struct linux_b
> if (task_no_new_privs(current))
> return;
>
> - inode = file_inode(bprm->file);
> + inode = bprm->file->f_path.dentry->d_inode;
> mode = READ_ONCE(inode->i_mode);
> if (!(mode & (S_ISUID|S_ISGID)))
> return;
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2017-02-14 7:57 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-02-13 20:45 [PATCH][V2] vfs: Use upper filesystem inode in bprm_fill_uid() Vivek Goyal
2017-02-14 7:52 ` Eric W. Biederman
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).