• W
    selinux: no recursive read_lock of policy_rwlock in security_genfs_sid() · f31e7994
    Waiman Long 提交于
    With the introduction of fair queued rwlock, recursive read_lock()
    may hang the offending process if there is a write_lock() somewhere
    in between.
    
    With recursive read_lock checking enabled, the following error was
    reported:
    
    =============================================
    [ INFO: possible recursive locking detected ]
    3.16.0-rc1 #2 Tainted: G            E
    ---------------------------------------------
    load_policy/708 is trying to acquire lock:
     (policy_rwlock){.+.+..}, at: [<ffffffff8125b32a>]
    security_genfs_sid+0x3a/0x170
    
    but task is already holding lock:
     (policy_rwlock){.+.+..}, at: [<ffffffff8125b48c>]
    security_fs_use+0x2c/0x110
    
    other info that might help us debug this:
     Possible unsafe locking scenario:
    
           CPU0
           ----
      lock(policy_rwlock);
      lock(policy_rwlock);
    
    This patch fixes the occurrence of recursive read_lock() of
    policy_rwlock by adding a helper function __security_genfs_sid()
    which requires caller to take the lock before calling it. The
    security_fs_use() was then modified to call the new helper function.
    Signed-off-by: NWaiman Long <Waiman.Long@hp.com>
    Acked-by: NStephen Smalley <sds@tycho.nsa.gov>
    Signed-off-by: NPaul Moore <pmoore@redhat.com>
    f31e7994
services.c 75.8 KB