diff options
author | Edward Tomasz Napierala <trasz@FreeBSD.org> | 2020-01-28 13:51:53 +0000 |
---|---|---|
committer | Edward Tomasz Napierala <trasz@FreeBSD.org> | 2020-01-28 13:51:53 +0000 |
commit | da6d8ae6d83ac199098ec97aa88f57a36c4acd6b (patch) | |
tree | b3175fa1c55ed607f916f969f0cc9824c14771e1 | |
parent | 882f88ff77194ef2eea005232780468404438788 (diff) |
Notes
-rw-r--r-- | sys/compat/linux/linux_mib.c | 4 | ||||
-rw-r--r-- | sys/compat/linux/linux_mib.h | 1 | ||||
-rw-r--r-- | sys/compat/linux/linux_socket.c | 9 | ||||
-rw-r--r-- | sys/compat/linux/linux_socket.h | 1 |
4 files changed, 15 insertions, 0 deletions
diff --git a/sys/compat/linux/linux_mib.c b/sys/compat/linux/linux_mib.c index a7e2273f12ff9..a71bd681a6ce4 100644 --- a/sys/compat/linux/linux_mib.c +++ b/sys/compat/linux/linux_mib.c @@ -62,6 +62,10 @@ static unsigned linux_osd_jail_slot; SYSCTL_NODE(_compat, OID_AUTO, linux, CTLFLAG_RW, 0, "Linux mode"); +int linux_ignore_ip_recverr = 1; +SYSCTL_INT(_compat_linux, OID_AUTO, ignore_ip_recverr, CTLFLAG_RWTUN, + &linux_ignore_ip_recverr, 0, "Ignore enabling IP_RECVERR"); + int linux_preserve_vstatus = 0; SYSCTL_INT(_compat_linux, OID_AUTO, preserve_vstatus, CTLFLAG_RWTUN, &linux_preserve_vstatus, 0, "Preserve VSTATUS termios(4) flag"); diff --git a/sys/compat/linux/linux_mib.h b/sys/compat/linux/linux_mib.h index aea4b1a71c50d..5c79749f29711 100644 --- a/sys/compat/linux/linux_mib.h +++ b/sys/compat/linux/linux_mib.h @@ -62,6 +62,7 @@ int linux_kernver(struct thread *td); #define linux_use26(t) (linux_kernver(t) >= LINUX_KERNVER_2006000) +extern int linux_ignore_ip_recverr; extern int linux_preserve_vstatus; #endif /* _LINUX_MIB_H_ */ diff --git a/sys/compat/linux/linux_socket.c b/sys/compat/linux/linux_socket.c index c7b435dfea6a8..5f39676e2d7e2 100644 --- a/sys/compat/linux/linux_socket.c +++ b/sys/compat/linux/linux_socket.c @@ -72,6 +72,7 @@ __FBSDID("$FreeBSD$"); #endif #include <compat/linux/linux_common.h> #include <compat/linux/linux_file.h> +#include <compat/linux/linux_mib.h> #include <compat/linux/linux_socket.h> #include <compat/linux/linux_timer.h> #include <compat/linux/linux_util.h> @@ -1424,6 +1425,14 @@ linux_setsockopt(struct thread *td, struct linux_setsockopt_args *args) } break; case IPPROTO_IP: + if (args->optname == LINUX_IP_RECVERR && + linux_ignore_ip_recverr) { + /* + * XXX: This is a hack to unbreak DNS resolution + * with glibc 2.30 and above. + */ + return (0); + } name = linux_to_bsd_ip_sockopt(args->optname); break; case IPPROTO_IPV6: diff --git a/sys/compat/linux/linux_socket.h b/sys/compat/linux/linux_socket.h index bcd5a4bb2d2a5..ba49c4107c97d 100644 --- a/sys/compat/linux/linux_socket.h +++ b/sys/compat/linux/linux_socket.h @@ -202,6 +202,7 @@ int linux_accept(struct thread *td, struct linux_accept_args *args); #define LINUX_IP_TTL 2 #define LINUX_IP_HDRINCL 3 #define LINUX_IP_OPTIONS 4 +#define LINUX_IP_RECVERR 11 #define LINUX_IP_MULTICAST_IF 32 #define LINUX_IP_MULTICAST_TTL 33 |