[PATCH v2 2/2] net/bnxt: remove VLA from EM key block swap

Mohammad Shuab Siddique mohammad-shuab.siddique at broadcom.com
Tue Oct 13 19:19:55 CEST 2026


From: Dakota Sicher <dakota.sicher at broadcom.com>

ulp_mapper_blob_block_swap() used a variable-length array on the
stack as scratch space for the block swap. The block size comes from
the device table and is small, but a VLA is still undesirable. Swap
the blocks in place instead, which needs no scratch buffer.

Signed-off-by: Dakota Sicher <dakota.sicher at broadcom.com>
Signed-off-by: Manish Kurup <manish.kurup at broadcom.com>
Signed-off-by: Mohammad Shuab Siddique <mohammad-shuab.siddique at broadcom.com>
---
 drivers/net/bnxt/tf_ulp/ulp_mapper_tfc.c | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/drivers/net/bnxt/tf_ulp/ulp_mapper_tfc.c b/drivers/net/bnxt/tf_ulp/ulp_mapper_tfc.c
index 2d89f10d5e8..2cba6fffa81 100644
--- a/drivers/net/bnxt/tf_ulp/ulp_mapper_tfc.c
+++ b/drivers/net/bnxt/tf_ulp/ulp_mapper_tfc.c
@@ -388,10 +388,9 @@ static const char * const mpc_error_str[] = {
 static int32_t
 ulp_mapper_blob_block_swap(struct ulp_blob *blob, uint32_t block_sz)
 {
-	uint8_t data[block_sz]; /* size of a block for temp storage */
 	uint16_t num_words, data_sz;
-	uint8_t *pdata;
-	int i;
+	uint8_t *pdata, *lo, *hi, tmp;
+	uint32_t i, j;
 
 	/* Shouldn't happen since it is internal function, but check anyway */
 	if (unlikely(blob == NULL || !block_sz)) {
@@ -407,13 +406,16 @@ ulp_mapper_blob_block_swap(struct ulp_blob *blob, uint32_t block_sz)
 		return -EINVAL;
 	}
 
+	/* Swap the blocks in place, one byte at a time, no temp buffer */
 	num_words = data_sz / block_sz;
 	for (i = 0; i < num_words / 2; i++) {
-		memcpy(data, &pdata[i * block_sz], block_sz);
-		memcpy(&pdata[i * block_sz],
-		       &pdata[(num_words - 1 - i) * block_sz], block_sz);
-		memcpy(&pdata[(num_words - 1 - i) * block_sz],
-		       data, block_sz);
+		lo = &pdata[i * block_sz];
+		hi = &pdata[(num_words - 1 - i) * block_sz];
+		for (j = 0; j < block_sz; j++) {
+			tmp = lo[j];
+			lo[j] = hi[j];
+			hi[j] = tmp;
+		}
 	}
 	return 0;
 }
-- 
2.47.3



More information about the dev mailing list