1. 23 4月, 2011 1 次提交
  2. 24 3月, 2011 2 次提交
    • S
      userns: rename is_owner_or_cap to inode_owner_or_capable · 2e149670
      Serge E. Hallyn 提交于
      And give it a kernel-doc comment.
      
      [akpm@linux-foundation.org: btrfs changed in linux-next]
      Signed-off-by: NSerge E. Hallyn <serge.hallyn@canonical.com>
      Cc: "Eric W. Biederman" <ebiederm@xmission.com>
      Cc: Daniel Lezcano <daniel.lezcano@free.fr>
      Acked-by: NDavid Howells <dhowells@redhat.com>
      Cc: James Morris <jmorris@namei.org>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      2e149670
    • S
      userns: security: make capabilities relative to the user namespace · 3486740a
      Serge E. Hallyn 提交于
      - Introduce ns_capable to test for a capability in a non-default
        user namespace.
      - Teach cap_capable to handle capabilities in a non-default
        user namespace.
      
      The motivation is to get to the unprivileged creation of new
      namespaces.  It looks like this gets us 90% of the way there, with
      only potential uid confusion issues left.
      
      I still need to handle getting all caps after creation but otherwise I
      think I have a good starter patch that achieves all of your goals.
      
      Changelog:
      	11/05/2010: [serge] add apparmor
      	12/14/2010: [serge] fix capabilities to created user namespaces
      	Without this, if user serge creates a user_ns, he won't have
      	capabilities to the user_ns he created.  THis is because we
      	were first checking whether his effective caps had the caps
      	he needed and returning -EPERM if not, and THEN checking whether
      	he was the creator.  Reverse those checks.
      	12/16/2010: [serge] security_real_capable needs ns argument in !security case
      	01/11/2011: [serge] add task_ns_capable helper
      	01/11/2011: [serge] add nsown_capable() helper per Bastian Blank suggestion
      	02/16/2011: [serge] fix a logic bug: the root user is always creator of
      		    init_user_ns, but should not always have capabilities to
      		    it!  Fix the check in cap_capable().
      	02/21/2011: Add the required user_ns parameter to security_capable,
      		    fixing a compile failure.
      	02/23/2011: Convert some macros to functions as per akpm comments.  Some
      		    couldn't be converted because we can't easily forward-declare
      		    them (they are inline if !SECURITY, extern if SECURITY).  Add
      		    a current_user_ns function so we can use it in capability.h
      		    without #including cred.h.  Move all forward declarations
      		    together to the top of the #ifdef __KERNEL__ section, and use
      		    kernel-doc format.
      	02/23/2011: Per dhowells, clean up comment in cap_capable().
      	02/23/2011: Per akpm, remove unreachable 'return -EPERM' in cap_capable.
      
      (Original written and signed off by Eric;  latest, modified version
      acked by him)
      
      [akpm@linux-foundation.org: fix build]
      [akpm@linux-foundation.org: export current_user_ns() for ecryptfs]
      [serge.hallyn@canonical.com: remove unneeded extra argument in selinux's task_has_capability]
      Signed-off-by: NEric W. Biederman <ebiederm@xmission.com>
      Signed-off-by: NSerge E. Hallyn <serge.hallyn@canonical.com>
      Acked-by: N"Eric W. Biederman" <ebiederm@xmission.com>
      Acked-by: NDaniel Lezcano <daniel.lezcano@free.fr>
      Acked-by: NDavid Howells <dhowells@redhat.com>
      Cc: James Morris <jmorris@namei.org>
      Signed-off-by: NSerge E. Hallyn <serge.hallyn@canonical.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      3486740a
  3. 13 3月, 2011 1 次提交
  4. 04 3月, 2011 3 次提交
  5. 26 2月, 2011 3 次提交
    • E
      Revert "selinux: simplify ioctl checking" · 0b24dcb7
      Eric Paris 提交于
      This reverts commit 242631c4.
      
      Conflicts:
      
      	security/selinux/hooks.c
      
      SELinux used to recognize certain individual ioctls and check
      permissions based on the knowledge of the individual ioctl.  In commit
      242631c4 the SELinux code stopped trying to understand
      individual ioctls and to instead looked at the ioctl access bits to
      determine in we should check read or write for that operation.  This
      same suggestion was made to SMACK (and I believe copied into TOMOYO).
      But this suggestion is total rubbish.  The ioctl access bits are
      actually the access requirements for the structure being passed into the
      ioctl, and are completely unrelated to the operation of the ioctl or the
      object the ioctl is being performed upon.
      
      Take FS_IOC_FIEMAP as an example.  FS_IOC_FIEMAP is defined as:
      
      FS_IOC_FIEMAP _IOWR('f', 11, struct fiemap)
      
      So it has access bits R and W.  What this really means is that the
      kernel is going to both read and write to the struct fiemap.  It has
      nothing at all to do with the operations that this ioctl might perform
      on the file itself!
      Signed-off-by: NEric Paris <eparis@redhat.com>
      Acked-by: NStephen Smalley <sds@tycho.nsa.gov>
      0b24dcb7
    • S
      selinux: Fix packet forwarding checks on postrouting · 4a7ab3dc
      Steffen Klassert 提交于
      The IPSKB_FORWARDED and IP6SKB_FORWARDED flags are used only in the
      multicast forwarding case to indicate that a packet looped back after
      forward. So these flags are not a good indicator for packet forwarding.
      A better indicator is the incoming interface. If we have no socket context,
      but an incoming interface and we see the packet in the ip postroute hook,
      the packet is going to be forwarded.
      
      With this patch we use the incoming interface as an indicator on packet
      forwarding.
      Signed-off-by: NSteffen Klassert <steffen.klassert@secunet.com>
      Acked-by: NPaul Moore <paul.moore@hp.com>
      Signed-off-by: NEric Paris <eparis@redhat.com>
      4a7ab3dc
    • S
      selinux: Fix wrong checks for selinux_policycap_netpeer · b9679a76
      Steffen Klassert 提交于
      selinux_sock_rcv_skb_compat and selinux_ip_postroute_compat are just
      called if selinux_policycap_netpeer is not set. However in these
      functions we check if selinux_policycap_netpeer is set. This leads
      to some dead code and to the fact that selinux_xfrm_postroute_last
      is never executed. This patch removes the dead code and the checks
      for selinux_policycap_netpeer in the compatibility functions.
      Signed-off-by: NSteffen Klassert <steffen.klassert@secunet.com>
      Acked-by: NPaul Moore <paul.moore@hp.com>
      Signed-off-by: NEric Paris <eparis@redhat.com>
      b9679a76
  6. 08 2月, 2011 1 次提交
    • T
      CRED: Fix BUG() upon security_cred_alloc_blank() failure · 2edeaa34
      Tetsuo Handa 提交于
      In cred_alloc_blank() since 2.6.32, abort_creds(new) is called with
      new->security == NULL and new->magic == 0 when security_cred_alloc_blank()
      returns an error.  As a result, BUG() will be triggered if SELinux is enabled
      or CONFIG_DEBUG_CREDENTIALS=y.
      
      If CONFIG_DEBUG_CREDENTIALS=y, BUG() is called from __invalid_creds() because
      cred->magic == 0.  Failing that, BUG() is called from selinux_cred_free()
      because selinux_cred_free() is not expecting cred->security == NULL.  This does
      not affect smack_cred_free(), tomoyo_cred_free() or apparmor_cred_free().
      
      Fix these bugs by
      
      (1) Set new->magic before calling security_cred_alloc_blank().
      
      (2) Handle null cred->security in creds_are_invalid() and selinux_cred_free().
      Signed-off-by: NTetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
      Signed-off-by: NDavid Howells <dhowells@redhat.com>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      2edeaa34
  7. 02 2月, 2011 3 次提交
    • L
      security/selinux: fix /proc/sys/ labeling · 8e6c9693
      Lucian Adrian Grijincu 提交于
      This fixes an old (2007) selinux regression: filesystem labeling for
      /proc/sys returned
           -r--r--r-- unknown                          /proc/sys/fs/file-nr
      instead of
           -r--r--r-- system_u:object_r:sysctl_fs_t:s0 /proc/sys/fs/file-nr
      
      Events that lead to breaking of /proc/sys/ selinux labeling:
      
      1) sysctl was reimplemented to route all calls through /proc/sys/
      
          commit 77b14db5
          [PATCH] sysctl: reimplement the sysctl proc support
      
      2) proc_dir_entry was removed from ctl_table:
      
          commit 3fbfa981
          [PATCH] sysctl: remove the proc_dir_entry member for the sysctl tables
      
      3) selinux still walked the proc_dir_entry tree to apply
         labeling. Because ctl_tables don't have a proc_dir_entry, we did
         not label /proc/sys/ inodes any more. To achieve this the /proc/sys/
         inodes were marked private and private inodes were ignored by
         selinux.
      
          commit bbaca6c2
          [PATCH] selinux: enhance selinux to always ignore private inodes
      
          commit 86a71dbd
          [PATCH] sysctl: hide the sysctl proc inodes from selinux
      
      Access control checks have been done by means of a special sysctl hook
      that was called for read/write accesses to any /proc/sys/ entry.
      
      We don't have to do this because, instead of walking the
      proc_dir_entry tree we can walk the dentry tree (as done in this
      patch). With this patch:
      * we don't mark /proc/sys/ inodes as private
      * we don't need the sysclt security hook
      * we walk the dentry tree to find the path to the inode.
      
      We have to strip the PID in /proc/PID/ entries that have a
      proc_dir_entry because selinux does not know how to label paths like
      '/1/net/rpc/nfsd.fh' (and defaults to 'proc_t' labeling). Selinux does
      know of '/net/rpc/nfsd.fh' (and applies the 'sysctl_rpc_t' label).
      
      PID stripping from the path was done implicitly in the previous code
      because the proc_dir_entry tree had the root in '/net' in the example
      from above. The dentry tree has the root in '/1'.
      Signed-off-by: NEric W. Biederman <ebiederm@xmission.com>
      Signed-off-by: NLucian Adrian Grijincu <lucian.grijincu@gmail.com>
      Signed-off-by: NEric Paris <eparis@redhat.com>
      8e6c9693
    • E
      SELinux: Use dentry name in new object labeling · 652bb9b0
      Eric Paris 提交于
      Currently SELinux has rules which label new objects according to 3 criteria.
      The label of the process creating the object, the label of the parent
      directory, and the type of object (reg, dir, char, block, etc.)  This patch
      adds a 4th criteria, the dentry name, thus we can distinguish between
      creating a file in an etc_t directory called shadow and one called motd.
      
      There is no file globbing, regex parsing, or anything mystical.  Either the
      policy exactly (strcmp) matches the dentry name of the object or it doesn't.
      This patch has no changes from today if policy does not implement the new
      rules.
      Signed-off-by: NEric Paris <eparis@redhat.com>
      652bb9b0
    • E
      fs/vfs/security: pass last path component to LSM on inode creation · 2a7dba39
      Eric Paris 提交于
      SELinux would like to implement a new labeling behavior of newly created
      inodes.  We currently label new inodes based on the parent and the creating
      process.  This new behavior would also take into account the name of the
      new object when deciding the new label.  This is not the (supposed) full path,
      just the last component of the path.
      
      This is very useful because creating /etc/shadow is different than creating
      /etc/passwd but the kernel hooks are unable to differentiate these
      operations.  We currently require that userspace realize it is doing some
      difficult operation like that and than userspace jumps through SELinux hoops
      to get things set up correctly.  This patch does not implement new
      behavior, that is obviously contained in a seperate SELinux patch, but it
      does pass the needed name down to the correct LSM hook.  If no such name
      exists it is fine to pass NULL.
      Signed-off-by: NEric Paris <eparis@redhat.com>
      2a7dba39
  8. 06 1月, 2011 1 次提交
  9. 03 12月, 2010 1 次提交
    • E
      SELinux: do not compute transition labels on mountpoint labeled filesystems · 415103f9
      Eric Paris 提交于
      selinux_inode_init_security computes transitions sids even for filesystems
      that use mount point labeling.  It shouldn't do that.  It should just use
      the mount point label always and no matter what.
      
      This causes 2 problems.  1) it makes file creation slower than it needs to be
      since we calculate the transition sid and 2) it allows files to be created
      with a different label than the mount point!
      
      # id -Z
      staff_u:sysadm_r:sysadm_t:s0-s0:c0.c1023
      # sesearch --type --class file --source sysadm_t --target tmp_t
      Found 1 semantic te rules:
         type_transition sysadm_t tmp_t : file user_tmp_t;
      
      # mount -o loop,context="system_u:object_r:tmp_t:s0"  /tmp/fs /mnt/tmp
      
      # ls -lZ /mnt/tmp
      drwx------. root root system_u:object_r:tmp_t:s0       lost+found
      # touch /mnt/tmp/file1
      # ls -lZ /mnt/tmp
      -rw-r--r--. root root staff_u:object_r:user_tmp_t:s0   file1
      drwx------. root root system_u:object_r:tmp_t:s0       lost+found
      
      Whoops, we have a mount point labeled filesystem tmp_t with a user_tmp_t
      labeled file!
      Signed-off-by: NEric Paris <eparis@redhat.com>
      Reviewed-by: NReviewed-by: James Morris <jmorris@namei.org>
      415103f9
  10. 24 11月, 2010 2 次提交
  11. 18 11月, 2010 1 次提交
  12. 16 11月, 2010 1 次提交
  13. 21 10月, 2010 2 次提交
  14. 18 8月, 2010 2 次提交
    • N
      tty: fix fu_list abuse · d996b62a
      Nick Piggin 提交于
      tty: fix fu_list abuse
      
      tty code abuses fu_list, which causes a bug in remount,ro handling.
      
      If a tty device node is opened on a filesystem, then the last link to the inode
      removed, the filesystem will be allowed to be remounted readonly. This is
      because fs_may_remount_ro does not find the 0 link tty inode on the file sb
      list (because the tty code incorrectly removed it to use for its own purpose).
      This can result in a filesystem with errors after it is marked "clean".
      
      Taking idea from Christoph's initial patch, allocate a tty private struct
      at file->private_data and put our required list fields in there, linking
      file and tty. This makes tty nodes behave the same way as other device nodes
      and avoid meddling with the vfs, and avoids this bug.
      
      The error handling is not trivial in the tty code, so for this bugfix, I take
      the simple approach of using __GFP_NOFAIL and don't worry about memory errors.
      This is not a problem because our allocator doesn't fail small allocs as a rule
      anyway. So proper error handling is left as an exercise for tty hackers.
      
      [ Arguably filesystem's device inode would ideally be divorced from the
      driver's pseudo inode when it is opened, but in practice it's not clear whether
      that will ever be worth implementing. ]
      
      Cc: linux-kernel@vger.kernel.org
      Cc: Christoph Hellwig <hch@infradead.org>
      Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
      Cc: Greg Kroah-Hartman <gregkh@suse.de>
      Signed-off-by: NNick Piggin <npiggin@kernel.dk>
      Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
      d996b62a
    • N
      fs: cleanup files_lock locking · ee2ffa0d
      Nick Piggin 提交于
      fs: cleanup files_lock locking
      
      Lock tty_files with a new spinlock, tty_files_lock; provide helpers to
      manipulate the per-sb files list; unexport the files_lock spinlock.
      
      Cc: linux-kernel@vger.kernel.org
      Cc: Christoph Hellwig <hch@infradead.org>
      Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
      Acked-by: NAndi Kleen <ak@linux.intel.com>
      Acked-by: NGreg Kroah-Hartman <gregkh@suse.de>
      Signed-off-by: NNick Piggin <npiggin@kernel.dk>
      Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
      ee2ffa0d
  15. 02 8月, 2010 9 次提交
  16. 16 7月, 2010 3 次提交
  17. 22 5月, 2010 1 次提交
  18. 29 4月, 2010 1 次提交
    • S
      selinux: generalize disabling of execmem for plt-in-heap archs · fcaaade1
      Stephen Smalley 提交于
      On Tue, 2010-04-27 at 11:47 -0700, David Miller wrote:
      > From: "Tom \"spot\" Callaway" <tcallawa@redhat.com>
      > Date: Tue, 27 Apr 2010 14:20:21 -0400
      >
      > > [root@apollo ~]$ cat /proc/2174/maps
      > > 00010000-00014000 r-xp 00000000 fd:00 15466577
      > >  /sbin/mingetty
      > > 00022000-00024000 rwxp 00002000 fd:00 15466577
      > >  /sbin/mingetty
      > > 00024000-00046000 rwxp 00000000 00:00 0
      > >  [heap]
      >
      > SELINUX probably barfs on the executable heap, the PLT is in the HEAP
      > just like powerpc32 and that's why VM_DATA_DEFAULT_FLAGS has to set
      > both executable and writable.
      >
      > You also can't remove the CONFIG_PPC32 ifdefs in selinux, since
      > because of the VM_DATA_DEFAULT_FLAGS setting used still in that arch,
      > the heap will always have executable permission, just like sparc does.
      > You have to support those binaries forever, whether you like it or not.
      >
      > Let's just replace the CONFIG_PPC32 ifdef in SELINUX with CONFIG_PPC32
      > || CONFIG_SPARC as in Tom's original patch and let's be done with
      > this.
      >
      > In fact I would go through all the arch/ header files and check the
      > VM_DATA_DEFAULT_FLAGS settings and add the necessary new ifdefs to the
      > SELINUX code so that other platforms don't have the pain of having to
      > go through this process too.
      
      To avoid maintaining per-arch ifdefs, it seems that we could just
      directly use (VM_DATA_DEFAULT_FLAGS & VM_EXEC) as the basis for deciding
      whether to enable or disable these checks.   VM_DATA_DEFAULT_FLAGS isn't
      constant on some architectures but instead depends on
      current->personality, but we want this applied uniformly.  So we'll just
      use the initial task state to determine whether or not to enable these
      checks.
      Signed-off-by: NStephen Smalley <sds@tycho.nsa.gov>
      Acked-by: NDavid S. Miller <davem@davemloft.net>
      Signed-off-by: NJames Morris <jmorris@namei.org>
      fcaaade1
  19. 08 4月, 2010 1 次提交
  20. 08 3月, 2010 1 次提交