• Joshua Hay's avatar
    idpf: use actual mbx receive payload length · 640f7006
    Joshua Hay authored
    When a mailbox message is received, the driver is checking for a non 0
    datalen in the controlq descriptor. If it is valid, the payload is
    attached to the ctlq message to give to the upper layer.  However, the
    payload response size given to the upper layer was taken from the buffer
    metadata which is _always_ the max buffer size. This meant the API was
    returning 4K as the payload size for all messages.  This went unnoticed
    since the virtchnl exchange response logic was checking for a response
    size less than 0 (error), not less than exact size, or not greater than
    or equal to the max mailbox buffer size (4K). All of these checks will
    pass in the success case since the size provided is always 4K. However,
    this breaks anyone that wants to validate the exact response size.
    
    Fetch the actual payload length from the value provided in the
    descriptor data_len field (instead of the buffer metadata).
    
    Unfortunately, this means we lose some extra error parsing for variable
    sized virtchnl responses such as create vport and get ptypes.  However,
    the original checks weren't really helping anyways since the size was
    _always_ 4K.
    
    Fixes: 34c21fa8 ("idpf: implement virtchnl transaction manager")
    Cc: stable@vger.kernel.org # 6.9+
    Signed-off-by: default avatarJoshua Hay <joshua.a.hay@intel.com>
    Reviewed-by: default avatarPrzemek Kitszel <przemyslaw.kitszel@intel.com>
    Tested-by: default avatarKrishneil Singh <krishneil.k.singh@intel.com>
    Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
    640f7006
idpf_virtchnl.c 104 KB