Thread (18 messages) flat view 18 messages, 2 authors, 2d ago

Re: [PATCH] net/txgbe: fix leak of filters on flow create

From: Zhang Tengfei <hidden>
Date: 2026-09-15 15:48:58

Thanks for the review.
Item 6: the ixgbe counterpart is already on the list:
   [PATCH] net/ixgbe: fix leak of filters on flow create
https://patches.dpdk.org/project/dpdk/patch/20260914133836.14644-1-zhtfdev@gmail.com/

I will send a v2 for txgbe.

On 9/15/26 23:38, Stephen Hemminger wrote:
On Tue, 15 Sep 2026 23:24:36 +0800
Zhang Tengfei [off-list ref] wrote:
quoted
txgbe_flow_create() programs ntuple, ethertype, SYN, FDIR, L2 tunnel and
RSS filters into hardware before allocating the software flow object.
If that allocation fails, create returns an error but leaves the
hardware filter installed. The application has no handle to destroy it.

Allocate the software copy first, then program the hardware. On a
programming failure, free the copy. Set ENOMEM when allocation fails
so the error path does not report success.

L2 tunnel add failures now return immediately instead of falling
through to RSS parsing, which cannot succeed for a VF/PF E-tag rule
and overwrote the original error.

Fixes: 5c2352b9ece6 ("net/txgbe: support creating consistent filter")
Cc: stable@dpdk.org

Signed-off-by: Zhang Tengfei <redacted>
---
Patch looks good, I was going to merge but AI had a couple of small items
that should be addressed first.

Review: [PATCH] net/txgbe: fix leak of filters on flow create
Patchwork: 169627

Applied to main (f43632a) and built with -Dwerror=true, no warnings.

The alloc-before-program reordering is the right fix. The add helpers
(ntuple, ethertype, syn, l2 tunnel) do not modify their input, so
copying the filter into the software object before programming is
equivalent to the old copy-after.

Warning

1. PF FDIR: mask_added not unwound on the new ENOMEM path.

    The allocation now sits after the "A mask cannot be deleted" block.
    When this rule is the first to set the mask, first_mask is TRUE and
    fdir_info->mask_added has been set before rte_zmalloc() runs. On
    allocation failure the code jumps to out without clearing
    mask_added, unlike the program-failure path right below it.
    A later rule with a different mask is then rejected with "only
    support one global mask" even though no rule is using the mask.

    Either move the fdir_rule_ptr allocation above the mask block
    (free it on the mask error paths), or clear mask_added when
    first_mask is set on allocation failure:

	if (fdir_rule_ptr == NULL) {
		PMD_DRV_LOG(ERR, "failed to allocate memory");
		if (first_mask)
			fdir_info->mask_added = FALSE;
		ret = -ENOMEM;
		goto out;
	}

    Allocating first is cleaner.

2. Missing Fixes tag for the VF FDIR path.

    The txgbevf_fdir_filter_program() branch was added later by:

    Fixes: 7eef71080e ("net/txgbe: switch to FDIR on VF")

    Add it (12-char hash) alongside the existing tag so stable
    maintainers know the VF hunk only applies to 25.11 and later.

Info

3. The commit message says ENOMEM is set "so the error path does not
    report success". Other goto out paths in the same function still
    reach rte_flow_error_set() with ret == 0: the flex_bytes_offset /
    flex_relative mismatch, and the trailing goto out for an FDIR rule
    without b_spec. The memcmp() mismatch path passes a positive ret,
    so -ret is negative. Not introduced here, but either fix them in a
    follow-up or narrow the wording.

4. The L2 tunnel early return is a separate behavior change (errno
    reported to the caller changes from the RSS parse error to the
    real add error). It is correct, but belongs in its own patch so
    it can be backported or reverted independently.

5. Lines being moved anyway can drop rte_memcpy() for plain struct
    assignment:

	ntuple_filter_ptr->filter_info = ntuple_filter;

    Same for ethertype, syn, fdir and l2 tunnel.

6. drivers/net/intel/ixgbe/ixgbe_flow.c has the same program-then-
    allocate pattern in ixgbe_flow_create(). txgbe was derived from it,
    the same fix applies there.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help