* [PATCH 0/2] Build fixes for musl, glibc < 2.34 @ 2024-08-19 23:15 Stefano Brivio 2024-08-19 23:15 ` [PATCH 1/2] udp_flow: Add missing unistd.h include for close() Stefano Brivio 2024-08-19 23:15 ` [PATCH 2/2] util: Provide own version of close_range(), and no-op fallback Stefano Brivio 0 siblings, 2 replies; 5+ messages in thread From: Stefano Brivio @ 2024-08-19 23:15 UTC (permalink / raw) To: passt-dev; +Cc: lemmi Stefano Brivio (2): udp_flow: Add missing unistd.h include for close() util: Provide own version of close_range(), and no-op fallback udp_flow.c | 1 + util.h | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+) -- 2.43.0 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 1/2] udp_flow: Add missing unistd.h include for close() 2024-08-19 23:15 [PATCH 0/2] Build fixes for musl, glibc < 2.34 Stefano Brivio @ 2024-08-19 23:15 ` Stefano Brivio 2024-08-20 0:47 ` David Gibson 2024-08-19 23:15 ` [PATCH 2/2] util: Provide own version of close_range(), and no-op fallback Stefano Brivio 1 sibling, 1 reply; 5+ messages in thread From: Stefano Brivio @ 2024-08-19 23:15 UTC (permalink / raw) To: passt-dev; +Cc: lemmi For some reason, this is reported only with musl, and older glibc versions (2.31, at least). Signed-off-by: Stefano Brivio <sbrivio@redhat.com> --- udp_flow.c | 1 + 1 file changed, 1 insertion(+) diff --git a/udp_flow.c b/udp_flow.c index b1133c0..1ff59a9 100644 --- a/udp_flow.c +++ b/udp_flow.c @@ -8,6 +8,7 @@ #include <errno.h> #include <fcntl.h> #include <sys/uio.h> +#include <unistd.h> #include "util.h" #include "passt.h" -- @@ -8,6 +8,7 @@ #include <errno.h> #include <fcntl.h> #include <sys/uio.h> +#include <unistd.h> #include "util.h" #include "passt.h" -- 2.43.0 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 1/2] udp_flow: Add missing unistd.h include for close() 2024-08-19 23:15 ` [PATCH 1/2] udp_flow: Add missing unistd.h include for close() Stefano Brivio @ 2024-08-20 0:47 ` David Gibson 0 siblings, 0 replies; 5+ messages in thread From: David Gibson @ 2024-08-20 0:47 UTC (permalink / raw) To: Stefano Brivio; +Cc: passt-dev, lemmi [-- Attachment #1: Type: text/plain, Size: 825 bytes --] On Tue, Aug 20, 2024 at 01:15:04AM +0200, Stefano Brivio wrote: > For some reason, this is reported only with musl, and older glibc > versions (2.31, at least). > > Signed-off-by: Stefano Brivio <sbrivio@redhat.com> Reviewed-by: David Gibson <david@gibson.dropbear.id.au> > --- > udp_flow.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/udp_flow.c b/udp_flow.c > index b1133c0..1ff59a9 100644 > --- a/udp_flow.c > +++ b/udp_flow.c > @@ -8,6 +8,7 @@ > #include <errno.h> > #include <fcntl.h> > #include <sys/uio.h> > +#include <unistd.h> > > #include "util.h" > #include "passt.h" -- David Gibson (he or they) | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you, not the other way | around. http://www.ozlabs.org/~dgibson [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 2/2] util: Provide own version of close_range(), and no-op fallback 2024-08-19 23:15 [PATCH 0/2] Build fixes for musl, glibc < 2.34 Stefano Brivio 2024-08-19 23:15 ` [PATCH 1/2] udp_flow: Add missing unistd.h include for close() Stefano Brivio @ 2024-08-19 23:15 ` Stefano Brivio 2024-08-20 0:48 ` David Gibson 1 sibling, 1 reply; 5+ messages in thread From: Stefano Brivio @ 2024-08-19 23:15 UTC (permalink / raw) To: passt-dev; +Cc: lemmi musl, as of 1.2.5, and glibc < 2.34 don't ship a (trivial) close_range() implementation. This will probably be added to musl soon, by the way: https://www.openwall.com/lists/musl/2024/08/01/9 Add a weakly-aliased implementation, if it's supported by the kernel. If it's not supported (< 5.9), use a no-op fallback. Looping over 2^31 file descriptors calling close() on them is probably not a good idea. Reported-by: lemmi <lemmi@nerd2nerd.org> Signed-off-by: Stefano Brivio <sbrivio@redhat.com> --- util.h | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/util.h b/util.h index cb4d181..a9deba5 100644 --- a/util.h +++ b/util.h @@ -14,6 +14,9 @@ #include <string.h> #include <signal.h> #include <arpa/inet.h> +#include <unistd.h> +#include <sys/syscall.h> +#include <linux/close_range.h> #include "log.h" @@ -160,6 +163,23 @@ struct ctx; /* cppcheck-suppress funcArgNamesDifferent */ __attribute__ ((weak)) int ffsl(long int i) { return __builtin_ffsl(i); } + +#ifdef CLOSE_RANGE_UNSHARE /* Linux kernel >= 5.9 */ +/* glibc < 2.34 and musl as of 1.2.5 need these */ +#ifndef SYS_close_range +#define SYS_close_range 436 +#endif +__attribute__ ((weak)) int close_range(unsigned int first, unsigned int last, + int flags) { + return syscall(SYS_close_range, first, last, flags); +} +#else +/* No reasonable fallback option */ +int close_range(unsigned int first, unsigned int last, int flags) { + return 0; +} +#endif + int sock_l4_sa(const struct ctx *c, enum epoll_type type, const void *sa, socklen_t sl, const char *ifname, bool v6only, uint32_t data); -- @@ -14,6 +14,9 @@ #include <string.h> #include <signal.h> #include <arpa/inet.h> +#include <unistd.h> +#include <sys/syscall.h> +#include <linux/close_range.h> #include "log.h" @@ -160,6 +163,23 @@ struct ctx; /* cppcheck-suppress funcArgNamesDifferent */ __attribute__ ((weak)) int ffsl(long int i) { return __builtin_ffsl(i); } + +#ifdef CLOSE_RANGE_UNSHARE /* Linux kernel >= 5.9 */ +/* glibc < 2.34 and musl as of 1.2.5 need these */ +#ifndef SYS_close_range +#define SYS_close_range 436 +#endif +__attribute__ ((weak)) int close_range(unsigned int first, unsigned int last, + int flags) { + return syscall(SYS_close_range, first, last, flags); +} +#else +/* No reasonable fallback option */ +int close_range(unsigned int first, unsigned int last, int flags) { + return 0; +} +#endif + int sock_l4_sa(const struct ctx *c, enum epoll_type type, const void *sa, socklen_t sl, const char *ifname, bool v6only, uint32_t data); -- 2.43.0 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 2/2] util: Provide own version of close_range(), and no-op fallback 2024-08-19 23:15 ` [PATCH 2/2] util: Provide own version of close_range(), and no-op fallback Stefano Brivio @ 2024-08-20 0:48 ` David Gibson 0 siblings, 0 replies; 5+ messages in thread From: David Gibson @ 2024-08-20 0:48 UTC (permalink / raw) To: Stefano Brivio; +Cc: passt-dev, lemmi [-- Attachment #1: Type: text/plain, Size: 2109 bytes --] On Tue, Aug 20, 2024 at 01:15:05AM +0200, Stefano Brivio wrote: > musl, as of 1.2.5, and glibc < 2.34 don't ship a (trivial) > close_range() implementation. This will probably be added to musl > soon, by the way: > https://www.openwall.com/lists/musl/2024/08/01/9 > > Add a weakly-aliased implementation, if it's supported by the kernel. > If it's not supported (< 5.9), use a no-op fallback. Looping over 2^31 > file descriptors calling close() on them is probably not a good idea. > > Reported-by: lemmi <lemmi@nerd2nerd.org> > Signed-off-by: Stefano Brivio <sbrivio@redhat.com> Reviewed-by: David Gibson <david@gibson.dropbear.id.au> > --- > util.h | 20 ++++++++++++++++++++ > 1 file changed, 20 insertions(+) > > diff --git a/util.h b/util.h > index cb4d181..a9deba5 100644 > --- a/util.h > +++ b/util.h > @@ -14,6 +14,9 @@ > #include <string.h> > #include <signal.h> > #include <arpa/inet.h> > +#include <unistd.h> > +#include <sys/syscall.h> > +#include <linux/close_range.h> > > #include "log.h" > > @@ -160,6 +163,23 @@ struct ctx; > > /* cppcheck-suppress funcArgNamesDifferent */ > __attribute__ ((weak)) int ffsl(long int i) { return __builtin_ffsl(i); } > + > +#ifdef CLOSE_RANGE_UNSHARE /* Linux kernel >= 5.9 */ > +/* glibc < 2.34 and musl as of 1.2.5 need these */ > +#ifndef SYS_close_range > +#define SYS_close_range 436 > +#endif > +__attribute__ ((weak)) int close_range(unsigned int first, unsigned int last, > + int flags) { > + return syscall(SYS_close_range, first, last, flags); > +} > +#else > +/* No reasonable fallback option */ > +int close_range(unsigned int first, unsigned int last, int flags) { > + return 0; > +} > +#endif > + > int sock_l4_sa(const struct ctx *c, enum epoll_type type, > const void *sa, socklen_t sl, > const char *ifname, bool v6only, uint32_t data); -- David Gibson (he or they) | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you, not the other way | around. http://www.ozlabs.org/~dgibson [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2024-08-20 0:50 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2024-08-19 23:15 [PATCH 0/2] Build fixes for musl, glibc < 2.34 Stefano Brivio 2024-08-19 23:15 ` [PATCH 1/2] udp_flow: Add missing unistd.h include for close() Stefano Brivio 2024-08-20 0:47 ` David Gibson 2024-08-19 23:15 ` [PATCH 2/2] util: Provide own version of close_range(), and no-op fallback Stefano Brivio 2024-08-20 0:48 ` David Gibson
Code repositories for project(s) associated with this public inbox https://passt.top/passt 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 IMAP folder(s).