@@ -390,7 +390,8 @@ static int compute_score(struct sock *sk, struct net *net,
dif, sdif);
if (!dev_match)
return -1;
- score += 4;
+ if (sk->sk_bound_dev_if)
+ score += 4;
if (READ_ONCE(sk->sk_incoming_cpu) == raw_smp_processor_id())
score++;
@@ -133,7 +133,8 @@ static int compute_score(struct sock *sk, struct net *net,
dev_match = udp_sk_bound_dev_eq(net, sk->sk_bound_dev_if, dif, sdif);
if (!dev_match)
return -1;
- score++;
+ if (sk->sk_bound_dev_if)
+ score++;
if (READ_ONCE(sk->sk_incoming_cpu) == raw_smp_processor_id())
score++;
udp: commit 6da5b0f027a825df2aebc1927a27bda185dc03d4 introduced regression in compute_score() Previously for addr_any sockets an interface bound socket had a higher priority than an unbound socket that seems right. For example, this feature is used in dhcprelay daemon and now it is broken. So, this patch returns the old behavior and gives higher score for sk_bound_dev_if sockets. Signed-off-by: Peter Kosyh <p.kosyh@gmail.com> --- net/ipv4/udp.c | 3 ++- net/ipv6/udp.c | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) -- 2.31.1