• Vakul Garg's avatar
    tls: Return type of non-data records retrieved using MSG_PEEK in recvmsg · 2b794c40
    Vakul Garg authored
    The patch enables returning 'type' in msghdr for records that are
    retrieved with MSG_PEEK in recvmsg. Further it prevents records peeked
    from socket from getting clubbed with any other record of different
    type when records are subsequently dequeued from strparser.
    
    For each record, we now retain its type in sk_buff's control buffer
    cb[]. Inside control buffer, record's full length and offset are already
    stored by strparser in 'struct strp_msg'. We store record type after
    'struct strp_msg' inside 'struct tls_msg'. For tls1.2, the type is
    stored just after record dequeue. For tls1.3, the type is stored after
    record has been decrypted.
    
    Inside process_rx_list(), before processing a non-data record, we check
    that we must be able to return back the record type to the user
    application. If not, the decrypted records in tls context's rx_list is
    left there without consuming any data.
    
    Fixes: 692d7b5d ("tls: Fix recvmsg() to be able to peek across multiple records")
    Signed-off-by: default avatarVakul Garg <vakul.garg@nxp.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    2b794c40
tls.h 15.4 KB