On Fri, 13 Feb 2026 10:26:33 +0000
Anatoly Burakov <[email protected]> wrote:

> Currently, when enabling, disabling, or switching queues, we are using
> rte_malloc followed by an immediate rte_free. This is not needed as these
> structures are not being stored anywhere, so replace them with stack
> allocation or malloc/free where appropriate.
> 
> Signed-off-by: Anatoly Burakov <[email protected]>

AI caught something here.

Patch 22/27 — net/iavf: avoid rte malloc in queue operations
Error (Correctness — Uninitialized stack memory)

In iavf_switch_queue_lv(), the stack-allocated queue_req is not 
zero-initialized:


c
        } queue_req;   /* <-- no "= {0}" */
The original code used rte_zmalloc which zeroes the buffer. The other two 
functions in this same patch (iavf_enable_queues_lv and iavf_disable_queues_lv) 
correctly use = {0}, but iavf_switch_queue_lv does not. The structure is then 
sent as a virtchnl message via args.in_args, meaning uninitialized stack bytes 
will be transmitted to the PF driver. While individual fields like num_chunks, 
vport_id, queue_type, start_queue_id, and num_queues are set explicitly, 
padding bytes and any other fields within the struct will contain garbage.

Additionally, this function previously allocated only sizeof(struct 
virtchnl_del_ena_dis_queues) (which includes exactly 1 chunk), but the new 
stack struct includes IAVF_RXTX_QUEUE_CHUNKS_NUM - 1 additional chunks. Since 
num_chunks is set to 1, the extra space is harmless — but passing 
sizeof(queue_req) as in_args_size now sends a larger buffer than before. 
Compare with the enable/disable functions which also have the extra chunks but 
actually use IAVF_RXTX_QUEUE_CHUNKS_NUM chunks. The size change is likely 
benign but worth noting.

Fix: Add = {0} to the declaration, matching the pattern in the sibling 
functions in the same patch:


c
        } queue_req = {0};

Reply via email to