From e1c9fcab3f17b050793d1e771d33448027a15ae1 Mon Sep 17 00:00:00 2001 From: Andy Moreton Date: Tue, 18 May 2021 18:10:11 +0300 Subject: [PATCH] common/sfc_efx/base: limit reported MCDI response length MCDI helper routines in libefx include length checks for response messages, to ensure that short replies and optional fields are handled correctly. If the MCDI response message from the firmware is larger than the caller's buffer then the response length reported to the caller should be limited to the buffer size. Otherwise length checks in the caller may allow reading past the end of the buffer. Fixes: 6f619653b9b1 ("net/sfc/base: import MCDI implementation") Cc: stable@dpdk.org Signed-off-by: Andy Moreton Signed-off-by: Ivan Malov Reviewed-by: Andrew Rybchenko --- drivers/common/sfc_efx/base/efx_mcdi.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/common/sfc_efx/base/efx_mcdi.c b/drivers/common/sfc_efx/base/efx_mcdi.c index ff676f8a01..f4e1384d09 100644 --- a/drivers/common/sfc_efx/base/efx_mcdi.c +++ b/drivers/common/sfc_efx/base/efx_mcdi.c @@ -516,6 +516,9 @@ efx_mcdi_finish_response( bytes = MIN(emrp->emr_out_length_used, emrp->emr_out_length); efx_mcdi_read_response(enp, emrp->emr_out_buf, resp_off, bytes); + /* Report bytes copied to caller (response message may be larger) */ + emrp->emr_out_length_used = bytes; + #if EFSYS_OPT_MCDI_LOGGING if (emtp->emt_logger != NULL) { emtp->emt_logger(emtp->emt_context, -- 2.20.1