• David Howells's avatar
    KEYS: Fix UID check in keyctl_get_persistent() · fbf8c53f
    David Howells authored
    If the UID is specified by userspace when calling the KEYCTL_GET_PERSISTENT
    function and the process does not have the CAP_SETUID capability, then the
    function will return -EPERM if the current process's uid, suid, euid and fsuid
    all match the requested UID.  This is incorrect.
    
    Fix it such that when a non-privileged caller requests a persistent keyring by
    a specific UID they can only request their own (ie. the specified UID matches
    either then process's UID or the process's EUID).
    
    This can be tested by logging in as the user and doing:
    
    	keyctl get_persistent @p
    	keyctl get_persistent @p `id -u`
    	keyctl get_persistent @p 0
    
    The first two should successfully print the same key ID.  The third should do
    the same if called by UID 0 or indicate Operation Not Permitted otherwise.
    Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
    Acked-by: default avatarStephen Gallagher <sgallagh@redhat.com>
    fbf8c53f
persistent.c 4.5 KB