From c54147b3ada8c37a536a4df90e8707538021ed20 Mon Sep 17 00:00:00 2001 From: Chris Leech Date: Fri, 4 Feb 2022 09:21:47 -0800 Subject: [PATCH 1/1] fcoemon: add snprintf string precision modifiers in fcm_netif_advance GCC 12 is warning of potential snprintf truncations fcm_netif.ifname is an IFNAMSIZ array, but formating with %s doesn't understand that, so add a precision modifier every time we print it to limit the output. This allows the compiler to verify that the output buffer is of sufficient length to never truncate. Signed-off-by: Chris Leech --- fcoemon.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/fcoemon.c b/fcoemon.c index 8c08bc5a032..b85f276c7df 100644 --- a/fcoemon.c +++ b/fcoemon.c @@ -3135,55 +3135,55 @@ static void fcm_netif_advance(struct fcm_netif *ff) case FCD_ERROR: break; case FCD_GET_DCB_STATE: - snprintf(buf, sizeof(buf), "%c%x%2.2x%2.2x%2.2x%2.2x%s", + snprintf(buf, sizeof(buf), "%c%x%2.2x%2.2x%2.2x%2.2x%.*s", DCB_CMD, CLIF_RSP_VERSION, CMD_GET_CONFIG, FEATURE_DCB, 0, - (u_int) strlen(ff->ifname), ff->ifname); + (u_int) strlen(ff->ifname), IFNAMSIZ, ff->ifname); ff->response_pending = fcm_dcbd_request(buf); break; case FCD_SEND_CONF: snprintf(params, sizeof(params), "%x1%x02", ff->ff_app_info.enable, ff->ff_app_info.willing); - snprintf(buf, sizeof(buf), "%c%x%2.2x%2.2x%2.2x%2.2x%s%s", + snprintf(buf, sizeof(buf), "%c%x%2.2x%2.2x%2.2x%2.2x%.*s%s", DCB_CMD, CLIF_RSP_VERSION, CMD_SET_CONFIG, FEATURE_APP, APP_FCOE_STYPE, - (u_int) strlen(ff->ifname), ff->ifname, params); + (u_int) strlen(ff->ifname), IFNAMSIZ, ff->ifname, params); ff->response_pending = fcm_dcbd_request(buf); break; case FCD_GET_PFC_CONFIG: - snprintf(buf, sizeof(buf), "%c%x%2.2x%2.2x%2.2x%2.2x%s%s", + snprintf(buf, sizeof(buf), "%c%x%2.2x%2.2x%2.2x%2.2x%.*s%s", DCB_CMD, CLIF_RSP_VERSION, CMD_GET_CONFIG, FEATURE_PFC, 0, - (u_int) strlen(ff->ifname), ff->ifname, ""); + (u_int) strlen(ff->ifname), IFNAMSIZ, ff->ifname, ""); ff->response_pending = fcm_dcbd_request(buf); break; case FCD_GET_APP_CONFIG: - snprintf(buf, sizeof(buf), "%c%x%2.2x%2.2x%2.2x%2.2x%s%s", + snprintf(buf, sizeof(buf), "%c%x%2.2x%2.2x%2.2x%2.2x%.*s%s", DCB_CMD, CLIF_RSP_VERSION, CMD_GET_CONFIG, FEATURE_APP, APP_FCOE_STYPE, - (u_int) strlen(ff->ifname), ff->ifname, ""); + (u_int) strlen(ff->ifname), IFNAMSIZ, ff->ifname, ""); ff->response_pending = fcm_dcbd_request(buf); break; case FCD_GET_PFC_OPER: - snprintf(buf, sizeof(buf), "%c%x%2.2x%2.2x%2.2x%2.2x%s%s", + snprintf(buf, sizeof(buf), "%c%x%2.2x%2.2x%2.2x%2.2x%.*s%s", DCB_CMD, CLIF_RSP_VERSION, CMD_GET_OPER, FEATURE_PFC, 0, - (u_int) strlen(ff->ifname), ff->ifname, ""); + (u_int) strlen(ff->ifname), IFNAMSIZ, ff->ifname, ""); ff->response_pending = fcm_dcbd_request(buf); break; case FCD_GET_APP_OPER: - snprintf(buf, sizeof(buf), "%c%x%2.2x%2.2x%2.2x%2.2x%s%s", + snprintf(buf, sizeof(buf), "%c%x%2.2x%2.2x%2.2x%2.2x%.*s%s", DCB_CMD, CLIF_RSP_VERSION, CMD_GET_OPER, FEATURE_APP, APP_FCOE_STYPE, - (u_int) strlen(ff->ifname), ff->ifname, ""); + (u_int) strlen(ff->ifname), IFNAMSIZ, ff->ifname, ""); ff->response_pending = fcm_dcbd_request(buf); break; case FCD_GET_PEER: - snprintf(buf, sizeof(buf), "%c%x%2.2x%2.2x%2.2x%2.2x%s%s", + snprintf(buf, sizeof(buf), "%c%x%2.2x%2.2x%2.2x%2.2x%.*s%s", DCB_CMD, CLIF_RSP_VERSION, CMD_GET_PEER, FEATURE_APP, APP_FCOE_STYPE, - (u_int) strlen(ff->ifname), ff->ifname, ""); + (u_int) strlen(ff->ifname), IFNAMSIZ, ff->ifname, ""); ff->response_pending = fcm_dcbd_request(buf); break; case FCD_DONE: -- 2.34.1