From 1ab3ad8afa1faef99f1b064a2833a7349a284a62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20=C5=BBenczykowski?= Date: Thu, 22 Aug 2024 17:30:20 +0000 Subject: [PATCH] dscpPolicy: minor optimization for verifier MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: 361492282 Test: TreeHugger Signed-off-by: Maciej Żenczykowski Change-Id: I39de974cf056d3e268e1740da90c2af05b5a60b4 --- bpf/progs/dscpPolicy.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/bpf/progs/dscpPolicy.c b/bpf/progs/dscpPolicy.c index 93542ee33e..4bdd3edfbb 100644 --- a/bpf/progs/dscpPolicy.c +++ b/bpf/progs/dscpPolicy.c @@ -28,7 +28,7 @@ DEFINE_BPF_MAP_GRW(socket_policy_cache_map, HASH, uint64_t, RuleEntry, CACHE_MAP DEFINE_BPF_MAP_GRW(ipv4_dscp_policies_map, ARRAY, uint32_t, DscpPolicy, MAX_POLICIES, AID_SYSTEM) DEFINE_BPF_MAP_GRW(ipv6_dscp_policies_map, ARRAY, uint32_t, DscpPolicy, MAX_POLICIES, AID_SYSTEM) -static inline __always_inline void match_policy(struct __sk_buff* skb, bool ipv4) { +static inline __always_inline void match_policy(struct __sk_buff* skb, const bool ipv4) { void* data = (void*)(long)skb->data; const void* data_end = (void*)(long)skb->data_end; @@ -145,8 +145,10 @@ static inline __always_inline void match_policy(struct __sk_buff* skb, bool ipv4 policy = bpf_ipv6_dscp_policies_map_lookup_elem(&key); } - // If the policy lookup failed, just continue (this should not ever happen) - if (!policy) continue; + // Lookup failure cannot happen on an array with MAX_POLICIES entries. + // While 'continue' would make logical sense here, 'return' should be + // easier for the verifier to analyze. + if (!policy) return; // If policy iface index does not match skb, then skip to next policy. if (policy->ifindex != skb->ifindex) continue;