|
@@ -394,9 +394,10 @@ not_unique:
|
|
|
return -EADDRNOTAVAIL;
|
|
|
}
|
|
|
|
|
|
-static inline u32 inet_sk_port_offset(const struct sock *sk)
|
|
|
+static u32 inet_sk_port_offset(const struct sock *sk)
|
|
|
{
|
|
|
const struct inet_sock *inet = inet_sk(sk);
|
|
|
+
|
|
|
return secure_ipv4_port_ephemeral(inet->inet_rcv_saddr,
|
|
|
inet->inet_daddr,
|
|
|
inet->inet_dport);
|
|
@@ -600,7 +601,11 @@ out:
|
|
|
int inet_hash_connect(struct inet_timewait_death_row *death_row,
|
|
|
struct sock *sk)
|
|
|
{
|
|
|
- return __inet_hash_connect(death_row, sk, inet_sk_port_offset(sk),
|
|
|
+ u32 port_offset = 0;
|
|
|
+
|
|
|
+ if (!inet_sk(sk)->inet_num)
|
|
|
+ port_offset = inet_sk_port_offset(sk);
|
|
|
+ return __inet_hash_connect(death_row, sk, port_offset,
|
|
|
__inet_check_established);
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(inet_hash_connect);
|