mirror of
https://github.com/gentoo-mirror/guru.git
synced 2026-07-19 20:13:01 -04:00
sys-kernel/uek-sources: unbreakable enterprise kernel from oracle
Package-Manager: Portage-3.0.28, Repoman-3.0.3 Signed-off-by: Aisha Tammy <gentoo@aisha.cc>
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
From 9b115749acb24d11083ded4fe947ddd654a940e3 Mon Sep 17 00:00:00 2001
|
||||
From: Christoph Hellwig <hch@lst.de>
|
||||
Date: Thu, 28 May 2020 07:12:31 +0200
|
||||
Subject: [PATCH] ipv6: add ip6_sock_set_v6only
|
||||
|
||||
Add a helper to directly set the IPV6_V6ONLY sockopt from kernel space
|
||||
without going through a fake uaccess.
|
||||
|
||||
Signed-off-by: Christoph Hellwig <hch@lst.de>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
include/net/ipv6.h | 11 +++++++++++
|
||||
net/ipv6/ip6_udp_tunnel.c | 5 +----
|
||||
net/sunrpc/svcsock.c | 6 +-----
|
||||
3 files changed, 13 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/include/net/ipv6.h b/include/net/ipv6.h
|
||||
index 39a00d3ef5e220..9b91188c9a74c7 100644
|
||||
--- a/include/net/ipv6.h
|
||||
+++ b/include/net/ipv6.h
|
||||
@@ -1177,4 +1177,15 @@ int ipv6_sock_mc_join_ssm(struct sock *sk, int ifindex,
|
||||
const struct in6_addr *addr, unsigned int mode);
|
||||
int ipv6_sock_mc_drop(struct sock *sk, int ifindex,
|
||||
const struct in6_addr *addr);
|
||||
+
|
||||
+static inline int ip6_sock_set_v6only(struct sock *sk)
|
||||
+{
|
||||
+ if (inet_sk(sk)->inet_num)
|
||||
+ return -EINVAL;
|
||||
+ lock_sock(sk);
|
||||
+ sk->sk_ipv6only = true;
|
||||
+ release_sock(sk);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
#endif /* _NET_IPV6_H */
|
||||
diff --git a/net/ipv6/ip6_udp_tunnel.c b/net/ipv6/ip6_udp_tunnel.c
|
||||
index 6523609516d25a..2e0ad1bc84a835 100644
|
||||
--- a/net/ipv6/ip6_udp_tunnel.c
|
||||
+++ b/net/ipv6/ip6_udp_tunnel.c
|
||||
@@ -25,10 +25,7 @@ int udp_sock_create6(struct net *net, struct udp_port_cfg *cfg,
|
||||
goto error;
|
||||
|
||||
if (cfg->ipv6_v6only) {
|
||||
- int val = 1;
|
||||
-
|
||||
- err = kernel_setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY,
|
||||
- (char *) &val, sizeof(val));
|
||||
+ err = ip6_sock_set_v6only(sock->sk);
|
||||
if (err < 0)
|
||||
goto error;
|
||||
}
|
||||
diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c
|
||||
index 7a805d165689c3..a391892977cd27 100644
|
||||
--- a/net/sunrpc/svcsock.c
|
||||
+++ b/net/sunrpc/svcsock.c
|
||||
@@ -1328,7 +1328,6 @@ static struct svc_xprt *svc_create_socket(struct svc_serv *serv,
|
||||
struct sockaddr *newsin = (struct sockaddr *)&addr;
|
||||
int newlen;
|
||||
int family;
|
||||
- int val;
|
||||
RPC_IFDEBUG(char buf[RPC_MAX_ADDRBUFLEN]);
|
||||
|
||||
dprintk("svc: svc_create_socket(%s, %d, %s)\n",
|
||||
@@ -1364,11 +1363,8 @@ static struct svc_xprt *svc_create_socket(struct svc_serv *serv,
|
||||
* getting requests from IPv4 remotes. Those should
|
||||
* be shunted to a PF_INET listener via rpcbind.
|
||||
*/
|
||||
- val = 1;
|
||||
if (family == PF_INET6)
|
||||
- kernel_setsockopt(sock, SOL_IPV6, IPV6_V6ONLY,
|
||||
- (char *)&val, sizeof(val));
|
||||
-
|
||||
+ ip6_sock_set_v6only(sock->sk);
|
||||
if (type == SOCK_STREAM)
|
||||
sock->sk->sk_reuse = SK_CAN_REUSE; /* allow address reuse */
|
||||
error = kernel_bind(sock, sin, len);
|
||||
Reference in New Issue
Block a user