• Edward Adam Davis's avatar
    keys, dns: Fix missing size check of V1 server-list header · 1997b3cb
    Edward Adam Davis authored
    The dns_resolver_preparse() function has a check on the size of the
    payload for the basic header of the binary-style payload, but is missing
    a check for the size of the V1 server-list payload header after
    determining that's what we've been given.
    
    Fix this by getting rid of the the pointer to the basic header and just
    assuming that we have a V1 server-list payload and moving the V1 server
    list pointer inside the if-statement.  Dealing with other types and
    versions can be left for when such have been defined.
    
    This can be tested by doing the following with KASAN enabled:
    
        echo -n -e '\x0\x0\x1\x2' | keyctl padd dns_resolver foo @p
    
    and produces an oops like the following:
    
        BUG: KASAN: slab-out-of-bounds in dns_resolver_preparse+0xc9f/0xd60 net/dns_resolver/dns_key.c:127
        Read of size 1 at addr ffff888028894084 by task syz-executor265/5069
        ...
        Call Trace:
          dns_resolver_preparse+0xc9f/0xd60 net/dns_resolver/dns_key.c:127
          __key_create_or_update+0x453/0xdf0 security/keys/key.c:842
          key_create_or_update+0x42/0x50 security/keys/key.c:1007
          __do_sys_add_key+0x29c/0x450 security/keys/keyctl.c:134
          do_syscall_x64 arch/x86/entry/common.c:52 [inline]
          do_syscall_64+0x40/0x110 arch/x86/entry/common.c:83
          entry_SYSCALL_64_after_hwframe+0x62/0x6a
    
    This patch was originally by Edward Adam Davis, but was modified by
    Linus.
    
    Fixes: b946001d3bb1 ("keys, dns: Allow key types (eg. DNS) to be reclaimed immediately on expiry")
    Reported-and-tested-by: syzbot+94bbb75204a05da3d89f@syzkaller.appspotmail.com
    Link: https://lore.kernel.org/r/0000000000009b39bc060c73e209@google.com/Suggested-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: default avatarEdward Adam Davis <eadavis@qq.com>
    Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
    Tested-by: default avatarDavid Howells <dhowells@redhat.com>
    Cc: Edward Adam Davis <eadavis@qq.com>
    Cc: Jarkko Sakkinen <jarkko@kernel.org>
    Cc: Jeffrey E Altman <jaltman@auristor.com>
    Cc: Wang Lei <wang840925@gmail.com>
    Cc: Jeff Layton <jlayton@redhat.com>
    Cc: Steve French <sfrench@us.ibm.com>
    Cc: Marc Dionne <marc.dionne@auristor.com>
    Cc: "David S. Miller" <davem@davemloft.net>
    Cc: Eric Dumazet <edumazet@google.com>
    Cc: Jakub Kicinski <kuba@kernel.org>
    Cc: Paolo Abeni <pabeni@redhat.com>
    Reviewed-by: default avatarSimon Horman <horms@kernel.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    1997b3cb
dns_key.c 9.96 KB