aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/ipv4/inet_diag.c28
1 files changed, 17 insertions, 11 deletions
diff --git a/net/ipv4/inet_diag.c b/net/ipv4/inet_diag.c
index 529747d07a2a..95f1a458371d 100644
--- a/net/ipv4/inet_diag.c
+++ b/net/ipv4/inet_diag.c
@@ -432,25 +432,31 @@ static int inet_diag_bc_run(const struct nlattr *_bc,
432 break; 432 break;
433 } 433 }
434 434
435 if (cond->prefix_len == 0)
436 break;
437
438 if (op->code == INET_DIAG_BC_S_COND) 435 if (op->code == INET_DIAG_BC_S_COND)
439 addr = entry->saddr; 436 addr = entry->saddr;
440 else 437 else
441 addr = entry->daddr; 438 addr = entry->daddr;
442 439
440 if (cond->family != AF_UNSPEC &&
441 cond->family != entry->family) {
442 if (entry->family == AF_INET6 &&
443 cond->family == AF_INET) {
444 if (addr[0] == 0 && addr[1] == 0 &&
445 addr[2] == htonl(0xffff) &&
446 bitstring_match(addr + 3,
447 cond->addr,
448 cond->prefix_len))
449 break;
450 }
451 yes = 0;
452 break;
453 }
454
455 if (cond->prefix_len == 0)
456 break;
443 if (bitstring_match(addr, cond->addr, 457 if (bitstring_match(addr, cond->addr,
444 cond->prefix_len)) 458 cond->prefix_len))
445 break; 459 break;
446 if (entry->family == AF_INET6 &&
447 cond->family == AF_INET) {
448 if (addr[0] == 0 && addr[1] == 0 &&
449 addr[2] == htonl(0xffff) &&
450 bitstring_match(addr + 3, cond->addr,
451 cond->prefix_len))
452 break;
453 }
454 yes = 0; 460 yes = 0;
455 break; 461 break;
456 } 462 }