• David Howells's avatar
    keys: Fix description size · 555df336
    David Howells authored
    The maximum key description size is 4095.  Commit f771fde8 ("keys:
    Simplify key description management") inadvertantly reduced that to 255
    and made sizes between 256 and 4095 work weirdly, and any size whereby
    size & 255 == 0 would cause an assertion in __key_link_begin() at the
    following line:
    
    	BUG_ON(index_key->desc_len == 0);
    
    This can be fixed by simply increasing the size of desc_len in struct
    keyring_index_key to a u16.
    
    Note the argument length test in keyutils only checked empty
    descriptions and descriptions with a size around the limit (ie.  4095)
    and not for all the values in between, so it missed this.  This has been
    addressed and
    
    	https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/keyutils.git/commit/?id=066bf56807c26cd3045a25f355b34c1d8a20a5aa
    
    now exhaustively tests all possible lengths of type, description and
    payload and then some.
    
    The assertion failure looks something like:
    
     kernel BUG at security/keys/keyring.c:1245!
     ...
     RIP: 0010:__key_link_begin+0x88/0xa0
     ...
     Call Trace:
      key_create_or_update+0x211/0x4b0
      __x64_sys_add_key+0x101/0x200
      do_syscall_64+0x5b/0x1e0
      entry_SYSCALL_64_after_hwframe+0x44/0xa9
    
    It can be triggered by:
    
    	keyctl add user "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" a @s
    
    Fixes: f771fde8 ("keys: Simplify key description management")
    Reported-by: default avatarkernel test robot <rong.a.chen@intel.com>
    Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    555df336
key.h 14.9 KB