]> git.baikalelectronics.ru Git - kernel.git/commitdiff
sch_cake: fix srchost/dsthost hashing mode
authorToke Høiland-Jørgensen <toke@redhat.com>
Mon, 16 Aug 2021 11:59:17 +0000 (13:59 +0200)
committerDavid S. Miller <davem@davemloft.net>
Wed, 18 Aug 2021 09:14:00 +0000 (10:14 +0100)
When adding support for using the skb->hash value as the flow hash in CAKE,
I accidentally introduced a logic error that broke the host-only isolation
modes of CAKE (srchost and dsthost keywords). Specifically, the flow_hash
variable should stay initialised to 0 in cake_hash() in pure host-based
hashing mode. Add a check for this before using the skb->hash value as
flow_hash.

Fixes: b0c19ed6088a ("sch_cake: Take advantage of skb->hash where appropriate")
Reported-by: Pete Heist <pete@heistp.net>
Tested-by: Pete Heist <pete@heistp.net>
Signed-off-by: Toke Høiland-Jørgensen <toke@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sched/sch_cake.c

index 951542843cab282f4841e2bb7a5bc6afc5f33ee8..28af8b1e1bb1f750df8c355d58beedadf3a9e8e5 100644 (file)
@@ -720,7 +720,7 @@ static u32 cake_hash(struct cake_tin_data *q, const struct sk_buff *skb,
 skip_hash:
        if (flow_override)
                flow_hash = flow_override - 1;
-       else if (use_skbhash)
+       else if (use_skbhash && (flow_mode & CAKE_FLOW_FLOWS))
                flow_hash = skb->hash;
        if (host_override) {
                dsthost_hash = host_override - 1;