• Eric Biggers's avatar
    KEYS: fix dereferencing NULL payload with nonzero length · 5649645d
    Eric Biggers authored
    sys_add_key() and the KEYCTL_UPDATE operation of sys_keyctl() allowed a
    NULL payload with nonzero length to be passed to the key type's
    ->preparse(), ->instantiate(), and/or ->update() methods.  Various key
    types including asymmetric, cifs.idmap, cifs.spnego, and pkcs7_test did
    not handle this case, allowing an unprivileged user to trivially cause a
    NULL pointer dereference (kernel oops) if one of these key types was
    present.  Fix it by doing the copy_from_user() when 'plen' is nonzero
    rather than when '_payload' is non-NULL, causing the syscall to fail
    with EFAULT as expected when an invalid buffer is specified.
    
    Cc: stable@vger.kernel.org # 2.6.10+
    Signed-off-by: default avatarEric Biggers <ebiggers@google.com>
    Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
    Signed-off-by: default avatarJames Morris <james.l.morris@oracle.com>
    5649645d
keyctl.c 42.6 KB