|
@@ -849,28 +849,17 @@ static int tcp_v6_inbound_md5_hash (struct sock *sk, struct sk_buff *skb)
|
|
hash_expected = tcp_v6_md5_do_lookup(sk, &ip6h->saddr);
|
|
hash_expected = tcp_v6_md5_do_lookup(sk, &ip6h->saddr);
|
|
hash_location = tcp_parse_md5sig_option(th);
|
|
hash_location = tcp_parse_md5sig_option(th);
|
|
|
|
|
|
- /* do we have a hash as expected? */
|
|
|
|
- if (!hash_expected) {
|
|
|
|
- if (!hash_location)
|
|
|
|
- return 0;
|
|
|
|
- if (net_ratelimit()) {
|
|
|
|
- printk(KERN_INFO "MD5 Hash NOT expected but found "
|
|
|
|
- "(" NIP6_FMT ", %u)->"
|
|
|
|
- "(" NIP6_FMT ", %u)\n",
|
|
|
|
- NIP6(ip6h->saddr), ntohs(th->source),
|
|
|
|
- NIP6(ip6h->daddr), ntohs(th->dest));
|
|
|
|
- }
|
|
|
|
|
|
+ /* We've parsed the options - do we have a hash? */
|
|
|
|
+ if (!hash_expected && !hash_location)
|
|
|
|
+ return 0;
|
|
|
|
+
|
|
|
|
+ if (hash_expected && !hash_location) {
|
|
|
|
+ NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_TCPMD5NOTFOUND);
|
|
return 1;
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
|
|
- if (!hash_location) {
|
|
|
|
- if (net_ratelimit()) {
|
|
|
|
- printk(KERN_INFO "MD5 Hash expected but NOT found "
|
|
|
|
- "(" NIP6_FMT ", %u)->"
|
|
|
|
- "(" NIP6_FMT ", %u)\n",
|
|
|
|
- NIP6(ip6h->saddr), ntohs(th->source),
|
|
|
|
- NIP6(ip6h->daddr), ntohs(th->dest));
|
|
|
|
- }
|
|
|
|
|
|
+ if (!hash_expected && hash_location) {
|
|
|
|
+ NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_TCPMD5UNEXPECTED);
|
|
return 1;
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
|