• Robert Richter's avatar
    cxl/mbox: Fix Payload Length check for Get Log command · 623c0751
    Robert Richter authored
    Commit 2aeaf663 introduced strict checking for variable length
    payload size validation. The payload length of received data must
    match the size of the requested data by the caller except for the case
    where the min_out value is set.
    
    The Get Log command does not have a header with a length field set.
    The Log size is determined by the Get Supported Logs command (CXL 3.0,
    8.2.9.5.1). However, the actual size can be smaller and the number of
    valid bytes in the payload output must be determined reading the
    Payload Length field (CXL 3.0, Table 8-36, Note 2).
    
    Two issues arise: The command can successfully complete with a payload
    length of zero. And, the valid payload length must then also be
    consumed by the caller.
    
    Change cxl_xfer_log() to pass the number of payload bytes back to the
    caller to determine the number of log entries. Implement the payload
    handling as a special case where mbox_cmd->size_out is consulted when
    cxl_internal_send_cmd() returns -EIO. A WARN_ONCE() is added to check
    that -EIO is only returned in case of an unexpected output size.
    
    Logs can be bigger than the maximum payload length and multiple Get
    Log commands can be issued. If the received payload size is smaller
    than the maximum payload size we can assume all valid bytes have been
    fetched. Stop sending further Get Log commands then.
    
    On that occasion, change debug messages to also report the opcodes of
    supported commands.
    
    The variable payload commands GET_LSA and SET_LSA are not affected by
    this strict check: SET_LSA cannot be broken because SET_LSA does not
    return an output payload, and GET_LSA never expects short reads.
    
    Fixes: 2aeaf663 ("cxl/mbox: Add variable output size validation for internal commands")
    Signed-off-by: default avatarRobert Richter <rrichter@amd.com>
    Reviewed-by: default avatarDave Jiang <dave.jiang@intel.com>
    Reviewed-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
    Link: https://lore.kernel.org/r/20230119094934.86067-1-rrichter@amd.comSigned-off-by: default avatarDan Williams <dan.j.williams@intel.com>
    623c0751
mbox.c 24.2 KB