score = compute_score(sk, net, saddr, sport,
                                      daddr, hnum, dif, sdif);
                if (score > badness) {
-                       result = lookup_reuseport(net, sk, skb,
-                                                 saddr, sport, daddr, hnum);
+                       badness = score;
+                       result = lookup_reuseport(net, sk, skb, saddr, sport, daddr, hnum);
+                       if (!result) {
+                               result = sk;
+                               continue;
+                       }
+
                        /* Fall back to scoring if group has connections */
-                       if (result && !reuseport_has_conns(sk))
+                       if (!reuseport_has_conns(sk))
                                return result;
 
-                       result = result ? : sk;
-                       badness = score;
+                       /* Reuseport logic returned an error, keep original score. */
+                       if (IS_ERR(result))
+                               continue;
+
+                       badness = compute_score(result, net, saddr, sport,
+                                               daddr, hnum, dif, sdif);
+
                }
        }
        return result;
 
                score = compute_score(sk, net, saddr, sport,
                                      daddr, hnum, dif, sdif);
                if (score > badness) {
-                       result = lookup_reuseport(net, sk, skb,
-                                                 saddr, sport, daddr, hnum);
+                       badness = score;
+                       result = lookup_reuseport(net, sk, skb, saddr, sport, daddr, hnum);
+                       if (!result) {
+                               result = sk;
+                               continue;
+                       }
+
                        /* Fall back to scoring if group has connections */
-                       if (result && !reuseport_has_conns(sk))
+                       if (!reuseport_has_conns(sk))
                                return result;
 
-                       result = result ? : sk;
-                       badness = score;
+                       /* Reuseport logic returned an error, keep original score. */
+                       if (IS_ERR(result))
+                               continue;
+
+                       badness = compute_score(sk, net, saddr, sport,
+                                               daddr, hnum, dif, sdif);
                }
        }
        return result;