diff options
Diffstat (limited to 'net/ipv4/inet_connection_sock.c')
| -rw-r--r-- | net/ipv4/inet_connection_sock.c | 20 | 
1 files changed, 14 insertions, 6 deletions
diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_sock.c index 18c0d5bffe12..a4db79b1b643 100644 --- a/net/ipv4/inet_connection_sock.c +++ b/net/ipv4/inet_connection_sock.c @@ -610,12 +610,6 @@ no_route:  }  EXPORT_SYMBOL_GPL(inet_csk_route_child_sock); -#if IS_ENABLED(CONFIG_IPV6) -#define AF_INET_FAMILY(fam) ((fam) == AF_INET) -#else -#define AF_INET_FAMILY(fam) true -#endif -  /* Decide when to expire the request and when to resend SYN-ACK */  static inline void syn_ack_recalc(struct request_sock *req, const int thresh,  				  const int max_retries, @@ -770,6 +764,18 @@ void inet_csk_reqsk_queue_hash_add(struct sock *sk, struct request_sock *req,  }  EXPORT_SYMBOL_GPL(inet_csk_reqsk_queue_hash_add); +static void inet_clone_ulp(const struct request_sock *req, struct sock *newsk, +			   const gfp_t priority) +{ +	struct inet_connection_sock *icsk = inet_csk(newsk); + +	if (!icsk->icsk_ulp_ops) +		return; + +	if (icsk->icsk_ulp_ops->clone) +		icsk->icsk_ulp_ops->clone(req, newsk, priority); +} +  /**   *	inet_csk_clone_lock - clone an inet socket, and lock its clone   *	@sk: the socket to clone @@ -810,6 +816,8 @@ struct sock *inet_csk_clone_lock(const struct sock *sk,  		/* Deinitialize accept_queue to trap illegal accesses. */  		memset(&newicsk->icsk_accept_queue, 0, sizeof(newicsk->icsk_accept_queue)); +		inet_clone_ulp(req, newsk, priority); +  		security_inet_csk_clone(newsk, req);  	}  	return newsk;  |