* [bug report] net/mlx5: Change TTC rules to match on undecrypted ESP packets
@ 2026-07-10 9:41 Dan Carpenter
2026-07-10 10:04 ` Jianbo Liu
0 siblings, 1 reply; 3+ messages in thread
From: Dan Carpenter @ 2026-07-10 9:41 UTC (permalink / raw)
To: Jianbo Liu; +Cc: linux-rdma
Hello Jianbo Liu,
Commit 9f24f0c4d4dd ("net/mlx5: Change TTC rules to match on
undecrypted ESP packets") from Sep 18, 2025 (linux-next), leads to
the following Smatch static checker warning:
drivers/net/ethernet/mellanox/mlx5/core/lib/fs_ttc.c:614 mlx5_create_ttc_table_groups()
warn: passing zero to 'PTR_ERR'
drivers/net/ethernet/mellanox/mlx5/core/lib/fs_ttc.c
529 static int mlx5_create_ttc_table_groups(struct mlx5_ttc_table *ttc,
530 bool use_ipv)
531 {
532 const struct mlx5_fs_ttc_groups *groups = ttc->groups;
533 int inlen = MLX5_ST_SZ_BYTES(create_flow_group_in);
534 int ix = 0;
535 u32 *in;
536 int err;
537 u8 *mc;
538
539 ttc->g = kzalloc_objs(*ttc->g, groups->num_groups);
540 if (!ttc->g)
541 return -ENOMEM;
542 in = kvzalloc(inlen, GFP_KERNEL);
543 if (!in) {
544 kfree(ttc->g);
545 ttc->g = NULL;
546 return -ENOMEM;
547 }
548
549 mc = MLX5_ADDR_OF(create_flow_group_in, in, match_criteria);
550 if (use_ipv)
551 MLX5_SET_TO_ONES(fte_match_param, mc, outer_headers.ip_version);
552 else
553 MLX5_SET_TO_ONES(fte_match_param, mc, outer_headers.ethertype);
554 MLX5_SET_CFG(in, match_criteria_enable, MLX5_MATCH_OUTER_HEADERS);
555
556 /* TCP UDP group */
557 if (groups->use_l4_type) {
558 MLX5_SET_TO_ONES(fte_match_param, mc, outer_headers.l4_type);
559 MLX5_SET_CFG(in, start_flow_index, ix);
560 ix += groups->group_size[ttc->num_groups];
561 MLX5_SET_CFG(in, end_flow_index, ix - 1);
562 ttc->g[ttc->num_groups] = mlx5_create_flow_group(ttc->t, in);
563 if (IS_ERR(ttc->g[ttc->num_groups]))
564 goto err;
565 ttc->num_groups++;
566
567 MLX5_SET(fte_match_param, mc, outer_headers.l4_type, 0);
568 }
569
570 /* L4 Group */
571 MLX5_SET_TO_ONES(fte_match_param, mc, outer_headers.ip_protocol);
572 MLX5_SET_CFG(in, start_flow_index, ix);
573 ix += groups->group_size[ttc->num_groups];
574 MLX5_SET_CFG(in, end_flow_index, ix - 1);
575 ttc->g[ttc->num_groups] = mlx5_create_flow_group(ttc->t, in);
576 if (IS_ERR(ttc->g[ttc->num_groups]))
577 goto err;
578 ttc->num_groups++;
579
580 if (mlx5_ttc_has_esp_flow_group(ttc)) {
581 err = mlx5_create_ttc_table_ipsec_groups(ttc, use_ipv, in, &ix);
582 if (err)
583 goto err;
The error code is supposed to stored in ttc->g[ttc->num_groups].
(don't look at me, I didn't invent the rules).
584
585 MLX5_SET(fte_match_param, mc,
586 misc_parameters_2.ipsec_next_header, 0);
587 }
588
589 /* L3 Group */
590 MLX5_SET(fte_match_param, mc, outer_headers.ip_protocol, 0);
591 MLX5_SET_CFG(in, match_criteria_enable, MLX5_MATCH_OUTER_HEADERS);
592 MLX5_SET_CFG(in, start_flow_index, ix);
593 ix += groups->group_size[ttc->num_groups];
594 MLX5_SET_CFG(in, end_flow_index, ix - 1);
595 ttc->g[ttc->num_groups] = mlx5_create_flow_group(ttc->t, in);
596 if (IS_ERR(ttc->g[ttc->num_groups]))
597 goto err;
598 ttc->num_groups++;
599
600 /* Any Group */
601 memset(in, 0, inlen);
602 MLX5_SET_CFG(in, start_flow_index, ix);
603 ix += groups->group_size[ttc->num_groups];
604 MLX5_SET_CFG(in, end_flow_index, ix - 1);
605 ttc->g[ttc->num_groups] = mlx5_create_flow_group(ttc->t, in);
606 if (IS_ERR(ttc->g[ttc->num_groups]))
607 goto err;
608 ttc->num_groups++;
609
610 kvfree(in);
611 return 0;
612
613 err:
--> 614 err = PTR_ERR(ttc->g[ttc->num_groups]);
615 ttc->g[ttc->num_groups] = NULL;
616 kvfree(in);
617
618 return err;
619 }
This email is a free service from the Smatch-CI project [smatch.sf.net].
regards,
dan carpenter
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [bug report] net/mlx5: Change TTC rules to match on undecrypted ESP packets
2026-07-10 9:41 [bug report] net/mlx5: Change TTC rules to match on undecrypted ESP packets Dan Carpenter
@ 2026-07-10 10:04 ` Jianbo Liu
2026-07-10 11:30 ` Dan Carpenter
0 siblings, 1 reply; 3+ messages in thread
From: Jianbo Liu @ 2026-07-10 10:04 UTC (permalink / raw)
To: Dan Carpenter; +Cc: linux-rdma
Thanks for the report.
This appears to be a false positive. On every failure path in
mlx5_create_ttc_table_ipsec_groups(), mlx5_create_flow_group() stores an
ERR_PTR in:
ttc->g[ttc->num_groups]
The helper increments ttc->num_groups only after successful group
creation.
Therefore, when the helper returns an error, ttc->num_groups still
identifies
the failed entry and that entry contains the same ERR_PTR. It remains
unchanged before the shared error label calls PTR_ERR().
Thanks,
Jianbo
On 7/10/2026 5:41 PM, Dan Carpenter wrote:
> Hello Jianbo Liu,
>
> Commit 9f24f0c4d4dd ("net/mlx5: Change TTC rules to match on
> undecrypted ESP packets") from Sep 18, 2025 (linux-next), leads to
> the following Smatch static checker warning:
>
> drivers/net/ethernet/mellanox/mlx5/core/lib/fs_ttc.c:614 mlx5_create_ttc_table_groups()
> warn: passing zero to 'PTR_ERR'
>
> drivers/net/ethernet/mellanox/mlx5/core/lib/fs_ttc.c
> 529 static int mlx5_create_ttc_table_groups(struct mlx5_ttc_table *ttc,
> 530 bool use_ipv)
> 531 {
> 532 const struct mlx5_fs_ttc_groups *groups = ttc->groups;
> 533 int inlen = MLX5_ST_SZ_BYTES(create_flow_group_in);
> 534 int ix = 0;
> 535 u32 *in;
> 536 int err;
> 537 u8 *mc;
> 538
> 539 ttc->g = kzalloc_objs(*ttc->g, groups->num_groups);
> 540 if (!ttc->g)
> 541 return -ENOMEM;
> 542 in = kvzalloc(inlen, GFP_KERNEL);
> 543 if (!in) {
> 544 kfree(ttc->g);
> 545 ttc->g = NULL;
> 546 return -ENOMEM;
> 547 }
> 548
> 549 mc = MLX5_ADDR_OF(create_flow_group_in, in, match_criteria);
> 550 if (use_ipv)
> 551 MLX5_SET_TO_ONES(fte_match_param, mc, outer_headers.ip_version);
> 552 else
> 553 MLX5_SET_TO_ONES(fte_match_param, mc, outer_headers.ethertype);
> 554 MLX5_SET_CFG(in, match_criteria_enable, MLX5_MATCH_OUTER_HEADERS);
> 555
> 556 /* TCP UDP group */
> 557 if (groups->use_l4_type) {
> 558 MLX5_SET_TO_ONES(fte_match_param, mc, outer_headers.l4_type);
> 559 MLX5_SET_CFG(in, start_flow_index, ix);
> 560 ix += groups->group_size[ttc->num_groups];
> 561 MLX5_SET_CFG(in, end_flow_index, ix - 1);
> 562 ttc->g[ttc->num_groups] = mlx5_create_flow_group(ttc->t, in);
> 563 if (IS_ERR(ttc->g[ttc->num_groups]))
> 564 goto err;
> 565 ttc->num_groups++;
> 566
> 567 MLX5_SET(fte_match_param, mc, outer_headers.l4_type, 0);
> 568 }
> 569
> 570 /* L4 Group */
> 571 MLX5_SET_TO_ONES(fte_match_param, mc, outer_headers.ip_protocol);
> 572 MLX5_SET_CFG(in, start_flow_index, ix);
> 573 ix += groups->group_size[ttc->num_groups];
> 574 MLX5_SET_CFG(in, end_flow_index, ix - 1);
> 575 ttc->g[ttc->num_groups] = mlx5_create_flow_group(ttc->t, in);
> 576 if (IS_ERR(ttc->g[ttc->num_groups]))
> 577 goto err;
> 578 ttc->num_groups++;
> 579
> 580 if (mlx5_ttc_has_esp_flow_group(ttc)) {
> 581 err = mlx5_create_ttc_table_ipsec_groups(ttc, use_ipv, in, &ix);
> 582 if (err)
> 583 goto err;
>
>
> The error code is supposed to stored in ttc->g[ttc->num_groups].
> (don't look at me, I didn't invent the rules).
>
> 584
> 585 MLX5_SET(fte_match_param, mc,
> 586 misc_parameters_2.ipsec_next_header, 0);
> 587 }
> 588
> 589 /* L3 Group */
> 590 MLX5_SET(fte_match_param, mc, outer_headers.ip_protocol, 0);
> 591 MLX5_SET_CFG(in, match_criteria_enable, MLX5_MATCH_OUTER_HEADERS);
> 592 MLX5_SET_CFG(in, start_flow_index, ix);
> 593 ix += groups->group_size[ttc->num_groups];
> 594 MLX5_SET_CFG(in, end_flow_index, ix - 1);
> 595 ttc->g[ttc->num_groups] = mlx5_create_flow_group(ttc->t, in);
> 596 if (IS_ERR(ttc->g[ttc->num_groups]))
> 597 goto err;
> 598 ttc->num_groups++;
> 599
> 600 /* Any Group */
> 601 memset(in, 0, inlen);
> 602 MLX5_SET_CFG(in, start_flow_index, ix);
> 603 ix += groups->group_size[ttc->num_groups];
> 604 MLX5_SET_CFG(in, end_flow_index, ix - 1);
> 605 ttc->g[ttc->num_groups] = mlx5_create_flow_group(ttc->t, in);
> 606 if (IS_ERR(ttc->g[ttc->num_groups]))
> 607 goto err;
> 608 ttc->num_groups++;
> 609
> 610 kvfree(in);
> 611 return 0;
> 612
> 613 err:
> --> 614 err = PTR_ERR(ttc->g[ttc->num_groups]);
> 615 ttc->g[ttc->num_groups] = NULL;
> 616 kvfree(in);
> 617
> 618 return err;
> 619 }
>
> This email is a free service from the Smatch-CI project [smatch.sf.net].
>
> regards,
> dan carpenter
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [bug report] net/mlx5: Change TTC rules to match on undecrypted ESP packets
2026-07-10 10:04 ` Jianbo Liu
@ 2026-07-10 11:30 ` Dan Carpenter
0 siblings, 0 replies; 3+ messages in thread
From: Dan Carpenter @ 2026-07-10 11:30 UTC (permalink / raw)
To: Jianbo Liu; +Cc: linux-rdma
On Fri, Jul 10, 2026 at 06:04:35PM +0800, Jianbo Liu wrote:
> Thanks for the report.
>
> This appears to be a false positive. On every failure path in
> mlx5_create_ttc_table_ipsec_groups(), mlx5_create_flow_group() stores an
> ERR_PTR in:
>
> ttc->g[ttc->num_groups]
>
> The helper increments ttc->num_groups only after successful group
> creation.
> Therefore, when the helper returns an error, ttc->num_groups still
> identifies
> the failed entry and that entry contains the same ERR_PTR. It remains
> unchanged before the shared error label calls PTR_ERR().
>
Ah, yes. Thanks. I should have checked... :/
regards,
dan carpenter
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-07-10 11:30 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-10 9:41 [bug report] net/mlx5: Change TTC rules to match on undecrypted ESP packets Dan Carpenter
2026-07-10 10:04 ` Jianbo Liu
2026-07-10 11:30 ` Dan Carpenter
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox