mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-24 19:45:06 +08:00
0643ee4fd1
A user may call listen with binding an explicit port with the intent that the kernel will assign an available port to the socket. In this case inet_csk_get_port does a port scan. For such sockets, the user may also set soreuseport with the intent a creating more sockets for the port that is selected. The problem is that the initial socket being opened could inadvertently choose an existing and unreleated port number that was already created with soreuseport. This patch adds a boolean parameter to inet_bind_conflict that indicates rather soreuseport is allowed for the check (in addition to sk->sk_reuseport). In calls to inet_bind_conflict from inet_csk_get_port the argument is set to true if an explicit port is being looked up (snum argument is nonzero), and is false if port scan is done. Signed-off-by: Tom Herbert <tom@herbertland.com> Signed-off-by: David S. Miller <davem@davemloft.net>
37 lines
1.1 KiB
C
37 lines
1.1 KiB
C
/*
|
|
* NET Generic infrastructure for INET6 connection oriented protocols.
|
|
*
|
|
* Authors: Many people, see the TCPv6 sources
|
|
*
|
|
* From code originally in TCPv6
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version
|
|
* 2 of the License, or (at your option) any later version.
|
|
*/
|
|
#ifndef _INET6_CONNECTION_SOCK_H
|
|
#define _INET6_CONNECTION_SOCK_H
|
|
|
|
#include <linux/types.h>
|
|
|
|
struct inet_bind_bucket;
|
|
struct request_sock;
|
|
struct sk_buff;
|
|
struct sock;
|
|
struct sockaddr;
|
|
|
|
int inet6_csk_bind_conflict(const struct sock *sk,
|
|
const struct inet_bind_bucket *tb, bool relax,
|
|
bool soreuseport_ok);
|
|
|
|
struct dst_entry *inet6_csk_route_req(const struct sock *sk, struct flowi6 *fl6,
|
|
const struct request_sock *req, u8 proto);
|
|
|
|
void inet6_csk_addr2sockaddr(struct sock *sk, struct sockaddr *uaddr);
|
|
|
|
int inet6_csk_xmit(struct sock *sk, struct sk_buff *skb, struct flowi *fl);
|
|
|
|
struct dst_entry *inet6_csk_update_pmtu(struct sock *sk, u32 mtu);
|
|
#endif /* _INET6_CONNECTION_SOCK_H */
|