From: Dakota Sicher <[email protected]>

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 <[email protected]>
Signed-off-by: Manish Kurup <[email protected]>
Signed-off-by: Mohammad Shuab Siddique <[email protected]>
---
 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

Reply via email to