userns: Convert vfs posix_acl support to use kuids and kgids
authorEric W. Biederman <ebiederm@xmission.com>
Wed, 8 Feb 2012 02:52:57 +0000 (18:52 -0800)
committerEric W. Biederman <ebiederm@xmission.com>
Tue, 18 Sep 2012 08:01:35 +0000 (01:01 -0700)
commit2f6f0654ab61961fd0f7701fe3be89ea111f0cda
treea96703c892bd374b5ef7b102c52a5ec596970027
parentd20b92ab668cc44fc84bba0001839c5a8013a5cd
userns: Convert vfs posix_acl support to use kuids and kgids

- In setxattr if we are setting a posix acl convert uids and gids from
  the current user namespace into the initial user namespace, before
  the xattrs are passed to the underlying filesystem.

  Untranslatable uids and gids are represented as -1 which
  posix_acl_from_xattr will represent as INVALID_UID or INVALID_GID.
  posix_acl_valid will fail if an acl from userspace has any
  INVALID_UID or INVALID_GID values.  In net this guarantees that
  untranslatable posix acls will not be stored by filesystems.

- In getxattr if we are reading a posix acl convert uids and gids from
  the initial user namespace into the current user namespace.

  Uids and gids that can not be tranlsated into the current user namespace
  will be represented as -1.

- Replace e_id in struct posix_acl_entry with an anymouns union of
  e_uid and e_gid.  For the short term retain the e_id field
  until all of the users are converted.

- Don't set struct posix_acl.e_id in the cases where the acl type
  does not use e_id.  Greatly reducing the use of ACL_UNDEFINED_ID.

- Rework the ordering checks in posix_acl_valid so that I use kuid_t
  and kgid_t types throughout the code, and so that I don't need
  arithmetic on uid and gid types.

Cc: Theodore Tso <tytso@mit.edu>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Andreas Dilger <adilger.kernel@dilger.ca>
Cc: Jan Kara <jack@suse.cz>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
fs/posix_acl.c
fs/xattr.c
fs/xattr_acl.c
include/linux/posix_acl.h
include/linux/posix_acl_xattr.h