From: Szabolcs Nagy <nsz@port70.net>
To: musl@lists.openwall.com
Subject: [PATCH 00/16] Linux v4.16 and v4.17 updates
Date: Fri, 15 Jun 2018 01:03:38 +0200 [thread overview]
Message-ID: <20180614230337.GR4418@port70.net> (raw)
[-- Attachment #1: Type: text/plain, Size: 2512 bytes --]
respin of the v4.16 patches
http://www.openwall.com/lists/musl/2018/04/28/1
without the siginfo changes and with v4.17 additions.
the last patch is adding missing memory mapping related
syscall wrappers, the pkey* support is incomplete.
Szabolcs Nagy (16):
sys/epoll.h: add EPOLLNVAL from linux v4.16
netinet/if_ether.h: add ETH_P_ERSPAN2 from linux v4.16
netinet/if_ether.h: add ETH_TLEN from linux v4.16
sys/ptrace.h: add PTRACE_SECCOMP_GET_METADATA from linux v4.16
aarch64: add HWCAP_ASIMDFHM from linux v4.16
powerpc: add pkey syscall numbers from linux v4.16
add MAP_FIXED_NOREPLACE from linux v4.17
add {MSG,SEM,SHM}_STAT_ANY from linux v4.17
add TCP_NLA_* from linux v4.17
add ETH_P_PREAUTH ethertype from linux v4.17
add speculation control prctls from linux v4.17
aarch64: add HWCAP_ flags from linux v4.17
mips: add HWCAP_ flags from linux v4.17
s390x: add kexec_file_load syscall number from linux v4.17
add si_codes from linux v4.17
Add memfd_create, mlock2 and pkey_* apis
arch/aarch64/bits/hwcap.h | 5 +++++
arch/mips/bits/hwcap.h | 1 +
arch/mips64/bits/hwcap.h | 1 +
arch/mipsn32/bits/hwcap.h | 1 +
arch/powerpc/bits/mman.h | 4 ++++
arch/powerpc/bits/syscall.h.in | 3 +++
arch/powerpc64/bits/mman.h | 4 ++++
arch/powerpc64/bits/syscall.h.in | 3 +++
arch/s390x/bits/syscall.h.in | 1 +
include/netinet/if_ether.h | 3 +++
include/netinet/tcp.h | 10 ++++++++++
include/signal.h | 13 +++++++++++++
include/sys/epoll.h | 1 +
include/sys/mman.h | 25 ++++++++++++++++++++++---
include/sys/msg.h | 1 +
include/sys/prctl.h | 9 +++++++++
include/sys/ptrace.h | 8 +++++++-
include/sys/sem.h | 1 +
include/sys/shm.h | 1 +
src/linux/memfd_create.c | 8 ++++++++
src/linux/mlock2.c | 11 +++++++++++
src/linux/pkey_alloc.c | 22 ++++++++++++++++++++++
src/linux/pkey_get.c | 9 +++++++++
src/linux/pkey_mprotect.c | 15 +++++++++++++++
src/linux/pkey_set.c | 9 +++++++++
25 files changed, 165 insertions(+), 4 deletions(-)
create mode 100644 src/linux/memfd_create.c
create mode 100644 src/linux/mlock2.c
create mode 100644 src/linux/pkey_alloc.c
create mode 100644 src/linux/pkey_get.c
create mode 100644 src/linux/pkey_mprotect.c
create mode 100644 src/linux/pkey_set.c
--
2.16.3
[-- Attachment #2: 0001-sys-epoll.h-add-EPOLLNVAL-from-linux-v4.16.patch --]
[-- Type: text/x-diff, Size: 835 bytes --]
From c84b49a06766f54479ab3cdb1f722d1a33802ae4 Mon Sep 17 00:00:00 2001
From: Szabolcs Nagy <nsz@port70.net>
Date: Sat, 28 Apr 2018 15:52:06 +0000
Subject: [PATCH 01/16] sys/epoll.h: add EPOLLNVAL from linux v4.16
added to uapi in commit 65aaf87b3aa2d049c6b9fd85221858a895df3393
used since commit a9a08845e9acbd224e4ee466f5c1275ed50054e8,
which renamed POLL* to EPOLL* in the kernel.
---
include/sys/epoll.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/include/sys/epoll.h b/include/sys/epoll.h
index ffe2311f..ac81a841 100644
--- a/include/sys/epoll.h
+++ b/include/sys/epoll.h
@@ -21,6 +21,7 @@ enum EPOLL_EVENTS { __EPOLL_DUMMY };
#define EPOLLPRI 0x002
#define EPOLLOUT 0x004
#define EPOLLRDNORM 0x040
+#define EPOLLNVAL 0x020
#define EPOLLRDBAND 0x080
#define EPOLLWRNORM 0x100
#define EPOLLWRBAND 0x200
--
2.16.3
[-- Attachment #3: 0002-netinet-if_ether.h-add-ETH_P_ERSPAN2-from-linux-v4.1.patch --]
[-- Type: text/x-diff, Size: 781 bytes --]
From 6126049d9b5fe953cc2257bdcfbaa98bf07c1eab Mon Sep 17 00:00:00 2001
From: Szabolcs Nagy <nsz@port70.net>
Date: Sat, 28 Apr 2018 16:10:53 +0000
Subject: [PATCH 02/16] netinet/if_ether.h: add ETH_P_ERSPAN2 from linux v4.16
protocol number for erspan v2 support
added in linux commit f551c91de262ba36b20c3ac19538afb4f4507441
---
include/netinet/if_ether.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/include/netinet/if_ether.h b/include/netinet/if_ether.h
index 9007d609..33f08a31 100644
--- a/include/netinet/if_ether.h
+++ b/include/netinet/if_ether.h
@@ -17,6 +17,7 @@
#define ETH_P_PUP 0x0200
#define ETH_P_PUPAT 0x0201
#define ETH_P_TSN 0x22F0
+#define ETH_P_ERSPAN2 0x22EB
#define ETH_P_IP 0x0800
#define ETH_P_X25 0x0805
#define ETH_P_ARP 0x0806
--
2.16.3
[-- Attachment #4: 0003-netinet-if_ether.h-add-ETH_TLEN-from-linux-v4.16.patch --]
[-- Type: text/x-diff, Size: 714 bytes --]
From 6ac05ef841566b216140565d44d00fbdb30f7bb1 Mon Sep 17 00:00:00 2001
From: Szabolcs Nagy <nsz@port70.net>
Date: Sat, 28 Apr 2018 16:16:12 +0000
Subject: [PATCH 03/16] netinet/if_ether.h: add ETH_TLEN from linux v4.16
octets in ethernet type field
added in linux commit 4bbb3e0e8239f9079bf1fe20b3c0cb598714ae61
---
include/netinet/if_ether.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/include/netinet/if_ether.h b/include/netinet/if_ether.h
index 33f08a31..f7df5f7f 100644
--- a/include/netinet/if_ether.h
+++ b/include/netinet/if_ether.h
@@ -5,6 +5,7 @@
#include <sys/types.h>
#define ETH_ALEN 6
+#define ETH_TLEN 2
#define ETH_HLEN 14
#define ETH_ZLEN 60
#define ETH_DATA_LEN 1500
--
2.16.3
[-- Attachment #5: 0004-sys-ptrace.h-add-PTRACE_SECCOMP_GET_METADATA-from-li.patch --]
[-- Type: text/x-diff, Size: 1260 bytes --]
From 9ef3ded8d43cc60b3c79ac3c6667145ac54c0e8e Mon Sep 17 00:00:00 2001
From: Szabolcs Nagy <nsz@port70.net>
Date: Sat, 28 Apr 2018 16:23:23 +0000
Subject: [PATCH 04/16] sys/ptrace.h: add PTRACE_SECCOMP_GET_METADATA from
linux v4.16
to get seccomp state for checkpoint restore.
added in linux commit 26500475ac1b499d8636ff281311d633909f5d20
struct tag follows the glibc api and ptrace_peeksiginfo_args
got changed too accordingly.
---
include/sys/ptrace.h | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/include/sys/ptrace.h b/include/sys/ptrace.h
index d9d45408..f501ff08 100644
--- a/include/sys/ptrace.h
+++ b/include/sys/ptrace.h
@@ -40,6 +40,7 @@ extern "C" {
#define PTRACE_GETSIGMASK 0x420a
#define PTRACE_SETSIGMASK 0x420b
#define PTRACE_SECCOMP_GET_FILTER 0x420c
+#define PTRACE_SECCOMP_GET_METADATA 0x420d
#define PT_READ_I PTRACE_PEEKTEXT
#define PT_READ_D PTRACE_PEEKDATA
@@ -86,12 +87,17 @@ extern "C" {
#define PTRACE_PEEKSIGINFO_SHARED 1
-struct ptrace_peeksiginfo_args {
+struct __ptrace_peeksiginfo_args {
uint64_t off;
uint32_t flags;
int32_t nr;
};
+struct __ptrace_seccomp_metadata {
+ uint64_t filter_off;
+ uint64_t flags;
+};
+
long ptrace(int, ...);
#ifdef __cplusplus
--
2.16.3
[-- Attachment #6: 0005-aarch64-add-HWCAP_ASIMDFHM-from-linux-v4.16.patch --]
[-- Type: text/x-diff, Size: 696 bytes --]
From 9c6af71cdecdd6613f94d64bc13136555c6e9ba2 Mon Sep 17 00:00:00 2001
From: Szabolcs Nagy <nsz@port70.net>
Date: Sat, 28 Apr 2018 16:29:55 +0000
Subject: [PATCH 05/16] aarch64: add HWCAP_ASIMDFHM from linux v4.16
armv8.4 fp mul instructions.
added in commit 3b3b681097fae73b7f5dcdd42db6cfdf32943d4c
---
arch/aarch64/bits/hwcap.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/arch/aarch64/bits/hwcap.h b/arch/aarch64/bits/hwcap.h
index 1727a387..6fa64e8c 100644
--- a/arch/aarch64/bits/hwcap.h
+++ b/arch/aarch64/bits/hwcap.h
@@ -21,3 +21,4 @@
#define HWCAP_ASIMDDP (1 << 20)
#define HWCAP_SHA512 (1 << 21)
#define HWCAP_SVE (1 << 22)
+#define HWCAP_ASIMDFHM (1 << 23)
--
2.16.3
[-- Attachment #7: 0006-powerpc-add-pkey-syscall-numbers-from-linux-v4.16.patch --]
[-- Type: text/x-diff, Size: 1425 bytes --]
From f34d84b5ca2f01047c1569c9c9187f66f139c11a Mon Sep 17 00:00:00 2001
From: Szabolcs Nagy <nsz@port70.net>
Date: Sat, 28 Apr 2018 16:36:40 +0000
Subject: [PATCH 06/16] powerpc: add pkey syscall numbers from linux v4.16
add pkey_mprotect, pkey_alloc, pkey_free syscall numbers,
new in linux commits 3350eb2ea127978319ced883523d828046af4045
and 9499ec1b5e82321829e1c1510bcc37edc20b6f38
---
arch/powerpc/bits/syscall.h.in | 3 +++
arch/powerpc64/bits/syscall.h.in | 3 +++
2 files changed, 6 insertions(+)
diff --git a/arch/powerpc/bits/syscall.h.in b/arch/powerpc/bits/syscall.h.in
index 20833915..7ce94bbd 100644
--- a/arch/powerpc/bits/syscall.h.in
+++ b/arch/powerpc/bits/syscall.h.in
@@ -368,4 +368,7 @@
#define __NR_pwritev2 381
#define __NR_kexec_file_load 382
#define __NR_statx 383
+#define __NR_pkey_alloc 384
+#define __NR_pkey_free 385
+#define __NR_pkey_mprotect 386
diff --git a/arch/powerpc64/bits/syscall.h.in b/arch/powerpc64/bits/syscall.h.in
index 936f43c0..1da1ecc0 100644
--- a/arch/powerpc64/bits/syscall.h.in
+++ b/arch/powerpc64/bits/syscall.h.in
@@ -359,4 +359,7 @@
#define __NR_pwritev2 381
#define __NR_kexec_file_load 382
#define __NR_statx 383
+#define __NR_pkey_alloc 384
+#define __NR_pkey_free 385
+#define __NR_pkey_mprotect 386
--
2.16.3
[-- Attachment #8: 0007-add-MAP_FIXED_NOREPLACE-from-linux-v4.17.patch --]
[-- Type: text/x-diff, Size: 850 bytes --]
From 62d05aadd830e0064570501be2478052d3b3c4d9 Mon Sep 17 00:00:00 2001
From: Szabolcs Nagy <nsz@port70.net>
Date: Sat, 9 Jun 2018 20:39:35 +0000
Subject: [PATCH 07/16] add MAP_FIXED_NOREPLACE from linux v4.17
to map at a fixed address without unmapping underlying mappings
(fails with EEXIST unlike MAP_FIXED), new in linux commits
4ed28639519c7bad5f518e70b3284c6e0763e650 and
a4ff8e8620d3f4f50ac4b41e8067b7d395056843.
---
include/sys/mman.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/include/sys/mman.h b/include/sys/mman.h
index 302ad134..19dd844e 100644
--- a/include/sys/mman.h
+++ b/include/sys/mman.h
@@ -35,6 +35,7 @@ extern "C" {
#define MAP_STACK 0x20000
#define MAP_HUGETLB 0x40000
#define MAP_SYNC 0x80000
+#define MAP_FIXED_NOREPLACE 0x100000
#define MAP_FILE 0
#define MAP_HUGE_SHIFT 26
--
2.16.3
[-- Attachment #9: 0008-add-MSG-SEM-SHM-_STAT_ANY-from-linux-v4.17.patch --]
[-- Type: text/x-diff, Size: 1521 bytes --]
From 38dfca580d7544a98e7e4985a4846f45a17f5331 Mon Sep 17 00:00:00 2001
From: Szabolcs Nagy <nsz@port70.net>
Date: Sat, 9 Jun 2018 21:06:58 +0000
Subject: [PATCH 08/16] add {MSG,SEM,SHM}_STAT_ANY from linux v4.17
introduced to stat ipc objects without permission checks since the
info is available in /proc/sysvipc anyway, new in linux commits
23c8cec8cf679b10997a512abb1e86f0cedc42ba
a280d6dc77eb6002f269d58cd47c7c7e69b617b6
c21a6970ae727839a2f300cd8dd957de0d0238c3
---
include/sys/msg.h | 1 +
include/sys/sem.h | 1 +
include/sys/shm.h | 1 +
3 files changed, 3 insertions(+)
diff --git a/include/sys/msg.h b/include/sys/msg.h
index 139f22b7..be6afc34 100644
--- a/include/sys/msg.h
+++ b/include/sys/msg.h
@@ -27,6 +27,7 @@ typedef unsigned long msglen_t;
#define MSG_STAT 11
#define MSG_INFO 12
+#define MSG_STAT_ANY 13
struct msginfo {
int msgpool, msgmap, msgmax, msgmnb, msgmni, msgssz, msgtql;
diff --git a/include/sys/sem.h b/include/sys/sem.h
index e7c36980..61cdb83d 100644
--- a/include/sys/sem.h
+++ b/include/sys/sem.h
@@ -33,6 +33,7 @@ extern "C" {
#define SEM_STAT 18
#define SEM_INFO 19
+#define SEM_STAT_ANY 20
struct seminfo {
int semmap;
diff --git a/include/sys/shm.h b/include/sys/shm.h
index e7d39ff6..662fde59 100644
--- a/include/sys/shm.h
+++ b/include/sys/shm.h
@@ -35,6 +35,7 @@ extern "C" {
#define SHM_UNLOCK 12
#define SHM_STAT 13
#define SHM_INFO 14
+#define SHM_STAT_ANY 15
#define SHM_DEST 01000
#define SHM_LOCKED 02000
#define SHM_HUGETLB 04000
--
2.16.3
[-- Attachment #10: 0009-add-TCP_NLA_-from-linux-v4.17.patch --]
[-- Type: text/x-diff, Size: 1054 bytes --]
From e6fab15c01c9ef47cefd7b79a68433748fcde90b Mon Sep 17 00:00:00 2001
From: Szabolcs Nagy <nsz@port70.net>
Date: Sat, 9 Jun 2018 21:15:13 +0000
Subject: [PATCH 09/16] add TCP_NLA_* from linux v4.17
new and missing netlink attributes types for SCM_TIMESTAMPING_OPT_STATS,
new ones were added in commits
7156d194a0772f733865267e7207e0b08f81b02b
be631892948060f44b1ceee3132be1266932071e
87ecc95d81d951b0984f2eb9c5c118cb68d0dce8
---
include/netinet/tcp.h | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/include/netinet/tcp.h b/include/netinet/tcp.h
index 2747f4ea..1e2acfbf 100644
--- a/include/netinet/tcp.h
+++ b/include/netinet/tcp.h
@@ -56,6 +56,16 @@ enum {
TCP_NLA_SNDBUF_LIMITED,
TCP_NLA_DATA_SEGS_OUT,
TCP_NLA_TOTAL_RETRANS,
+ TCP_NLA_PACING_RATE,
+ TCP_NLA_DELIVERY_RATE,
+ TCP_NLA_SND_CWND,
+ TCP_NLA_REORDERING,
+ TCP_NLA_MIN_RTT,
+ TCP_NLA_RECUR_RETRANS,
+ TCP_NLA_DELIVERY_RATE_APP_LMT,
+ TCP_NLA_SNDQ_SIZE,
+ TCP_NLA_CA_STATE,
+ TCP_NLA_SND_SSTHRESH,
};
#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
--
2.16.3
[-- Attachment #11: 0010-add-ETH_P_PREAUTH-ethertype-from-linux-v4.17.patch --]
[-- Type: text/x-diff, Size: 748 bytes --]
From 6bd4c418aec4a11bcec814dec11f567e0fbbe134 Mon Sep 17 00:00:00 2001
From: Szabolcs Nagy <nsz@port70.net>
Date: Sat, 9 Jun 2018 21:20:45 +0000
Subject: [PATCH 10/16] add ETH_P_PREAUTH ethertype from linux v4.17
added in linux commit 4fe0de5b143762d327bfaf1d7be7c5b58041a18c
---
include/netinet/if_ether.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/include/netinet/if_ether.h b/include/netinet/if_ether.h
index f7df5f7f..ecd6c73c 100644
--- a/include/netinet/if_ether.h
+++ b/include/netinet/if_ether.h
@@ -56,6 +56,7 @@
#define ETH_P_8021AD 0x88A8
#define ETH_P_802_EX1 0x88B5
#define ETH_P_ERSPAN 0x88BE
+#define ETH_P_PREAUTH 0x88C7
#define ETH_P_TIPC 0x88CA
#define ETH_P_MACSEC 0x88E5
#define ETH_P_8021AH 0x88E7
--
2.16.3
[-- Attachment #12: 0011-add-speculation-control-prctls-from-linux-v4.17.patch --]
[-- Type: text/x-diff, Size: 1071 bytes --]
From e5096769c07b8a8128ff8f65685d87751308eb6b Mon Sep 17 00:00:00 2001
From: Szabolcs Nagy <nsz@port70.net>
Date: Sat, 9 Jun 2018 21:23:54 +0000
Subject: [PATCH 11/16] add speculation control prctls from linux v4.17
PR_{SET,GET}_SPECULATION_CTRL controls speculation related vulnerability
mitigations, new in commits
b617cfc858161140d69cc0b5cc211996b557a1c7
356e4bfff2c5489e016fdb925adbf12a1e3950ee
---
include/sys/prctl.h | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/include/sys/prctl.h b/include/sys/prctl.h
index aa0c7a88..af76408c 100644
--- a/include/sys/prctl.h
+++ b/include/sys/prctl.h
@@ -136,6 +136,15 @@ struct prctl_mm_map {
#define PR_SVE_VL_LEN_MASK 0xffff
#define PR_SVE_VL_INHERIT (1 << 17)
+#define PR_GET_SPECULATION_CTRL 52
+#define PR_SET_SPECULATION_CTRL 53
+#define PR_SPEC_STORE_BYPASS 0
+#define PR_SPEC_NOT_AFFECTED 0
+#define PR_SPEC_PRCTL (1UL << 0)
+#define PR_SPEC_ENABLE (1UL << 1)
+#define PR_SPEC_DISABLE (1UL << 2)
+#define PR_SPEC_FORCE_DISABLE (1UL << 3)
+
int prctl (int, ...);
#ifdef __cplusplus
--
2.16.3
[-- Attachment #13: 0012-aarch64-add-HWCAP_-flags-from-linux-v4.17.patch --]
[-- Type: text/x-diff, Size: 785 bytes --]
From f646e8a04e76b33c7edbd8ab87279b24c660039d Mon Sep 17 00:00:00 2001
From: Szabolcs Nagy <nsz@port70.net>
Date: Sat, 9 Jun 2018 22:51:08 +0000
Subject: [PATCH 12/16] aarch64: add HWCAP_ flags from linux v4.17
hwcaps for armv8.4, new in linux commit
7206dc93a58fb76421c4411eefa3c003337bcb2d
---
arch/aarch64/bits/hwcap.h | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/arch/aarch64/bits/hwcap.h b/arch/aarch64/bits/hwcap.h
index 6fa64e8c..8541e329 100644
--- a/arch/aarch64/bits/hwcap.h
+++ b/arch/aarch64/bits/hwcap.h
@@ -22,3 +22,7 @@
#define HWCAP_SHA512 (1 << 21)
#define HWCAP_SVE (1 << 22)
#define HWCAP_ASIMDFHM (1 << 23)
+#define HWCAP_DIT (1 << 24)
+#define HWCAP_USCAT (1 << 25)
+#define HWCAP_ILRCPC (1 << 26)
+#define HWCAP_FLAGM (1 << 27)
--
2.16.3
[-- Attachment #14: 0013-mips-add-HWCAP_-flags-from-linux-v4.17.patch --]
[-- Type: text/x-diff, Size: 1247 bytes --]
From dd576cc5bd1118f01efdac52f2b234cee780016f Mon Sep 17 00:00:00 2001
From: Szabolcs Nagy <nsz@port70.net>
Date: Sat, 9 Jun 2018 22:58:19 +0000
Subject: [PATCH 13/16] mips: add HWCAP_ flags from linux v4.17
new in linux commit 256211f2b0b251e532d1899b115e374feb16fa7a
---
arch/mips/bits/hwcap.h | 1 +
arch/mips64/bits/hwcap.h | 1 +
arch/mipsn32/bits/hwcap.h | 1 +
3 files changed, 3 insertions(+)
diff --git a/arch/mips/bits/hwcap.h b/arch/mips/bits/hwcap.h
index 05cffba4..13e86fe7 100644
--- a/arch/mips/bits/hwcap.h
+++ b/arch/mips/bits/hwcap.h
@@ -1,2 +1,3 @@
#define HWCAP_MIPS_R6 (1 << 0)
#define HWCAP_MIPS_MSA (1 << 1)
+#define HWCAP_MIPS_CRC32 (1 << 2)
diff --git a/arch/mips64/bits/hwcap.h b/arch/mips64/bits/hwcap.h
index 05cffba4..13e86fe7 100644
--- a/arch/mips64/bits/hwcap.h
+++ b/arch/mips64/bits/hwcap.h
@@ -1,2 +1,3 @@
#define HWCAP_MIPS_R6 (1 << 0)
#define HWCAP_MIPS_MSA (1 << 1)
+#define HWCAP_MIPS_CRC32 (1 << 2)
diff --git a/arch/mipsn32/bits/hwcap.h b/arch/mipsn32/bits/hwcap.h
index 05cffba4..13e86fe7 100644
--- a/arch/mipsn32/bits/hwcap.h
+++ b/arch/mipsn32/bits/hwcap.h
@@ -1,2 +1,3 @@
#define HWCAP_MIPS_R6 (1 << 0)
#define HWCAP_MIPS_MSA (1 << 1)
+#define HWCAP_MIPS_CRC32 (1 << 2)
--
2.16.3
[-- Attachment #15: 0014-s390x-add-kexec_file_load-syscall-number-from-linux-.patch --]
[-- Type: text/x-diff, Size: 752 bytes --]
From 3e0e6257fa4fff41f816d8c97a2039180316158d Mon Sep 17 00:00:00 2001
From: Szabolcs Nagy <nsz@port70.net>
Date: Sat, 9 Jun 2018 23:03:48 +0000
Subject: [PATCH 14/16] s390x: add kexec_file_load syscall number from linux
v4.17
new in linux commit 71406883fd35794d573b3085433c41d0a3bf6c21
---
arch/s390x/bits/syscall.h.in | 1 +
1 file changed, 1 insertion(+)
diff --git a/arch/s390x/bits/syscall.h.in b/arch/s390x/bits/syscall.h.in
index c965664c..409e9155 100644
--- a/arch/s390x/bits/syscall.h.in
+++ b/arch/s390x/bits/syscall.h.in
@@ -323,4 +323,5 @@
#define __NR_s390_guarded_storage 378
#define __NR_statx 379
#define __NR_s390_sthyi 380
+#define __NR_kexec_file_load 381
--
2.16.3
[-- Attachment #16: 0015-add-si_codes-from-linux-v4.17.patch --]
[-- Type: text/x-diff, Size: 1321 bytes --]
From 45493abeb3918e3722ef8d75bf231ef155a2b755 Mon Sep 17 00:00:00 2001
From: Szabolcs Nagy <nsz@port70.net>
Date: Sat, 9 Jun 2018 23:22:51 +0000
Subject: [PATCH 15/16] add si_codes from linux v4.17
target specific si_codes were made generic in linux commits
a402ab8cc7b0578c445f348c9010e62ab390bee8 (ia64) and
75abf64287cab73546382a4fa7fa2f4e3516efeb (parisc)
---
include/signal.h | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/include/signal.h b/include/signal.h
index a4f85cca..69395468 100644
--- a/include/signal.h
+++ b/include/signal.h
@@ -61,6 +61,13 @@ typedef struct sigaltstack stack_t;
#define FPE_FLTRES 6
#define FPE_FLTINV 7
#define FPE_FLTSUB 8
+#define __FPE_DECOVF 9
+#define __FPE_DECDIV 10
+#define __FPE_DECERR 11
+#define __FPE_INVASC 12
+#define __FPE_INVDEC 13
+#define FPE_FLTUNK 14
+#define FPE_CONDTRAP 15
#define ILL_ILLOPC 1
#define ILL_ILLOPN 2
@@ -70,11 +77,17 @@ typedef struct sigaltstack stack_t;
#define ILL_PRVREG 6
#define ILL_COPROC 7
#define ILL_BADSTK 8
+#define ILL_BADIADDR 9
+#define __ILL_BREAK 10
+#define __ILL_BNDMOD 11
#define SEGV_MAPERR 1
#define SEGV_ACCERR 2
#define SEGV_BNDERR 3
#define SEGV_PKUERR 4
+#define SEGV_ACCADI 5
+#define SEGV_ADIDERR 6
+#define SEGV_ADIPERR 7
#define BUS_ADRALN 1
#define BUS_ADRERR 2
--
2.16.3
[-- Attachment #17: 0016-Add-memfd_create-mlock2-and-pkey_-apis.patch --]
[-- Type: text/x-diff, Size: 5984 bytes --]
From 9e18e6e7854d17aa1639d6145584df27f4b4f856 Mon Sep 17 00:00:00 2001
From: Szabolcs Nagy <nsz@port70.net>
Date: Sat, 28 Apr 2018 17:25:41 +0000
Subject: [PATCH 16/16] Add memfd_create, mlock2 and pkey_* apis
This patch adds support for the following linux syscalls and related
interfaces following glibc:
memfd_create (linux v3.17)
mlock2 (linux v4.4)
pkey_alloc (linux v4.9)
pkey_free (linux v4.9)
pkey_mprotect (linux v4.9)
pkey_get (glibc 2.27)
pkey_set (glibc 2.27)
pkey_get / pkey_set are glibc apis, not syscalls, only an always
failing generic implementation is provided in this patch, for pkey_
apis to be useful these will need target specific implementations.
MLOCK_ONFAULT is moved under _GNU_SOURCE following glibc.
Similar to glibc, mlock2 and pkey_mprotect have fallbacks to mlock and
mprotect respectively in case of special arguments.
---
arch/powerpc/bits/mman.h | 4 ++++
arch/powerpc64/bits/mman.h | 4 ++++
include/sys/mman.h | 24 +++++++++++++++++++++---
src/linux/memfd_create.c | 8 ++++++++
src/linux/mlock2.c | 11 +++++++++++
src/linux/pkey_alloc.c | 22 ++++++++++++++++++++++
src/linux/pkey_get.c | 9 +++++++++
src/linux/pkey_mprotect.c | 15 +++++++++++++++
src/linux/pkey_set.c | 9 +++++++++
9 files changed, 103 insertions(+), 3 deletions(-)
create mode 100644 src/linux/memfd_create.c
create mode 100644 src/linux/mlock2.c
create mode 100644 src/linux/pkey_alloc.c
create mode 100644 src/linux/pkey_get.c
create mode 100644 src/linux/pkey_mprotect.c
create mode 100644 src/linux/pkey_set.c
diff --git a/arch/powerpc/bits/mman.h b/arch/powerpc/bits/mman.h
index b3a675a8..23e18eb1 100644
--- a/arch/powerpc/bits/mman.h
+++ b/arch/powerpc/bits/mman.h
@@ -12,3 +12,7 @@
#define MCL_FUTURE 0x4000
#undef MCL_ONFAULT
#define MCL_ONFAULT 0x8000
+
+#ifdef _GNU_SOURCE
+#define PKEY_DISABLE_EXECUTE 0x4
+#endif
diff --git a/arch/powerpc64/bits/mman.h b/arch/powerpc64/bits/mman.h
index b3a675a8..23e18eb1 100644
--- a/arch/powerpc64/bits/mman.h
+++ b/arch/powerpc64/bits/mman.h
@@ -12,3 +12,7 @@
#define MCL_FUTURE 0x4000
#undef MCL_ONFAULT
#define MCL_ONFAULT 0x8000
+
+#ifdef _GNU_SOURCE
+#define PKEY_DISABLE_EXECUTE 0x4
+#endif
diff --git a/include/sys/mman.h b/include/sys/mman.h
index 19dd844e..643f882d 100644
--- a/include/sys/mman.h
+++ b/include/sys/mman.h
@@ -94,6 +94,20 @@ extern "C" {
#define MADV_SOFT_OFFLINE 101
#endif
+#ifdef _GNU_SOURCE
+#define MREMAP_MAYMOVE 1
+#define MREMAP_FIXED 2
+
+#define PKEY_DISABLE_ACCESS 0x1
+#define PKEY_DISABLE_WRITE 0x2
+
+#define MLOCK_ONFAULT 0x01
+
+#define MFD_CLOEXEC 0x0001U
+#define MFD_ALLOW_SEALING 0x0002U
+#define MFD_HUGETLB 0x0004U
+#endif
+
#include <bits/mman.h>
void *mmap (void *, size_t, int, int, int, off_t);
@@ -110,14 +124,18 @@ int mlockall (int);
int munlockall (void);
#ifdef _GNU_SOURCE
-#define MREMAP_MAYMOVE 1
-#define MREMAP_FIXED 2
void *mremap (void *, size_t, size_t, int, ...);
int remap_file_pages (void *, size_t, int, size_t, int);
+int memfd_create (const char *, unsigned);
+int mlock2 (const void *, size_t, unsigned);
+int pkey_alloc (unsigned, unsigned);
+int pkey_free (int);
+int pkey_mprotect (void *, size_t, int, int);
+int pkey_get (int);
+int pkey_set (int, unsigned);
#endif
#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
-#define MLOCK_ONFAULT 0x01
int madvise (void *, size_t, int);
int mincore (void *, size_t, unsigned char *);
#endif
diff --git a/src/linux/memfd_create.c b/src/linux/memfd_create.c
new file mode 100644
index 00000000..1649fe55
--- /dev/null
+++ b/src/linux/memfd_create.c
@@ -0,0 +1,8 @@
+#define _GNU_SOURCE 1
+#include <sys/mman.h>
+#include "syscall.h"
+
+int memfd_create(const char *name, unsigned flags)
+{
+ return syscall(SYS_memfd_create, name, flags);
+}
diff --git a/src/linux/mlock2.c b/src/linux/mlock2.c
new file mode 100644
index 00000000..e1235c46
--- /dev/null
+++ b/src/linux/mlock2.c
@@ -0,0 +1,11 @@
+#define _GNU_SOURCE 1
+#include <sys/mman.h>
+#include <errno.h>
+#include "syscall.h"
+
+int mlock2(const void *addr, size_t len, unsigned flags)
+{
+ if (flags == 0)
+ return mlock(addr, len);
+ return syscall(SYS_mlock2, addr, len, flags);
+}
diff --git a/src/linux/pkey_alloc.c b/src/linux/pkey_alloc.c
new file mode 100644
index 00000000..8027cd12
--- /dev/null
+++ b/src/linux/pkey_alloc.c
@@ -0,0 +1,22 @@
+#define _GNU_SOURCE 1
+#include <sys/mman.h>
+#include <errno.h>
+#include "syscall.h"
+
+int pkey_alloc(unsigned flags, unsigned access)
+{
+#ifdef SYS_pkey_alloc
+ return syscall(SYS_pkey_alloc, flags, access);
+#else
+ return __syscall_ret(-ENOSYS);
+#endif
+}
+
+int pkey_free(int pkey)
+{
+#ifdef SYS_pkey_free
+ return syscall(SYS_pkey_free, pkey);
+#else
+ return __syscall_ret(-ENOSYS);
+#endif
+}
diff --git a/src/linux/pkey_get.c b/src/linux/pkey_get.c
new file mode 100644
index 00000000..d583fa9c
--- /dev/null
+++ b/src/linux/pkey_get.c
@@ -0,0 +1,9 @@
+#define _GNU_SOURCE 1
+#include <sys/mman.h>
+#include <errno.h>
+#include "syscall.h"
+
+int pkey_get(int pkey)
+{
+ return __syscall_ret(-ENOSYS);
+}
diff --git a/src/linux/pkey_mprotect.c b/src/linux/pkey_mprotect.c
new file mode 100644
index 00000000..0a1f97ad
--- /dev/null
+++ b/src/linux/pkey_mprotect.c
@@ -0,0 +1,15 @@
+#define _GNU_SOURCE 1
+#include <sys/mman.h>
+#include <errno.h>
+#include "syscall.h"
+
+int pkey_mprotect(void *addr, size_t len, int prot, int pkey)
+{
+ if (pkey == -1)
+ return mprotect(addr, len, prot);
+#ifdef SYS_pkey_mprotect
+ return syscall(SYS_pkey_mprotect, addr, len, prot, pkey);
+#else
+ return __syscall_ret(-ENOSYS);
+#endif
+}
diff --git a/src/linux/pkey_set.c b/src/linux/pkey_set.c
new file mode 100644
index 00000000..addf8da5
--- /dev/null
+++ b/src/linux/pkey_set.c
@@ -0,0 +1,9 @@
+#define _GNU_SOURCE 1
+#include <sys/mman.h>
+#include <errno.h>
+#include "syscall.h"
+
+int pkey_set(int pkey, unsigned access)
+{
+ return __syscall_ret(-ENOSYS);
+}
--
2.16.3
next reply other threads:[~2018-06-14 23:03 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-06-14 23:03 Szabolcs Nagy [this message]
2018-06-19 17:33 ` Rich Felker
2018-06-19 19:55 ` Szabolcs Nagy
2018-06-20 1:11 ` Rich Felker
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180614230337.GR4418@port70.net \
--to=nsz@port70.net \
--cc=musl@lists.openwall.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/musl/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).