Re: linux-next: build failure after merge of the final tree
From: Dwight Engen <hidden>
Date: 2013-08-21 05:08:56
Also in:
linux-next, linux-xfs, lkml
Subsystem:
cell broadband engine architecture, linux for powerpc (32-bit and 64-bit), spu file system, the rest · Maintainers:
Madhavan Srinivasan, Michael Ellerman, Linus Torvalds
On Tue, 20 Aug 2013 22:46:30 +0200 Arnd Bergmann [off-list ref] wrote:
On Tuesday 20 August 2013, Dwight Engen wrote:quoted
diff --git a/arch/powerpc/platforms/cell/spufs/inode.cb/arch/powerpc/platforms/cell/spufs/inode.c index f390042..90fb308 100644 --- a/arch/powerpc/platforms/cell/spufs/inode.c+++ b/arch/powerpc/platforms/cell/spufs/inode.c@@ -620,12 +620,12 @@ spufs_parse_options(struct super_block *sb,char *options, struct inode *root) case Opt_uid: if (match_int(&args[0], &option)) return 0; - root->i_uid = option; + root->i_uid = make_kuid(&init_user_ns, option); break; case Opt_gid: if (match_int(&args[0], &option)) return 0; - root->i_gid = option; + root->i_gid = make_kgid(&init_user_ns, option); break; case Opt_mode: if (match_octal(&args[0], &option))Doesn't this mean the uid/gid is taken from the initial namespace rather than from the namespace of the 'mount' process calling this? I think the logical choice would be to have the UID be the one that gets passed here in the caller's namespace.
Yes, I agree. The other filesystems that take an Opt_uid as well do use current_user_ns() and not init_user_ns. They also do a uid_valid() check and fail the mount (or fallback to GLOBAL_ROOT_UID). So I think that would look like this:
diff --git a/arch/powerpc/platforms/cell/spufs/inode.c b/arch/powerpc/platforms/cell/spufs/inode.c
index f390042..87ba7cf 100644
--- a/arch/powerpc/platforms/cell/spufs/inode.c
+++ b/arch/powerpc/platforms/cell/spufs/inode.c@@ -620,12 +620,16 @@ spufs_parse_options(struct super_block *sb, char *options, struct inode *root) case Opt_uid: if (match_int(&args[0], &option)) return 0; - root->i_uid = option; + root->i_uid = make_kuid(current_user_ns(), option); + if (!uid_valid(root->i_uid)) + return 0; break; case Opt_gid: if (match_int(&args[0], &option)) return 0; - root->i_gid = option; + root->i_gid = make_kgid(current_user_ns(), option); + if (!gid_valid(root->i_gid)) + return 0; break; case Opt_mode: if (match_octal(&args[0], &option))
Again, I have not run tested this so we may just want to disable SPU_FS with USER_NS until they can be tested together.