Merge pull request #47308 from dtzWill/update/musl-upstream-fixes

musl: pick upstream fixes and improvements
This commit is contained in:
Will Dietz 2018-09-25 00:38:23 -05:00 committed by GitHub
commit f02c8e29d7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 195 additions and 3 deletions

View file

@ -64,9 +64,16 @@ stdenv.mkDerivation rec {
# Use execveat to impl fexecve when avail (useful for containers)
./fexecve-execveat.patch
# improve behavior in few cases
./0001-in-pthread_mutex_trylock-EBUSY-out-more-directly-whe.patch
./0002-in-pthread_mutex_timedlock-avoid-repeatedly-reading-.patch
./0003-fix-namespace-violation-for-c11-mutex-functions.patch
./0001-in-pthread_mutex_trylock-EBUSY-out-more-directly-whe.patch
./0002-in-pthread_mutex_timedlock-avoid-repeatedly-reading-.patch
./0003-fix-namespace-violation-for-c11-mutex-functions.patch
# Fix getaddrinfo usage encountered sometimes in containers
./fix-getaddrinfo-regression-with-AI_ADDRCONFIG.patch
# name_to_handle_at
./name-to-handle-at.patch
./max-handle-sz-for-name-to-handle-at.patch
# stacksize bump (upstream)
./stacksize-bump.patch
];
preConfigure = ''
configureFlagsArray+=("--syslibdir=$out/lib")

View file

@ -0,0 +1,52 @@
From f381c118b2d4f7d914481d3cdc830ce41369b002 Mon Sep 17 00:00:00 2001
From: Rich Felker <dalias@aerifal.cx>
Date: Wed, 19 Sep 2018 18:03:22 -0400
Subject: [PATCH] fix getaddrinfo regression with AI_ADDRCONFIG on some
configurations
despite not being documented to do so in the standard or Linux
documentation, attempts to udp connect to 127.0.0.1 or ::1 generate
EADDRNOTAVAIL when the loopback device is not configured and there is
no default route for IPv6. this caused getaddrinfo with AI_ADDRCONFIG
to fail with EAI_SYSTEM and EADDRNOTAVAIL on some no-IPv6
configurations, rather than the intended behavior of detecting IPv6 as
unsuppported and producing IPv4-only results.
previously, only EAFNOSUPPORT was treated as unavailability of the
address family being probed. instead, treat all errors related to
inability to get an address or route as conclusive that the family
being probed is unsupported, and only fail with EAI_SYSTEM on other
errors.
further improvements may be desirable, such as reporting EAI_AGAIN
instead of EAI_SYSTEM for errors which are expected to be transient,
but this patch should suffice to fix the serious regression.
---
src/network/getaddrinfo.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/src/network/getaddrinfo.c b/src/network/getaddrinfo.c
index ba26847a..e33bfa28 100644
--- a/src/network/getaddrinfo.c
+++ b/src/network/getaddrinfo.c
@@ -76,7 +76,16 @@ int getaddrinfo(const char *restrict host, const char *restrict serv, const stru
close(s);
if (!r) continue;
}
- if (errno != EAFNOSUPPORT) return EAI_SYSTEM;
+ switch (errno) {
+ case EADDRNOTAVAIL:
+ case EAFNOSUPPORT:
+ case EHOSTUNREACH:
+ case ENETDOWN:
+ case ENETUNREACH:
+ break;
+ default:
+ return EAI_SYSTEM;
+ }
if (family == tf[i]) return EAI_NONAME;
family = tf[1-i];
}
--
2.19.0

View file

@ -0,0 +1,26 @@
From 7d7f44253f2d8cfd0a7adf9f918d88aa24d4e012 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Thu, 13 Sep 2018 07:00:05 -0700
Subject: [PATCH] define MAX_HANDLE_SZ for use with name_to_handle_at
MAX_HANDLE_SZ is described in name_to_handle_at() to contain maximum
expected size for a file handle
---
include/fcntl.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/include/fcntl.h b/include/fcntl.h
index 99b21759..4d91338b 100644
--- a/include/fcntl.h
+++ b/include/fcntl.h
@@ -166,6 +166,7 @@ struct f_owner_ex {
};
#define FALLOC_FL_KEEP_SIZE 1
#define FALLOC_FL_PUNCH_HOLE 2
+#define MAX_HANDLE_SZ 128
#define SYNC_FILE_RANGE_WAIT_BEFORE 1
#define SYNC_FILE_RANGE_WRITE 2
#define SYNC_FILE_RANGE_WAIT_AFTER 4
--
2.19.0

View file

@ -0,0 +1,71 @@
From 3e14bbcd1979376b188bfabb816ff828608fb5d7 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Wed, 12 Sep 2018 18:02:11 -0700
Subject: [PATCH] wireup linux/name_to_handle_at and name_to_handle_at syscalls
---
include/fcntl.h | 7 +++++++
src/linux/name_to_handle_at.c | 10 ++++++++++
src/linux/open_by_handle_at.c | 8 ++++++++
3 files changed, 25 insertions(+)
create mode 100644 src/linux/name_to_handle_at.c
create mode 100644 src/linux/open_by_handle_at.c
diff --git a/include/fcntl.h b/include/fcntl.h
index 6d8edcd1..99b21759 100644
--- a/include/fcntl.h
+++ b/include/fcntl.h
@@ -155,6 +155,11 @@ int lockf(int, int, off_t);
#define F_OWNER_PID 1
#define F_OWNER_PGRP 2
#define F_OWNER_GID 2
+struct file_handle {
+ unsigned handle_bytes;
+ int handle_type;
+ unsigned char f_handle[];
+};
struct f_owner_ex {
int type;
pid_t pid;
@@ -170,6 +175,8 @@ struct f_owner_ex {
#define SPLICE_F_GIFT 8
int fallocate(int, int, off_t, off_t);
#define fallocate64 fallocate
+int name_to_handle_at(int, const char *, struct file_handle *, int *, int);
+int open_by_handle_at(int, struct file_handle *, int);
ssize_t readahead(int, off_t, size_t);
int sync_file_range(int, off_t, off_t, unsigned);
ssize_t vmsplice(int, const struct iovec *, size_t, unsigned);
diff --git a/src/linux/name_to_handle_at.c b/src/linux/name_to_handle_at.c
new file mode 100644
index 00000000..cd4075bd
--- /dev/null
+++ b/src/linux/name_to_handle_at.c
@@ -0,0 +1,10 @@
+#define _GNU_SOURCE
+#include <fcntl.h>
+#include "syscall.h"
+
+int name_to_handle_at(int dirfd, const char *pathname,
+ struct file_handle *handle, int *mount_id, int flags)
+{
+ return syscall(SYS_name_to_handle_at, dirfd,
+ pathname, handle, mount_id, flags);
+}
diff --git a/src/linux/open_by_handle_at.c b/src/linux/open_by_handle_at.c
new file mode 100644
index 00000000..1c9b6a2b
--- /dev/null
+++ b/src/linux/open_by_handle_at.c
@@ -0,0 +1,8 @@
+#define _GNU_SOURCE
+#include <fcntl.h>
+#include "syscall.h"
+
+int open_by_handle_at(int mount_fd, struct file_handle *handle, int flags)
+{
+ return syscall(SYS_open_by_handle_at, mount_fd, handle, flags);
+}
--
2.19.0

View file

@ -0,0 +1,36 @@
From c0058ab465e950c2c3302d2b62e21cc0b494224b Mon Sep 17 00:00:00 2001
From: Rich Felker <dalias@aerifal.cx>
Date: Tue, 18 Sep 2018 23:11:49 -0400
Subject: [PATCH 3/4] increase default thread stack/guard size
stack size default is increased from 80k to 128k. this coincides with
Linux's hard-coded default stack for the main thread (128k is
initially committed; growth beyond that up to ulimit is contingent on
additional allocation succeeding) and GNU ld's default PT_GNU_STACK
size for FDPIC, at least on sh.
guard size default is increased from 4k to 8k to reduce the risk of
guard page jumping on overflow, since use of just over 4k of stack is
common (PATH_MAX buffers, etc.).
---
src/internal/pthread_impl.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/internal/pthread_impl.h b/src/internal/pthread_impl.h
index e73a251f..d491f975 100644
--- a/src/internal/pthread_impl.h
+++ b/src/internal/pthread_impl.h
@@ -185,8 +185,8 @@ hidden void __inhibit_ptc(void);
extern hidden unsigned __default_stacksize;
extern hidden unsigned __default_guardsize;
-#define DEFAULT_STACK_SIZE 81920
-#define DEFAULT_GUARD_SIZE 4096
+#define DEFAULT_STACK_SIZE 131072
+#define DEFAULT_GUARD_SIZE 8192
#define DEFAULT_STACK_MAX (8<<20)
#define DEFAULT_GUARD_MAX (1<<20)
--
2.19.0