Skip to contentSkip to conversation

New: tc filter show from iproute2 does not work correctly on 32bit x86

Bug 84661 Daniel Borkmann 3 participants 3 messages Sep 20, 2014 1 message not in the archive

Subsystems (2)
lore
Share & tools
lore
#1 lore raw
In reply to a message not in the archive

[ Cc'ing Yang ]

-------- Original Message --------
Subject: [Bug 84661] New: tc filter show from iproute2 does not work correctly on 32bit x86
Date: Tue, 16 Sep 2014 11:47:20 +0000
From: [email protected]
To: [email protected]

https://bugzilla.kernel.org/show_bug.cgi?id=84661

            Bug ID: 84661
           Summary: tc filter show from iproute2 does not work correctly
                    on 32bit x86
           Product: Networking
           Version: 2.5
    Kernel Version: 3.14.17 and 3.16.1
          Hardware: All
                OS: Linux
              Tree: Mainline
            Status: NEW
          Severity: normal
          Priority: P1
         Component: Other
          Assignee: [email protected]
          Reporter: [email protected]
        Regression: No

i tested this issue with kernels 3.14.x and 3.16.x. and iproute2-3.16.0

This commit:
https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=6a031f67c83aa175aedd10d4ae64750415ab57b0
breaking output tc filter show on 32bit systems.

This simple script shows the difference in the work on i586 and x86_64:
-------------------------
#!/bin/sh
dev=$1
tc qdisc add dev $dev root handle 1: htb default fffe
tc filter add dev $dev parent 1:0 protocol ip pref 10 u32
tc filter add dev $dev parent 1:0 protocol ip pref 10 handle 100: u32 divisor 8 tc filter add dev $dev parent 1:0 protocol ip pref 10 u32 ht 800:: match ip dst 10.21.10.0/21 hashkey mask 0x00000700 at 16 link 100:
tc filter show dev $dev
tc filter del dev $dev parent 1:0 protocol ip pref 10 u32 ht 800:: match ip dst 10.21.10.0/21 hashkey mask 0x00000700 at 16 link 100:
tc qdisc del dev $dev root handle 1: htb default fffe
---------------------------

output on i586:

#./script enp0s25
filter parent 1: protocol ip pref 10 u32
filter parent 1: protocol ip pref 10 u32 fh 100: ht divisor 8 filter parent 1: protocol ip pref 10 u32 fh 800: ht divisor 1

output on x86_64:

# ./script eth0
filter parent 1: protocol ip pref 10 u32
filter parent 1: protocol ip pref 10 u32 fh 100: ht divisor 8
filter parent 1: protocol ip pref 10 u32 fh 800: ht divisor 1
filter parent 1: protocol ip pref 10 u32 fh 800::800 order 2048 key ht 800 bkt
0 link 100:
  match 0a150800/fffff800 at 16
    hash mask 00000700 at 16
Signature · 2 lines
You are receiving this mail because:
You are watching the assignee of the bug.
#2 lore raw
Quoted 57 lines · Daniel Borkmann

[ Cc'ing Yang ]

-------- Original Message --------
Subject: [Bug 84661] New: tc filter show from iproute2 does not work correctly on 32bit x86
Date: Tue, 16 Sep 2014 11:47:20 +0000
From: [email protected]
To: [email protected]

https://bugzilla.kernel.org/show_bug.cgi?id=84661

             Bug ID: 84661
            Summary: tc filter show from iproute2 does not work correctly
                     on 32bit x86
            Product: Networking
            Version: 2.5
     Kernel Version: 3.14.17 and 3.16.1
           Hardware: All
                 OS: Linux
               Tree: Mainline
             Status: NEW
           Severity: normal
           Priority: P1
          Component: Other
           Assignee: [email protected]
           Reporter: [email protected]
         Regression: No

i tested this issue with kernels 3.14.x and 3.16.x. and iproute2-3.16.0

This commit:
https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=6a031f67c83aa175aedd10d4ae64750415ab57b0
breaking output tc filter show on 32bit systems.

This simple script shows the difference in the work on i586 and x86_64:
-------------------------
#!/bin/sh
dev=$1
tc qdisc add dev $dev root handle 1: htb default fffe
tc filter add dev $dev parent 1:0 protocol ip pref 10 u32
tc filter add dev $dev parent 1:0 protocol ip pref 10 handle 100: u32 divisor 8 tc filter add dev $dev parent 1:0 protocol ip pref 10 u32 ht 800:: match ip dst 10.21.10.0/21 hashkey mask 0x00000700 at 16 link 100:
tc filter show dev $dev
tc filter del dev $dev parent 1:0 protocol ip pref 10 u32 ht 800:: match ip dst 10.21.10.0/21 hashkey mask 0x00000700 at 16 link 100:
tc qdisc del dev $dev root handle 1: htb default fffe
---------------------------

output on i586:

#./script enp0s25
filter parent 1: protocol ip pref 10 u32
filter parent 1: protocol ip pref 10 u32 fh 100: ht divisor 8 filter parent 1: protocol ip pref 10 u32 fh 800: ht divisor 1

output on x86_64:

Quoted 9 lines
# ./script eth0
filter parent 1: protocol ip pref 10 u32
filter parent 1: protocol ip pref 10 u32 fh 100: ht divisor 8
filter parent 1: protocol ip pref 10 u32 fh 800: ht divisor 1
filter parent 1: protocol ip pref 10 u32 fh 800::800 order 2048 key ht 800 bkt
0 link 100:
   match 0a150800/fffff800 at 16
     hash mask 00000700 at 16

I do not understand how a netem patch could change something for this case ?

#3 lore raw
Quoted 67 lines · Eric Dumazet
Quoted 57 lines · Daniel Borkmann

[ Cc'ing Yang ]

-------- Original Message --------
Subject: [Bug 84661] New: tc filter show from iproute2 does not work correctly on 32bit x86
Date: Tue, 16 Sep 2014 11:47:20 +0000
From: [email protected]
To: [email protected]

https://bugzilla.kernel.org/show_bug.cgi?id=84661

              Bug ID: 84661
             Summary: tc filter show from iproute2 does not work correctly
                      on 32bit x86
             Product: Networking
             Version: 2.5
      Kernel Version: 3.14.17 and 3.16.1
            Hardware: All
                  OS: Linux
                Tree: Mainline
              Status: NEW
            Severity: normal
            Priority: P1
           Component: Other
            Assignee: [email protected]
            Reporter: [email protected]
          Regression: No

i tested this issue with kernels 3.14.x and 3.16.x. and iproute2-3.16.0

This commit:
https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=6a031f67c83aa175aedd10d4ae64750415ab57b0
breaking output tc filter show on 32bit systems.

This simple script shows the difference in the work on i586 and x86_64:
-------------------------
#!/bin/sh
dev=$1
tc qdisc add dev $dev root handle 1: htb default fffe
tc filter add dev $dev parent 1:0 protocol ip pref 10 u32
tc filter add dev $dev parent 1:0 protocol ip pref 10 handle 100: u32 divisor 8 tc filter add dev $dev parent 1:0 protocol ip pref 10 u32 ht 800:: match ip dst 10.21.10.0/21 hashkey mask 0x00000700 at 16 link 100:
tc filter show dev $dev
tc filter del dev $dev parent 1:0 protocol ip pref 10 u32 ht 800:: match ip dst 10.21.10.0/21 hashkey mask 0x00000700 at 16 link 100:
tc qdisc del dev $dev root handle 1: htb default fffe
---------------------------

output on i586:

#./script enp0s25
filter parent 1: protocol ip pref 10 u32
filter parent 1: protocol ip pref 10 u32 fh 100: ht divisor 8 filter parent 1: protocol ip pref 10 u32 fh 800: ht divisor 1

output on x86_64:

Quoted 9 lines
# ./script eth0
filter parent 1: protocol ip pref 10 u32
filter parent 1: protocol ip pref 10 u32 fh 100: ht divisor 8
filter parent 1: protocol ip pref 10 u32 fh 800: ht divisor 1
filter parent 1: protocol ip pref 10 u32 fh 800::800 order 2048 key ht 800 bkt
0 link 100:
    match 0a150800/fffff800 at 16
      hash mask 00000700 at 16
Quoted 2 lines

I do not understand how a netem patch could change something for this case ?

No, Anton Boyarshinov checked this commit, and the problem is not in it. the bug had appearedbetween the last and the first release of the 3.13 and 3.14 kernel.