• Stephen Smalley's avatar
    ipc: use private shmem or hugetlbfs inodes for shm segments. · e1832f29
    Stephen Smalley authored
    The shm implementation internally uses shmem or hugetlbfs inodes for shm
    segments.  As these inodes are never directly exposed to userspace and
    only accessed through the shm operations which are already hooked by
    security modules, mark the inodes with the S_PRIVATE flag so that inode
    security initialization and permission checking is skipped.
    
    This was motivated by the following lockdep warning:
    
      ======================================================
       [ INFO: possible circular locking dependency detected ]
       4.2.0-0.rc3.git0.1.fc24.x86_64+debug #1 Tainted: G        W
      -------------------------------------------------------
       httpd/1597 is trying to acquire lock:
       (&ids->rwsem){+++++.}, at: shm_close+0x34/0x130
       but task is already holding lock:
       (&mm->mmap_sem){++++++}, at: SyS_shmdt+0x4b/0x180
       which lock already depends on the new lock.
       the existing dependency chain (in reverse order) is:
       -> #3 (&mm->mmap_sem){++++++}:
            lock_acquire+0xc7/0x270
            __might_fault+0x7a/0xa0
            filldir+0x9e/0x130
            xfs_dir2_block_getdents.isra.12+0x198/0x1c0 [xfs]
            xfs_readdir+0x1b4/0x330 [xfs]
            xfs_file_readdir+0x2b/0x30 [xfs]
            iterate_dir+0x97/0x130
            SyS_getdents+0x91/0x120
            entry_SYSCALL_64_fastpath+0x12/0x76
       -> #2 (&xfs_dir_ilock_class){++++.+}:
            lock_acquire+0xc7/0x270
            down_read_nested+0x57/0xa0
            xfs_ilock+0x167/0x350 [xfs]
            xfs_ilock_attr_map_shared+0x38/0x50 [xfs]
            xfs_attr_get+0xbd/0x190 [xfs]
            xfs_xattr_get+0x3d/0x70 [xfs]
            generic_getxattr+0x4f/0x70
            inode_doinit_with_dentry+0x162/0x670
            sb_finish_set_opts+0xd9/0x230
            selinux_set_mnt_opts+0x35c/0x660
            superblock_doinit+0x77/0xf0
            delayed_superblock_init+0x10/0x20
            iterate_supers+0xb3/0x110
            selinux_complete_init+0x2f/0x40
            security_load_policy+0x103/0x600
            sel_write_load+0xc1/0x750
            __vfs_write+0x37/0x100
            vfs_write+0xa9/0x1a0
            SyS_write+0x58/0xd0
            entry_SYSCALL_64_fastpath+0x12/0x76
      ...
    Signed-off-by: default avatarStephen Smalley <sds@tycho.nsa.gov>
    Reported-by: default avatarMorten Stevens <mstevens@fedoraproject.org>
    Acked-by: default avatarHugh Dickins <hughd@google.com>
    Acked-by: default avatarPaul Moore <paul@paul-moore.com>
    Cc: Manfred Spraul <manfred@colorfullife.com>
    Cc: Davidlohr Bueso <dave@stgolabs.net>
    Cc: Prarit Bhargava <prarit@redhat.com>
    Cc: Eric Paris <eparis@redhat.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    e1832f29
inode.c 26.9 KB