From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/13130 Path: news.gmane.org!.POSTED!not-for-mail From: Szabolcs Nagy Newsgroups: gmane.linux.lib.musl.general Subject: [PATCH 0/8] Updates for linux v4.18 Date: Thu, 23 Aug 2018 11:12:17 +0200 Message-ID: <20180823091217.GA4418@port70.net> Reply-To: musl@lists.openwall.com NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="cfJ13FhsvNR/yOpm" X-Trace: blaine.gmane.org 1535015431 20012 195.159.176.226 (23 Aug 2018 09:10:31 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Thu, 23 Aug 2018 09:10:31 +0000 (UTC) User-Agent: Mutt/1.9.1 (2017-09-22) To: musl@lists.openwall.com Original-X-From: musl-return-13146-gllmg-musl=m.gmane.org@lists.openwall.com Thu Aug 23 11:10:26 2018 Return-path: Envelope-to: gllmg-musl@m.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by blaine.gmane.org with smtp (Exim 4.84_2) (envelope-from ) id 1fsldK-00056w-La for gllmg-musl@m.gmane.org; Thu, 23 Aug 2018 11:10:26 +0200 Original-Received: (qmail 32423 invoked by uid 550); 23 Aug 2018 09:12:30 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-ID: Original-Received: (qmail 32380 invoked from network); 23 Aug 2018 09:12:29 -0000 Mail-Followup-To: musl@lists.openwall.com Content-Disposition: inline Xref: news.gmane.org gmane.linux.lib.musl.general:13130 Archived-At: --cfJ13FhsvNR/yOpm Content-Type: text/plain; charset=us-ascii Content-Disposition: inline glibc does not update the tcp_info struct because they consider changing the size an abi break, but then users have to include linux uapi headers for the new apis which can conflict with libc headers. i added the new members but i don't know which approach is better. some sysvipc padding fields got renamed on 32bit time_t targets, see e.g. linux commit c039dbd5f4bbf3547fde7ce9f7403e25938aa253 https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c039dbd5f4bbf3547fde7ce9f7403e25938aa253 i haven't made appropriate changes in musl yet and wonder if this is something we want to expose. in the signalfd patch i changed a pad struct member to __pad. i don't now of other issues. Szabolcs Nagy (8): update netinet/tcp.h for linux v4.18 update netinet/udp.h for linux v4.18 add AF_XDP to sys/socket.h from linux v4.18 add SIGSYS support to sys/signalfd.h from linux v4.18 add TRAP_UNK si_code to signal.h from linux v4.18 add io_pgetevents and rseq syscall numbers from linux v4.18 add AT_MINSIGSTKSZ to elf.h from linux v4.18 add NT_VMCOREDD to elf.h from linux v4.18 arch/aarch64/bits/syscall.h.in | 1 + arch/arm/bits/syscall.h.in | 1 + arch/i386/bits/syscall.h.in | 2 ++ arch/microblaze/bits/syscall.h.in | 2 ++ arch/mips/bits/syscall.h.in | 2 ++ arch/mips64/bits/syscall.h.in | 2 ++ arch/mipsn32/bits/syscall.h.in | 2 ++ arch/or1k/bits/syscall.h.in | 1 + arch/powerpc/bits/syscall.h.in | 2 ++ arch/powerpc64/bits/syscall.h.in | 2 ++ arch/s390x/bits/syscall.h.in | 2 ++ arch/x32/bits/syscall.h.in | 2 ++ arch/x86_64/bits/syscall.h.in | 2 ++ include/elf.h | 2 ++ include/netinet/tcp.h | 18 ++++++++++++++++++ include/netinet/udp.h | 3 +++ include/signal.h | 1 + include/sys/signalfd.h | 6 +++++- include/sys/socket.h | 5 ++++- 19 files changed, 56 insertions(+), 2 deletions(-) -- 2.17.1 --cfJ13FhsvNR/yOpm Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0001-update-netinet-tcp.h-for-linux-v4.18.patch" >From 847a793b1528c0a48d7ae61d3ca89379c2f66112 Mon Sep 17 00:00:00 2001 From: Szabolcs Nagy Date: Tue, 21 Aug 2018 22:27:57 +0000 Subject: [PATCH 1/8] update netinet/tcp.h for linux v4.18 add packet delivery info to tcp_info, new in linux commit feb5f2ec646483fb66f9ad7218b1aad2a93a2a5c add TCP_ZEROCOPY_RECEIVE socket option for zerocopy receive, new in linux commit 05255b823a6173525587f29c4e8f1ca33fd7677d add TCP_INQ socket option and TCP_CM_INQ cmsg to get in-queue bytes in cmsg upon read, new in linux commit b75eba76d3d72e2374fac999926dafef2997edd2 add TCP_REPAIR_* to fix repair socket window probe patch, new in linux commit 31048d7aedf31bf0f69c54a662944632f29d82f2 --- include/netinet/tcp.h | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/include/netinet/tcp.h b/include/netinet/tcp.h index 1e2acfbf..584af2f5 100644 --- a/include/netinet/tcp.h +++ b/include/netinet/tcp.h @@ -36,6 +36,10 @@ #define TCP_MD5SIG_EXT 32 #define TCP_FASTOPEN_KEY 33 #define TCP_FASTOPEN_NO_COOKIE 34 +#define TCP_ZEROCOPY_RECEIVE 35 +#define TCP_INQ 36 + +#define TCP_CM_INQ TCP_INQ #define TCP_ESTABLISHED 1 #define TCP_SYN_SENT 2 @@ -66,6 +70,8 @@ enum { TCP_NLA_SNDQ_SIZE, TCP_NLA_CA_STATE, TCP_NLA_SND_SSTHRESH, + TCP_NLA_DELIVERED, + TCP_NLA_DELIVERED_CE, }; #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) @@ -217,6 +223,8 @@ struct tcp_info { uint64_t tcpi_busy_time; uint64_t tcpi_rwnd_limited; uint64_t tcpi_sndbuf_limited; + uint32_t tcpi_delivered; + uint32_t tcpi_delivered_ce; }; #define TCP_MD5SIG_MAXKEYLEN 80 @@ -240,6 +248,10 @@ struct tcp_diag_md5sig { uint8_t tcpm_key[TCP_MD5SIG_MAXKEYLEN]; }; +#define TCP_REPAIR_ON 1 +#define TCP_REPAIR_OFF 0 +#define TCP_REPAIR_OFF_NO_WP -1 + struct tcp_repair_window { uint32_t snd_wl1; uint32_t snd_wnd; @@ -248,6 +260,12 @@ struct tcp_repair_window { uint32_t rcv_wup; }; +struct tcp_zerocopy_receive { + uint64_t address; + uint32_t length; + uint32_t recv_skip_hint; +}; + #endif #endif -- 2.17.1 --cfJ13FhsvNR/yOpm Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0002-update-netinet-udp.h-for-linux-v4.18.patch" >From 71b5cb373895464a7a311479de361c73d29a05a5 Mon Sep 17 00:00:00 2001 From: Szabolcs Nagy Date: Tue, 21 Aug 2018 22:34:08 +0000 Subject: [PATCH 2/8] update netinet/udp.h for linux v4.18 add UDP_NO_CHECK6_* to restrict zero UDP6 checksums, new in linux commit 1c19448c9ba6545b80ded18488a64a7f3d8e6998 (pre-v4.18 change, was missed) add UDP_SEGMENT to support generic segmentation offload for udp datagrams, bec1f6f697362c5bc635dacd7ac8499d0a10a4e7 (new in v4.18) --- include/netinet/udp.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/include/netinet/udp.h b/include/netinet/udp.h index 030e8fb2..993c3478 100644 --- a/include/netinet/udp.h +++ b/include/netinet/udp.h @@ -24,6 +24,9 @@ struct udphdr { #define UDP_CORK 1 #define UDP_ENCAP 100 +#define UDP_NO_CHECK6_TX 101 +#define UDP_NO_CHECK6_RX 102 +#define UDP_SEGMENT 103 #define UDP_ENCAP_ESPINUDP_NON_IKE 1 #define UDP_ENCAP_ESPINUDP 2 -- 2.17.1 --cfJ13FhsvNR/yOpm Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0003-add-AF_XDP-to-sys-socket.h-from-linux-v4.18.patch" >From 1dad64eb1838aceb353b48fa6d9624fe84ba8f89 Mon Sep 17 00:00:00 2001 From: Szabolcs Nagy Date: Wed, 22 Aug 2018 16:28:31 +0000 Subject: [PATCH 3/8] add AF_XDP to sys/socket.h from linux v4.18 new address family and related macros were added in linux commit 68e8b849b221b37a78a110a0307717d45e3593a0 --- include/sys/socket.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/include/sys/socket.h b/include/sys/socket.h index 14be6e99..1dec4b00 100644 --- a/include/sys/socket.h +++ b/include/sys/socket.h @@ -109,7 +109,8 @@ struct linger { #define PF_KCM 41 #define PF_QIPCRTR 42 #define PF_SMC 43 -#define PF_MAX 44 +#define PF_XDP 44 +#define PF_MAX 45 #define AF_UNSPEC PF_UNSPEC #define AF_LOCAL PF_LOCAL @@ -158,6 +159,7 @@ struct linger { #define AF_KCM PF_KCM #define AF_QIPCRTR PF_QIPCRTR #define AF_SMC PF_SMC +#define AF_XDP PF_XDP #define AF_MAX PF_MAX #ifndef SO_DEBUG @@ -265,6 +267,7 @@ struct linger { #define SOL_NFC 280 #define SOL_KCM 281 #define SOL_TLS 282 +#define SOL_XDP 283 #define SOMAXCONN 128 -- 2.17.1 --cfJ13FhsvNR/yOpm Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-add-SIGSYS-support-to-sys-signalfd.h-from-linux-v4.1.patch" >From 0d51831d4dbe1fc3de1511fb6c15b2e6ea6f0e8f Mon Sep 17 00:00:00 2001 From: Szabolcs Nagy Date: Wed, 22 Aug 2018 16:39:20 +0000 Subject: [PATCH 4/8] add SIGSYS support to sys/signalfd.h from linux v4.18 new in linux commit 76b7f670730e87974f71df9f6129811e2769666e in struct signalfd_siginfo the pad member is changed to __pad to keep the namespace clean, it's not part of the public api. --- include/sys/signalfd.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/include/sys/signalfd.h b/include/sys/signalfd.h index 55431b91..e881e2cf 100644 --- a/include/sys/signalfd.h +++ b/include/sys/signalfd.h @@ -35,7 +35,11 @@ struct signalfd_siginfo { uint64_t ssi_stime; uint64_t ssi_addr; uint16_t ssi_addr_lsb; - uint8_t pad[128-12*4-4*8-2]; + uint16_t __pad2; + int32_t ssi_syscall; + uint64_t ssi_call_addr; + uint32_t ssi_arch; + uint8_t __pad[128-14*4-5*8-2*2]; }; #ifdef __cplusplus -- 2.17.1 --cfJ13FhsvNR/yOpm Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0005-add-TRAP_UNK-si_code-to-signal.h-from-linux-v4.18.patch" >From 0d22b4ab02ad516fa628c523e0c5597c6978467b Mon Sep 17 00:00:00 2001 From: Szabolcs Nagy Date: Wed, 22 Aug 2018 17:10:55 +0000 Subject: [PATCH 5/8] add TRAP_UNK si_code to signal.h from linux v4.18 used for undiagnosed trap exceptions where linux previously set si_code to 0. new in linux commit db78e6a0a6f9f7d7277965600eeb1a5b3a6f55a8 --- include/signal.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/signal.h b/include/signal.h index a4f85cca..5c48cb83 100644 --- a/include/signal.h +++ b/include/signal.h @@ -233,6 +233,7 @@ void (*sigset(int, void (*)(int)))(int); #define TRAP_TRACE 2 #define TRAP_BRANCH 3 #define TRAP_HWBKPT 4 +#define TRAP_UNK 5 #define POLL_IN 1 #define POLL_OUT 2 #define POLL_MSG 3 -- 2.17.1 --cfJ13FhsvNR/yOpm Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0006-add-io_pgetevents-and-rseq-syscall-numbers-from-linu.patch" >From 6b1a82eca320a2ff05821e26d16dd72978d45e66 Mon Sep 17 00:00:00 2001 From: Szabolcs Nagy Date: Wed, 22 Aug 2018 17:31:43 +0000 Subject: [PATCH 6/8] add io_pgetevents and rseq syscall numbers from linux v4.18 io_pgetevents is new in linux commit 7a074e96dee62586c935c80cecd931431bfdd0be This is the io_getevents equivalent of ppoll/pselect and allows to properly mix signals and aio completions (especially with IOCB_CMD_POLL) rseq is new in linux commit d7822b1e24f2df5df98c76f0e94a5416349ff759 Expose a new system call allowing each thread to register one userspace memory area to be used as an ABI between kernel and user-space for two purposes: user-space restartable sequences and quick access to read the current CPU number value from user-space. --- arch/aarch64/bits/syscall.h.in | 1 + arch/arm/bits/syscall.h.in | 1 + arch/i386/bits/syscall.h.in | 2 ++ arch/microblaze/bits/syscall.h.in | 2 ++ arch/mips/bits/syscall.h.in | 2 ++ arch/mips64/bits/syscall.h.in | 2 ++ arch/mipsn32/bits/syscall.h.in | 2 ++ arch/or1k/bits/syscall.h.in | 1 + arch/powerpc/bits/syscall.h.in | 2 ++ arch/powerpc64/bits/syscall.h.in | 2 ++ arch/s390x/bits/syscall.h.in | 2 ++ arch/x32/bits/syscall.h.in | 2 ++ arch/x86_64/bits/syscall.h.in | 2 ++ 13 files changed, 23 insertions(+) diff --git a/arch/aarch64/bits/syscall.h.in b/arch/aarch64/bits/syscall.h.in index 0d4a9bca..47a969bc 100644 --- a/arch/aarch64/bits/syscall.h.in +++ b/arch/aarch64/bits/syscall.h.in @@ -274,4 +274,5 @@ #define __NR_pkey_alloc 289 #define __NR_pkey_free 290 #define __NR_statx 291 +#define __NR_io_pgetevents 292 diff --git a/arch/arm/bits/syscall.h.in b/arch/arm/bits/syscall.h.in index 1920516a..13a3b66c 100644 --- a/arch/arm/bits/syscall.h.in +++ b/arch/arm/bits/syscall.h.in @@ -353,6 +353,7 @@ #define __NR_pkey_alloc 395 #define __NR_pkey_free 396 #define __NR_statx 397 +#define __NR_rseq 398 #define __ARM_NR_breakpoint 0x0f0001 #define __ARM_NR_cacheflush 0x0f0002 diff --git a/arch/i386/bits/syscall.h.in b/arch/i386/bits/syscall.h.in index 27e72fec..47f4ae03 100644 --- a/arch/i386/bits/syscall.h.in +++ b/arch/i386/bits/syscall.h.in @@ -382,4 +382,6 @@ #define __NR_pkey_free 382 #define __NR_statx 383 #define __NR_arch_prctl 384 +#define __NR_io_pgetevents 385 +#define __NR_rseq 386 diff --git a/arch/microblaze/bits/syscall.h.in b/arch/microblaze/bits/syscall.h.in index dda5218d..f0583961 100644 --- a/arch/microblaze/bits/syscall.h.in +++ b/arch/microblaze/bits/syscall.h.in @@ -393,4 +393,6 @@ #define __NR_pkey_alloc 396 #define __NR_pkey_free 397 #define __NR_statx 398 +#define __NR_io_pgetevents 399 +#define __NR_rseq 400 diff --git a/arch/mips/bits/syscall.h.in b/arch/mips/bits/syscall.h.in index c1e23635..be8c3207 100644 --- a/arch/mips/bits/syscall.h.in +++ b/arch/mips/bits/syscall.h.in @@ -364,4 +364,6 @@ #define __NR_pkey_alloc 4364 #define __NR_pkey_free 4365 #define __NR_statx 4366 +#define __NR_rseq 4367 +#define __NR_io_pgetevents 4368 diff --git a/arch/mips64/bits/syscall.h.in b/arch/mips64/bits/syscall.h.in index b0fe49b5..f814aa48 100644 --- a/arch/mips64/bits/syscall.h.in +++ b/arch/mips64/bits/syscall.h.in @@ -324,4 +324,6 @@ #define __NR_pkey_alloc 5324 #define __NR_pkey_free 5325 #define __NR_statx 5326 +#define __NR_rseq 4327 +#define __NR_io_pgetevents 4328 diff --git a/arch/mipsn32/bits/syscall.h.in b/arch/mipsn32/bits/syscall.h.in index 70c5d0b8..c1726180 100644 --- a/arch/mipsn32/bits/syscall.h.in +++ b/arch/mipsn32/bits/syscall.h.in @@ -328,4 +328,6 @@ #define __NR_pkey_alloc 6328 #define __NR_pkey_free 6329 #define __NR_statx 6330 +#define __NR_rseq 6331 +#define __NR_io_pgetevents 6332 diff --git a/arch/or1k/bits/syscall.h.in b/arch/or1k/bits/syscall.h.in index 03735e88..76ba2c6e 100644 --- a/arch/or1k/bits/syscall.h.in +++ b/arch/or1k/bits/syscall.h.in @@ -276,4 +276,5 @@ #define __NR_pkey_alloc 289 #define __NR_pkey_free 290 #define __NR_statx 291 +#define __NR_io_pgetevents 292 diff --git a/arch/powerpc/bits/syscall.h.in b/arch/powerpc/bits/syscall.h.in index 7ce94bbd..54e155f2 100644 --- a/arch/powerpc/bits/syscall.h.in +++ b/arch/powerpc/bits/syscall.h.in @@ -371,4 +371,6 @@ #define __NR_pkey_alloc 384 #define __NR_pkey_free 385 #define __NR_pkey_mprotect 386 +#define __NR_rseq 387 +#define __NR_io_pgetevents 388 diff --git a/arch/powerpc64/bits/syscall.h.in b/arch/powerpc64/bits/syscall.h.in index 1da1ecc0..4e29cedf 100644 --- a/arch/powerpc64/bits/syscall.h.in +++ b/arch/powerpc64/bits/syscall.h.in @@ -362,4 +362,6 @@ #define __NR_pkey_alloc 384 #define __NR_pkey_free 385 #define __NR_pkey_mprotect 386 +#define __NR_rseq 387 +#define __NR_io_pgetevents 388 diff --git a/arch/s390x/bits/syscall.h.in b/arch/s390x/bits/syscall.h.in index 409e9155..85a18e79 100644 --- a/arch/s390x/bits/syscall.h.in +++ b/arch/s390x/bits/syscall.h.in @@ -324,4 +324,6 @@ #define __NR_statx 379 #define __NR_s390_sthyi 380 #define __NR_kexec_file_load 381 +#define __NR_io_pgetevents 382 +#define __NR_rseq 383 diff --git a/arch/x32/bits/syscall.h.in b/arch/x32/bits/syscall.h.in index 23ef4472..67d89f91 100644 --- a/arch/x32/bits/syscall.h.in +++ b/arch/x32/bits/syscall.h.in @@ -284,6 +284,8 @@ #define __NR_pkey_alloc (0x40000000 + 330) #define __NR_pkey_free (0x40000000 + 331) #define __NR_statx (0x40000000 + 332) +#define __NR_io_pgetevents (0x40000000 + 333) +#define __NR_rseq (0x40000000 + 334) #define __NR_rt_sigaction (0x40000000 + 512) #define __NR_rt_sigreturn (0x40000000 + 513) diff --git a/arch/x86_64/bits/syscall.h.in b/arch/x86_64/bits/syscall.h.in index bffcc4ee..9cdb7789 100644 --- a/arch/x86_64/bits/syscall.h.in +++ b/arch/x86_64/bits/syscall.h.in @@ -331,4 +331,6 @@ #define __NR_pkey_alloc 330 #define __NR_pkey_free 331 #define __NR_statx 332 +#define __NR_io_pgetevents 333 +#define __NR_rseq 334 -- 2.17.1 --cfJ13FhsvNR/yOpm Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0007-add-AT_MINSIGSTKSZ-to-elf.h-from-linux-v4.18.patch" >From 053ba4fecfe092ccabf2c2ca29ace8b91798a6c4 Mon Sep 17 00:00:00 2001 From: Szabolcs Nagy Date: Wed, 22 Aug 2018 17:51:25 +0000 Subject: [PATCH 7/8] add AT_MINSIGSTKSZ to elf.h from linux v4.18 new in linux commit 94b07c1f8c39c6d839df35fa28ffd1785d385897 currently only supported on aarch64: Stateful CPU architecture extensions may require the signal frame to grow to a size that exceeds the arch's MINSIGSTKSZ #define. However, changing this #define is an ABI break. To allow userspace the option of determining the signal frame size in a more forwards-compatible way, this patch adds a new auxv entry tagged with AT_MINSIGSTKSZ, which provides the maximum signal frame size that the process can observe during its lifetime. --- include/elf.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/elf.h b/include/elf.h index c2297353..4a8843c7 100644 --- a/include/elf.h +++ b/include/elf.h @@ -1035,6 +1035,7 @@ typedef struct { #define AT_L3_CACHESIZE 46 #define AT_L3_CACHEGEOMETRY 47 +#define AT_MINSIGSTKSZ 51 typedef struct { -- 2.17.1 --cfJ13FhsvNR/yOpm Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0008-add-NT_VMCOREDD-to-elf.h-from-linux-v4.18.patch" >From 98acd2853bf395ca3506d9823eb60c52b6010820 Mon Sep 17 00:00:00 2001 From: Szabolcs Nagy Date: Wed, 22 Aug 2018 17:56:59 +0000 Subject: [PATCH 8/8] add NT_VMCOREDD to elf.h from linux v4.18 used for device driver dump in /proc/vmcore new in linux commit 2724273e8fd00b512596a77ee063f49b25f36507 --- include/elf.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/elf.h b/include/elf.h index 4a8843c7..54f41a10 100644 --- a/include/elf.h +++ b/include/elf.h @@ -685,6 +685,7 @@ typedef struct { #define NT_METAG_RPIPE 0x501 #define NT_METAG_TLS 0x502 #define NT_ARC_V2 0x600 +#define NT_VMCOREDD 0x700 #define NT_VERSION 1 -- 2.17.1 --cfJ13FhsvNR/yOpm--