Patch "net: sched: Fix truncation of offloaded action statistics" has been added to the 6.6-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    net: sched: Fix truncation of offloaded action statistics

to the 6.6-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     net-sched-fix-truncation-of-offloaded-action-statist.patch
and it can be found in the queue-6.6 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit f2f2585f474c245eb304dc7856d9b72dfb67bb8d
Author: Ido Schimmel <idosch@xxxxxxxxxx>
Date:   Tue Feb 4 14:38:39 2025 +0200

    net: sched: Fix truncation of offloaded action statistics
    
    [ Upstream commit 811b8f534fd85e17077bd2ac0413bcd16cc8fb9b ]
    
    In case of tc offload, when user space queries the kernel for tc action
    statistics, tc will query the offloaded statistics from device drivers.
    Among other statistics, drivers are expected to pass the number of
    packets that hit the action since the last query as a 64-bit number.
    
    Unfortunately, tc treats the number of packets as a 32-bit number,
    leading to truncation and incorrect statistics when the number of
    packets since the last query exceeds 0xffffffff:
    
    $ tc -s filter show dev swp2 ingress
    filter protocol all pref 1 flower chain 0
    filter protocol all pref 1 flower chain 0 handle 0x1
      skip_sw
      in_hw in_hw_count 1
            action order 1: mirred (Egress Redirect to device swp1) stolen
            index 1 ref 1 bind 1 installed 58 sec used 0 sec
            Action statistics:
            Sent 1133877034176 bytes 536959475 pkt (dropped 0, overlimits 0 requeues 0)
    [...]
    
    According to the above, 2111-byte packets were redirected which is
    impossible as only 64-byte packets were transmitted and the MTU was
    1500.
    
    Fix by treating packets as a 64-bit number:
    
    $ tc -s filter show dev swp2 ingress
    filter protocol all pref 1 flower chain 0
    filter protocol all pref 1 flower chain 0 handle 0x1
      skip_sw
      in_hw in_hw_count 1
            action order 1: mirred (Egress Redirect to device swp1) stolen
            index 1 ref 1 bind 1 installed 61 sec used 0 sec
            Action statistics:
            Sent 1370624380864 bytes 21416005951 pkt (dropped 0, overlimits 0 requeues 0)
    [...]
    
    Which shows that only 64-byte packets were redirected (1370624380864 /
    21416005951 = 64).
    
    Fixes: 380407023526 ("net/sched: Enable netdev drivers to update statistics of offloaded actions")
    Reported-by: Joe Botha <joe@xxxxxxxxx>
    Signed-off-by: Ido Schimmel <idosch@xxxxxxxxxx>
    Reviewed-by: Petr Machata <petrm@xxxxxxxxxx>
    Reviewed-by: Simon Horman <horms@xxxxxxxxxx>
    Link: https://patch.msgid.link/20250204123839.1151804-1-idosch@xxxxxxxxxx
    Signed-off-by: Jakub Kicinski <kuba@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h
index 326d3a322c109..4ec2a948ae3db 100644
--- a/include/net/sch_generic.h
+++ b/include/net/sch_generic.h
@@ -849,7 +849,7 @@ static inline int qdisc_enqueue(struct sk_buff *skb, struct Qdisc *sch,
 }
 
 static inline void _bstats_update(struct gnet_stats_basic_sync *bstats,
-				  __u64 bytes, __u32 packets)
+				  __u64 bytes, __u64 packets)
 {
 	u64_stats_update_begin(&bstats->syncp);
 	u64_stats_add(&bstats->bytes, bytes);




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux