• Marc Dionne's avatar
    rxrpc: Fix an assertion in rxrpc_read() · 774521f3
    Marc Dionne authored
    In the rxrpc_read() function, which allows a user to read the contents of a
    key, we miscalculate the expected length of an encoded rxkad token by not
    taking into account the key length.  However, the data is stored later
    anyway with an ENCODE_DATA() call - and an assertion failure then ensues
    when the lengths are checked at the end.
    
    Fix this by including the key length in the token size estimation.
    
    The following assertion is produced:
    
    Assertion failed - 384(0x180) == 380(0x17c) is false
    ------------[ cut here ]------------
    kernel BUG at ../net/rxrpc/key.c:1221!
    invalid opcode: 0000 [#1] SMP
    Modules linked in:
    CPU: 2 PID: 2957 Comm: keyctl Not tainted 4.10.0-fscache+ #483
    Hardware name: ASUS All Series/H97-PLUS, BIOS 2306 10/09/2014
    task: ffff8804013a8500 task.stack: ffff8804013ac000
    RIP: 0010:rxrpc_read+0x10de/0x11b6
    RSP: 0018:ffff8804013afe48 EFLAGS: 00010296
    RAX: 000000000000003b RBX: 0000000000000003 RCX: 0000000000000000
    RDX: 0000000000040001 RSI: 00000000000000f6 RDI: 0000000000000300
    RBP: ffff8804013afed8 R08: 0000000000000001 R09: 0000000000000001
    R10: ffff8804013afd90 R11: 0000000000000002 R12: 00005575f7c911b4
    R13: 00005575f7c911b3 R14: 0000000000000157 R15: ffff880408a5d640
    FS:  00007f8dfbc73700(0000) GS:ffff88041fb00000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00005575f7c91008 CR3: 000000040120a000 CR4: 00000000001406e0
    Call Trace:
     keyctl_read_key+0xb6/0xd7
     SyS_keyctl+0x83/0xe7
     do_syscall_64+0x80/0x191
     entry_SYSCALL64_slow_path+0x25/0x25
    Signed-off-by: default avatarMarc Dionne <marc.dionne@auristor.com>
    Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    774521f3
key.c 29 KB