diff options
Diffstat (limited to 'net/ipv4/af_inet.c')
| -rw-r--r-- | net/ipv4/af_inet.c | 13 | 
1 files changed, 7 insertions, 6 deletions
diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c index 8b47a4d79d04..9532ee87151f 100644 --- a/net/ipv4/af_inet.c +++ b/net/ipv4/af_inet.c @@ -228,6 +228,8 @@ int inet_listen(struct socket *sock, int backlog)  				err = 0;  			if (err)  				goto out; + +			tcp_fastopen_init_key_once(true);  		}  		err = inet_csk_listen_start(sk, backlog);  		if (err) @@ -317,7 +319,7 @@ lookup_protocol:  	WARN_ON(!answer_prot->slab);  	err = -ENOBUFS; -	sk = sk_alloc(net, PF_INET, GFP_KERNEL, answer_prot); +	sk = sk_alloc(net, PF_INET, GFP_KERNEL, answer_prot, kern);  	if (!sk)  		goto out; @@ -488,7 +490,8 @@ int inet_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)  		inet->inet_saddr = 0;  /* Use device */  	/* Make sure we are allowed to bind here. */ -	if (sk->sk_prot->get_port(sk, snum)) { +	if ((snum || !inet->bind_address_no_port) && +	    sk->sk_prot->get_port(sk, snum)) {  		inet->inet_saddr = inet->inet_rcv_saddr = 0;  		err = -EADDRINUSE;  		goto out_release_sock; @@ -1430,7 +1433,7 @@ int inet_ctl_sock_create(struct sock **sk, unsigned short family,  			 struct net *net)  {  	struct socket *sock; -	int rc = sock_create_kern(family, type, protocol, &sock); +	int rc = sock_create_kern(net, family, type, protocol, &sock);  	if (rc == 0) {  		*sk = sock->sk; @@ -1440,8 +1443,6 @@ int inet_ctl_sock_create(struct sock **sk, unsigned short family,  		 * we do not wish this socket to see incoming packets.  		 */  		(*sk)->sk_prot->unhash(*sk); - -		sk_change_net(*sk, net);  	}  	return rc;  } @@ -1597,7 +1598,7 @@ static __net_init int inet_init_net(struct net *net)  	 */  	seqlock_init(&net->ipv4.ip_local_ports.lock);  	net->ipv4.ip_local_ports.range[0] =  32768; -	net->ipv4.ip_local_ports.range[1] =  61000; +	net->ipv4.ip_local_ports.range[1] =  60999;  	seqlock_init(&net->ipv4.ping_group_range.lock);  	/*  |