From 8d37d4576fc4f43803eef2d8770e291fa9d69f27 Mon Sep 17 00:00:00 2001 From: sergio Date: Fri, 10 Jul 2026 23:51:48 -0400 Subject: [PATCH] =?UTF-8?q?base-system-2:=20promover=207=20tier-2=20a=20ca?= =?UTF-8?q?n=C3=B3nicas=20+=20repo=20firmado?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit shadow (useradd/passwd), kbd (loadkeys/setfont), procps-ng (ps/top/free), pciutils (lspci), lsof, strace, mandoc (man) → recipes/ canónicas + índice firmado. usbutils (falta libusb) y gnupg (falta libassuan/libksba/npth) quedan staged/bloqueados; foot diferido (Wayland). Segunda tanda del userland foundational: usuarios + teclado + proceso + hardware + docs + debug. --- recipes/busybox.patch | 33 +++ recipes/disable-test_pids-check.patch | 10 + recipes/dynamic-tagfile-support.patch | 131 +++++++++ recipes/empty-title.patch | 47 +++ recipes/fix-core-dump-tag-put-assertion.patch | 56 ++++ recipes/hassecurity.patch | 11 + recipes/{incoming-clib => }/kbd.toml | 0 recipes/lex.patch | 15 + recipes/linux-headers-7.0.patch | 274 ++++++++++++++++++ recipes/{incoming-clib => }/lsof.toml | 0 recipes/{incoming-clib => }/mandoc.toml | 0 recipes/nlattr-fix.patch | 21 ++ recipes/off64.patch | 39 +++ recipes/outdated-warn-disable.patch | 17 ++ recipes/{incoming-clib => }/pciutils.toml | 0 recipes/{incoming-clib => }/procps-ng.toml | 0 recipes/{incoming-clib => }/shadow.toml | 0 recipes/{incoming-clib => }/strace.toml | 0 recipes/tv_usec.patch | 46 +++ recipes/useradd-defaults.patch | 24 ++ tandas/base-system-2.txt | 10 + 21 files changed, 734 insertions(+) create mode 100644 recipes/busybox.patch create mode 100644 recipes/disable-test_pids-check.patch create mode 100644 recipes/dynamic-tagfile-support.patch create mode 100644 recipes/empty-title.patch create mode 100644 recipes/fix-core-dump-tag-put-assertion.patch create mode 100644 recipes/hassecurity.patch rename recipes/{incoming-clib => }/kbd.toml (100%) create mode 100644 recipes/lex.patch create mode 100644 recipes/linux-headers-7.0.patch rename recipes/{incoming-clib => }/lsof.toml (100%) rename recipes/{incoming-clib => }/mandoc.toml (100%) create mode 100644 recipes/nlattr-fix.patch create mode 100644 recipes/off64.patch create mode 100644 recipes/outdated-warn-disable.patch rename recipes/{incoming-clib => }/pciutils.toml (100%) rename recipes/{incoming-clib => }/procps-ng.toml (100%) rename recipes/{incoming-clib => }/shadow.toml (100%) rename recipes/{incoming-clib => }/strace.toml (100%) create mode 100644 recipes/tv_usec.patch create mode 100644 recipes/useradd-defaults.patch create mode 100644 tandas/base-system-2.txt diff --git a/recipes/busybox.patch b/recipes/busybox.patch new file mode 100644 index 00000000..d638ebfb --- /dev/null +++ b/recipes/busybox.patch @@ -0,0 +1,33 @@ +Fixes for busybox + +--- a/tests/status-detached.expected ++++ b/tests/status-detached.expected +@@ -1 +1 @@ +-nanosleep\({tv_sec=2, tv_nsec=0} ++nanosleep\(\{tv_sec=2, tv_nsec=0\}, +--- a/tests/strace--tips.test ++++ b/tests/strace--tips.test +@@ -13,7 +13,7 @@ tips_fmt_opt="" + + grep_ere_escape() + { +- printf "%s" "$*" | sed 's/[].*&^$()|[\/]/\\&/g' ++ printf "%s" "$*" | sed 's/[].*&^$(){}|[\\/]/\\&/g' + } + + # Check that simple "strace --tips=0" works as expected +--- a/tests/strace-k.test ++++ b/tests/strace-k.test +@@ -26,10 +26,9 @@ check_prog sed + check_prog tr + + path_to_sed="$(command -v sed)" +-if [ -x "$path_to_sed" ] && +- path_to_sed="$(readlink -ev -- "$path_to_sed")"; then ++if [ -x "$path_to_sed" ]; then + "$path_to_sed" -n 's/^[^/]\+[[:space:]]\(\/.*\)$/\1/p' /proc/self/maps | +- grep -F -x -e "$path_to_sed" > /dev/null || { ++ grep -F -x -e "$(readlink -fv -- "$path_to_sed")" > /dev/null || { + cat >&2 /proc/self/maps + framework_skip_ '/proc/self/maps is invalid' + } diff --git a/recipes/disable-test_pids-check.patch b/recipes/disable-test_pids-check.patch new file mode 100644 index 00000000..55c544ff --- /dev/null +++ b/recipes/disable-test_pids-check.patch @@ -0,0 +1,10 @@ +--- a/Makefile.am 2025-11-25 18:32:31.829279209 +0000 ++++ b/Makefile.am 2025-11-25 18:33:52.519524988 +0000 +@@ -411,7 +411,6 @@ + # Test programs not used by dejagnu but run directly + TESTS = \ + library/tests/test_escape \ +- library/tests/test_pids \ + library/tests/test_uptime \ + library/tests/test_sysinfo \ + library/tests/test_version \ diff --git a/recipes/dynamic-tagfile-support.patch b/recipes/dynamic-tagfile-support.patch new file mode 100644 index 00000000..7294d558 --- /dev/null +++ b/recipes/dynamic-tagfile-support.patch @@ -0,0 +1,131 @@ +BusyBox less doesn't support tag files (-T option), hence we previously +disabled tag file support in mandoc at compile-time (HAVE_LESS_T). +However, on Alpine it is entirely possible to replace BusyBox less with +an implementation that supports tag files (e.g. main/less). In order to +support tag files when such an implementation is installed, we need to +detect at runtime whether -T is supported. + +This patch achieves this by invoking the pager once with -T beforehand +and checking if it terminates with a non-zero exit status. + +diff -upr mandoc-1.14.6.orig/configure mandoc-1.14.6/configure +--- mandoc-1.14.6.orig/configure 2023-07-02 19:38:31.011639507 +0200 ++++ mandoc-1.14.6/configure 2023-07-02 19:38:41.794998501 +0200 +@@ -67,7 +67,6 @@ HAVE_FTS_COMPARE_CONST= + HAVE_GETLINE= + HAVE_GETSUBOPT= + HAVE_ISBLANK= +-HAVE_LESS_T= + HAVE_MKDTEMP= + HAVE_MKSTEMPS= + HAVE_NANOSLEEP= +@@ -363,21 +362,6 @@ fi + echo "selected BINM_PAGER=${BINM_PAGER}${manual}" 1>&2 + echo "selected BINM_PAGER=${BINM_PAGER}${manual}" 1>&3 + +-# --- tagging support in the pager --- +-if ismanual "${BINM_PAGER} -T" LESS_T ${HAVE_LESS_T}; then +- : +-elif ${BINM_PAGER} -T /dev/null test-noop.c 1>/dev/null 2>&3; then +- HAVE_LESS_T=1 +- echo "tested ${BINM_PAGER} -T: yes" 1>&2 +- echo "tested ${BINM_PAGER} -T: yes" 1>&3 +- echo 1>&3 +-else +- HAVE_LESS_T=0 +- echo "tested ${BINM_PAGER} -T: no" 1>&2 +- echo "tested ${BINM_PAGER} -T: no" 1>&3 +- echo 1>&3 +-fi +- + # --- wide character and locale support --- + if get_locale; then + runtest wchar WCHAR "-DUTF8_LOCALE=\"${UTF8_LOCALE}\"" \ +@@ -484,7 +468,6 @@ cat << __HEREDOC__ + #define HAVE_GETLINE ${HAVE_GETLINE} + #define HAVE_GETSUBOPT ${HAVE_GETSUBOPT} + #define HAVE_ISBLANK ${HAVE_ISBLANK} +-#define HAVE_LESS_T ${HAVE_LESS_T} + #define HAVE_MKDTEMP ${HAVE_MKDTEMP} + #define HAVE_MKSTEMPS ${HAVE_MKSTEMPS} + #define HAVE_NTOHL ${HAVE_NTOHL} +diff -upr mandoc-1.14.6.orig/main.c mandoc-1.14.6/main.c +--- mandoc-1.14.6.orig/main.c 2023-07-02 19:38:31.011639507 +0200 ++++ mandoc-1.14.6/main.c 2023-07-02 19:38:50.635019538 +0200 +@@ -1271,6 +1271,44 @@ run_pager(struct outstate *outst, char * + } + } + ++static int ++supports_tags(const char *pager, char *tagfile) ++{ ++ int fd; ++ pid_t pid; ++ int wstatus; ++ ++ if (strcmp(pager, "less") != 0) ++ return 0; ++ ++ pid = fork(); ++ switch (pid) { ++ case -1: ++ err(1, "fork"); ++ case 0: ++ close(STDIN_FILENO); ++ fd = open("/dev/null", O_RDWR); ++ if (fd == -1) ++ err(1, "open"); ++ assert(fd == STDIN_FILENO); ++ ++ close(STDOUT_FILENO); ++ dup2(fd, STDOUT_FILENO); ++ close(STDERR_FILENO); ++ dup2(fd, STDERR_FILENO); ++ ++ /* If the pager doesn't support -T we expect a non-zero exit code */ ++ execlp(pager, pager, "-T", tagfile, "-", (char *)NULL); ++ exit(EXIT_FAILURE); ++ default: ++ if (waitpid(pid, &wstatus, 0) == -1) ++ err(1, "waitpid"); ++ break; ++ } ++ ++ return wstatus == EXIT_SUCCESS; ++} ++ + static pid_t + spawn_pager(struct outstate *outst, char *tag_target) + { +@@ -1279,9 +1317,7 @@ spawn_pager(struct outstate *outst, char + char *argv[MAX_PAGER_ARGS]; + const char *pager; + char *cp; +-#if HAVE_LESS_T + size_t cmdlen; +-#endif + int argc, use_ofn; + pid_t pager_pid; + +@@ -1316,11 +1352,10 @@ spawn_pager(struct outstate *outst, char + /* For less(1), use the tag file. */ + + use_ofn = 1; +-#if HAVE_LESS_T + if (*outst->tag_files->tfn != '\0' && + (cmdlen = strlen(argv[0])) >= 4) { + cp = argv[0] + cmdlen - 4; +- if (strcmp(cp, "less") == 0) { ++ if (supports_tags(pager, outst->tag_files->tfn)) { + argv[argc++] = mandoc_strdup("-T"); + argv[argc++] = outst->tag_files->tfn; + if (tag_target != NULL) { +@@ -1330,7 +1365,7 @@ spawn_pager(struct outstate *outst, char + } + } + } +-#endif ++ + if (use_ofn) { + if (outst->outtype == OUTT_HTML && tag_target != NULL) + mandoc_asprintf(&argv[argc], "file://%s#%s", diff --git a/recipes/empty-title.patch b/recipes/empty-title.patch new file mode 100644 index 00000000..4fd46eb2 --- /dev/null +++ b/recipes/empty-title.patch @@ -0,0 +1,47 @@ +Patch-Source: https://marc.info/?l=mandoc-discuss&m=175200050325256&w=2 + +--- a/man_validate.c ++++ b/man_validate.c +@@ -481,7 +481,7 @@ post_TH(CHKARGS) + /* ->TITLE<- MSEC DATE OS VOL */ + + n = n->child; +- if (n != NULL && n->string != NULL) { ++ if (n != NULL && n->string != NULL && *n->string != '\0') { + for (p = n->string; *p != '\0'; p++) { + /* Only warn about this once... */ + if (isalpha((unsigned char)*p) && +@@ -494,8 +494,8 @@ post_TH(CHKARGS) + } + man->meta.title = mandoc_strdup(n->string); + } else { +- man->meta.title = mandoc_strdup(""); +- mandoc_msg(MANDOCERR_TH_NOTITLE, nb->line, nb->pos, "TH"); ++ man->meta.title = mandoc_strdup("UNTITLED"); ++ mandoc_msg(MANDOCERR_DT_NOTITLE, nb->line, nb->pos, "TH"); + } + + /* TITLE ->MSEC<- DATE OS VOL */ +--- a/regress/man/TH/noarg.out_ascii ++++ b/regress/man/TH/noarg.out_ascii +@@ -1,4 +1,4 @@ +-() () ++UNTITLED() UNTITLED() + + NNAAMMEE + TH-noarg - no arguments to the TH macro +@@ -6,4 +6,4 @@ NNAAMMEE + DDEESSCCRRIIPPTTIIOONN + some text + +-OpenBSD () ++OpenBSD UNTITLED() +--- a/regress/man/TH/noarg.out_lint ++++ b/regress/man/TH/noarg.out_lint +@@ -1,3 +1,3 @@ +-mandoc: noarg.in:2:2: WARNING: missing manual title, using "": TH +-mandoc: noarg.in:2:2: WARNING: missing manual section, using "": TH ++mandoc: noarg.in:2:2: WARNING: missing manual title, using UNTITLED: TH ++mandoc: noarg.in:2:2: WARNING: missing manual section, using "": TH UNTITLED + mandoc: noarg.in:2:2: WARNING: missing date, using "": TH + diff --git a/recipes/fix-core-dump-tag-put-assertion.patch b/recipes/fix-core-dump-tag-put-assertion.patch new file mode 100644 index 00000000..d9922f93 --- /dev/null +++ b/recipes/fix-core-dump-tag-put-assertion.patch @@ -0,0 +1,56 @@ +Patch-Source: https://cvsweb.bsd.lv/mandoc/tag.c.diff?r1=1.36&r2=1.37 +--- +=================================================================== +RCS file: /cvs/mandoc/tag.c,v +retrieving revision 1.36 +retrieving revision 1.37 +diff -u -p -r1.36 -r1.37 +--- mandoc/tag.c 2020/04/19 16:36:16 1.36 ++++ mandoc/tag.c 2022/04/26 11:38:38 1.37 +@@ -1,6 +1,7 @@ +-/* $Id: tag.c,v 1.36 2020/04/19 16:36:16 schwarze Exp $ */ ++/* $Id: tag.c,v 1.37 2022/04/26 11:38:38 schwarze Exp $ */ + /* +- * Copyright (c) 2015,2016,2018,2019,2020 Ingo Schwarze ++ * Copyright (c) 2015, 2016, 2018, 2019, 2020, 2022 ++ * Ingo Schwarze + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above +@@ -80,7 +81,7 @@ tag_free(void) + + /* + * Set a node where a term is defined, +- * unless it is already defined at a lower priority. ++ * unless the term is already defined at a lower priority. + */ + void + tag_put(const char *s, int prio, struct roff_node *n) +@@ -93,6 +94,18 @@ tag_put(const char *s, int prio, struct roff_node *n) + + assert(prio <= TAG_FALLBACK); + ++ /* ++ * If the node is already tagged, the existing tag is ++ * explicit and we are now about to add an implicit tag. ++ * Don't do that; just skip implicit tagging if the author ++ * specified an explicit tag. ++ */ ++ ++ if (n->flags & NODE_ID) ++ return; ++ ++ /* Determine the implicit tag. */ ++ + if (s == NULL) { + if (n->child == NULL || n->child->type != ROFFT_TEXT) + return; +@@ -150,7 +163,7 @@ tag_put(const char *s, int prio, struct roff_node *n) + */ + + else if (entry->prio < prio) +- return; ++ return; + + /* + * If the existing entry is worse, clear it. diff --git a/recipes/hassecurity.patch b/recipes/hassecurity.patch new file mode 100644 index 00000000..5e758d8a --- /dev/null +++ b/recipes/hassecurity.patch @@ -0,0 +1,11 @@ +--- a/lib/dialects/linux/machine.h ++++ b/lib/dialects/linux/machine.h +@@ -390,7 +390,7 @@ + * (the one that its user logged on with) of the lsof process. + */ + +-/* #define HASSECURITY 1 */ ++#define HASSECURITY 1 + + /* + * If HASSECURITY is defined, define HASNOSOCKSECURITY to allow users diff --git a/recipes/incoming-clib/kbd.toml b/recipes/kbd.toml similarity index 100% rename from recipes/incoming-clib/kbd.toml rename to recipes/kbd.toml diff --git a/recipes/lex.patch b/recipes/lex.patch new file mode 100644 index 00000000..a30f2b06 --- /dev/null +++ b/recipes/lex.patch @@ -0,0 +1,15 @@ +Lexer is never run so don't bother + +--- a/configure ++++ b/configure +@@ -7131,10 +7131,6 @@ + rm -f conftest.l $LEX_OUTPUT_ROOT.c + + fi +-if test "x$LEX" != xflex +-then : +- as_fn_error $? "kbd depends on flex features, but found '$LEX'." "$LINENO" 5 +-fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -std=gnu11" >&5 + printf %s "checking whether C compiler accepts -std=gnu11... " >&6; } diff --git a/recipes/linux-headers-7.0.patch b/recipes/linux-headers-7.0.patch new file mode 100644 index 00000000..0dc6ccb5 --- /dev/null +++ b/recipes/linux-headers-7.0.patch @@ -0,0 +1,274 @@ +From 619b1e60da171d573481d2fbfea7645c8a80d1ae Mon Sep 17 00:00:00 2001 +From: "Dmitry V. Levin" +Date: Tue, 10 Mar 2026 08:00:00 +0000 +Subject: [PATCH] bundled: update linux/io_uring.h to v7.0-rc3 + +* bundled/linux/include/uapi/linux/io_uring.h: Update to +headers_install'ed Linux kernel v7.0-rc3. +* src/io_uring.c (print_io_uring_zcrx_ifq_reg): Follow the rename +of __resv2 field of struct io_uring_zcrx_ifq_reg to rx_buf_len. +* tests/io_uring_register.c (test_IORING_REGISTER_ZCRX_IFQ): Update +expected output. +--- + bundled/linux/include/uapi/linux/io_uring.h | 35 +++++++++++++++++++-- + src/io_uring.c | 7 ++--- + tests/io_uring_register.c | 8 ++--- + 3 files changed, 39 insertions(+), 11 deletions(-) + +diff --git a/bundled/linux/include/uapi/linux/io_uring.h b/bundled/linux/include/uapi/linux/io_uring.h +index b5b23c0d52..1ff16141c8 100644 +--- a/bundled/linux/include/uapi/linux/io_uring.h ++++ b/bundled/linux/include/uapi/linux/io_uring.h +@@ -188,7 +188,8 @@ enum io_uring_sqe_flags_bit { + /* + * If COOP_TASKRUN is set, get notified if task work is available for + * running and a kernel transition would be needed to run it. This sets +- * IORING_SQ_TASKRUN in the sq ring flags. Not valid with COOP_TASKRUN. ++ * IORING_SQ_TASKRUN in the sq ring flags. Not valid without COOP_TASKRUN ++ * or DEFER_TASKRUN. + */ + #define IORING_SETUP_TASKRUN_FLAG (1U << 9) + #define IORING_SETUP_SQE128 (1U << 10) /* SQEs are 128 byte */ +@@ -237,6 +238,18 @@ enum io_uring_sqe_flags_bit { + */ + #define IORING_SETUP_SQE_MIXED (1U << 19) + ++/* ++ * When set, io_uring ignores SQ head and tail and fetches SQEs to submit ++ * starting from index 0 instead from the index stored in the head pointer. ++ * IOW, the user should place all SQE at the beginning of the SQ memory ++ * before issuing a submission syscall. ++ * ++ * It requires IORING_SETUP_NO_SQARRAY and is incompatible with ++ * IORING_SETUP_SQPOLL. The user must also never change the SQ head and tail ++ * values and keep it set to 0. Any other value is undefined behaviour. ++ */ ++#define IORING_SETUP_SQ_REWIND (1U << 20) ++ + enum io_uring_op { + IORING_OP_NOP, + IORING_OP_READV, +@@ -700,6 +713,9 @@ enum io_uring_register_op { + /* auxiliary zcrx configuration, see enum zcrx_ctrl_op */ + IORING_REGISTER_ZCRX_CTRL = 36, + ++ /* register bpf filtering programs */ ++ IORING_REGISTER_BPF_FILTER = 37, ++ + /* this goes last */ + IORING_REGISTER_LAST, + +@@ -805,6 +821,13 @@ struct io_uring_restriction { + __u32 resv2[3]; + }; + ++struct io_uring_task_restriction { ++ __u16 flags; ++ __u16 nr_res; ++ __u32 resv[3]; ++ __DECLARE_FLEX_ARRAY(struct io_uring_restriction, restrictions); ++}; ++ + struct io_uring_clock_register { + __u32 clockid; + __u32 __resv[3]; +@@ -1068,6 +1091,14 @@ enum zcrx_reg_flags { + ZCRX_REG_IMPORT = 1, + }; + ++enum zcrx_features { ++ /* ++ * The user can ask for the desired rx page size by passing the ++ * value in struct io_uring_zcrx_ifq_reg::rx_buf_len. ++ */ ++ ZCRX_FEATURE_RX_PAGE_SIZE = 1 << 0, ++}; ++ + /* + * Argument for IORING_REGISTER_ZCRX_IFQ + */ +@@ -1082,7 +1113,7 @@ struct io_uring_zcrx_ifq_reg { + + struct io_uring_zcrx_offsets offsets; + __u32 zcrx_id; +- __u32 __resv2; ++ __u32 rx_buf_len; + __u64 __resv[3]; + }; + +diff --git a/src/io_uring.c b/src/io_uring.c +index a479c9570a..04de316513 100644 +--- a/src/io_uring.c ++++ b/src/io_uring.c +@@ -1254,11 +1254,8 @@ print_io_uring_zcrx_ifq_reg(struct tcb *tcp, const kernel_ulong_t addr) + print_io_uring_zcrx_offsets(tcp, &arg.offsets); + tprint_struct_next(); + PRINT_FIELD_U(arg, zcrx_id); +- +- if (arg.__resv2) { +- tprint_struct_next(); +- PRINT_FIELD_X(arg, __resv2); +- } ++ tprint_struct_next(); ++ PRINT_FIELD_U(arg, rx_buf_len); + + if (!IS_ARRAY_ZERO(arg.__resv)) { + tprint_struct_next(); +diff --git a/tests/io_uring_register.c b/tests/io_uring_register.c +index cfaa93d208..9952f0370e 100644 +--- a/tests/io_uring_register.c ++++ b/tests/io_uring_register.c +@@ -2058,7 +2058,7 @@ test_IORING_REGISTER_ZCRX_IFQ(int fd_null) + ", flags=" XLAT_FMT + ", area_ptr=%#llx, region_ptr=%#llx" + ", offsets={head=%u, tail=%u, rqes=%u}" +- ", zcrx_id=%u}, 1) = %s\n", ++ ", zcrx_id=%u, rx_buf_len=0}, 1) = %s\n", + fd_null, path_null, + XLAT_SEL(zcrx_ifq_ops.val, zcrx_ifq_ops.str), + zcrx_ifq->if_idx, zcrx_ifq->if_rxq, zcrx_ifq->rq_entries, +@@ -2073,9 +2073,9 @@ test_IORING_REGISTER_ZCRX_IFQ(int fd_null) + memset(zcrx_ifq, 0, sizeof(*zcrx_ifq)); + zcrx_ifq->if_idx = 0xaaaa; + zcrx_ifq->offsets.__resv2 = 0xbbbb; +- zcrx_ifq->__resv2 = 0xcccc; + zcrx_ifq->offsets.__resv[0] = 0xddddddddddddddddULL; + zcrx_ifq->offsets.__resv[1] = 0xeeeeeeeeeeeeeeeeULL; ++ zcrx_ifq->rx_buf_len = 0xcccc; + zcrx_ifq->__resv[0] = 0x1111111111111111ULL; + zcrx_ifq->__resv[1] = 0x2222222222222222ULL; + zcrx_ifq->__resv[2] = 0x3333333333333333ULL; +@@ -2086,7 +2086,7 @@ test_IORING_REGISTER_ZCRX_IFQ(int fd_null) + ", area_ptr=NULL, region_ptr=NULL" + ", offsets={head=0, tail=0, rqes=0, __resv2=%#x" + ", __resv=[%#llx, %#llx]}" +- ", zcrx_id=0, __resv2=%#x" ++ ", zcrx_id=0, rx_buf_len=%u" + ", __resv=[%#llx, %#llx, %#llx]}, 1) = %s\n", + fd_null, path_null, + XLAT_SEL(zcrx_ifq_ops.val, zcrx_ifq_ops.str), +@@ -2094,7 +2094,7 @@ test_IORING_REGISTER_ZCRX_IFQ(int fd_null) + zcrx_ifq->offsets.__resv2, + (unsigned long long) zcrx_ifq->offsets.__resv[0], + (unsigned long long) zcrx_ifq->offsets.__resv[1], +- zcrx_ifq->__resv2, ++ zcrx_ifq->rx_buf_len, + (unsigned long long) zcrx_ifq->__resv[0], + (unsigned long long) zcrx_ifq->__resv[1], + (unsigned long long) zcrx_ifq->__resv[2], +From 81fb4e6cd8b22acc51b8f7226a60a75825087d7b Mon Sep 17 00:00:00 2001 +From: "Dmitry V. Levin" +Date: Wed, 11 Mar 2026 08:00:00 +0000 +Subject: [PATCH] bundled: update linux/io_uring/query.h to v7.0-rc3 + +* bundled/linux/include/uapi/linux/io_uring/query.h: Update to +headers_install'ed Linux kernel v7.0-rc3. +* src/io_uring.c (print_io_uring_query_zcrx): Follow the rename +of "__resv1" field of struct io_uring_query_zcrx to "features". +* tests/io_uring_register.c (test_IORING_REGISTER_QUERY): Update +expected output. +--- + .../linux/include/uapi/linux/io_uring/query.h | 6 +++++- + src/io_uring.c | 7 ++----- + tests/io_uring_register.c | 16 ++++++++-------- + 3 files changed, 15 insertions(+), 14 deletions(-) + +diff --git a/bundled/linux/include/uapi/linux/io_uring/query.h b/bundled/linux/include/uapi/linux/io_uring/query.h +index 2456e6c5e..95500759c 100644 +--- a/bundled/linux/include/uapi/linux/io_uring/query.h ++++ b/bundled/linux/include/uapi/linux/io_uring/query.h +@@ -1,6 +1,9 @@ + /* SPDX-License-Identifier: (GPL-2.0 WITH Linux-syscall-note) OR MIT */ + /* + * Header file for the io_uring query interface. ++ * ++ * Copyright (C) 2026 Pavel Begunkov ++ * Copyright (C) Meta Platforms, Inc. + */ + #ifndef LINUX_IO_URING_QUERY_H + #define LINUX_IO_URING_QUERY_H +@@ -50,7 +53,8 @@ struct io_uring_query_zcrx { + __u64 area_flags; + /* The number of supported ZCRX_CTRL_* opcodes */ + __u32 nr_ctrl_opcodes; +- __u32 __resv1; ++ /* Bitmask of ZCRX_FEATURE_* indicating which features are available */ ++ __u32 features; + /* The refill ring header size */ + __u32 rq_hdr_size; + /* The alignment for the header */ +diff --git a/src/io_uring.c b/src/io_uring.c +index 04de31651..d6eb63ffe 100644 +--- a/src/io_uring.c ++++ b/src/io_uring.c +@@ -1538,15 +1538,12 @@ print_io_uring_query_zcrx(struct tcb *tcp, const kernel_ulong_t addr) + tprint_struct_next(); + PRINT_FIELD_U(zcrx, nr_ctrl_opcodes); + tprint_struct_next(); ++ PRINT_FIELD_X(zcrx, features); ++ tprint_struct_next(); + PRINT_FIELD_U(zcrx, rq_hdr_size); + tprint_struct_next(); + PRINT_FIELD_U(zcrx, rq_hdr_alignment); + +- if (zcrx.__resv1) { +- tprint_struct_next(); +- PRINT_FIELD_X(zcrx, __resv1); +- } +- + if (zcrx.__resv2) { + tprint_struct_next(); + PRINT_FIELD_X(zcrx, __resv2); +diff --git a/tests/io_uring_register.c b/tests/io_uring_register.c +index 9952f0370..158c714a0 100644 +--- a/tests/io_uring_register.c ++++ b/tests/io_uring_register.c +@@ -2373,8 +2373,8 @@ test_IORING_REGISTER_QUERY(int fd_null) + printf("io_uring_register(%u<%s>, " XLAT_FMT + ", {query_data=%p, query_op=" XLAT_FMT ", size=%u, result=0" + ", query_data={register_flags=" XLAT_FMT ", area_flags=" XLAT_FMT +- ", nr_ctrl_opcodes=%u, rq_hdr_size=%u, rq_hdr_alignment=%u}" +- ", next_entry=NULL}, 0) = %s\n", ++ ", nr_ctrl_opcodes=%u, features=0, rq_hdr_size=%u" ++ ", rq_hdr_alignment=%u}, next_entry=NULL}, 0) = %s\n", + fd_null, path_null, + XLAT_SEL(query_ops.val, query_ops.str), + zcrx_data, +@@ -2490,8 +2490,8 @@ test_IORING_REGISTER_QUERY(int fd_null) + ", sqe_flags=0, nr_query_opcodes=0}, next_entry=" + "{query_data=%p, query_op=" XLAT_FMT ", size=%u, result=0" + ", query_data={register_flags=0, area_flags=0" +- ", nr_ctrl_opcodes=%u, rq_hdr_size=0, rq_hdr_alignment=0}" +- ", next_entry=NULL}}, 0) = %s\n", ++ ", nr_ctrl_opcodes=%u, features=0, rq_hdr_size=0" ++ ", rq_hdr_alignment=0}, next_entry=NULL}}, 0) = %s\n", + fd_null, path_null, + XLAT_SEL(query_ops.val, query_ops.str), + opcode_data2, +@@ -2570,22 +2570,22 @@ test_IORING_REGISTER_QUERY(int fd_null) + hdr->result = 0; + + memset(zcrx_data, 0, sizeof(*zcrx_data)); +- zcrx_data->__resv1 = 0xdeadbeef; ++ zcrx_data->features = 0xdeadbeef; + zcrx_data->__resv2 = 0xcafebabe12345678ULL; + + sys_io_uring_register(fd_null, query_ops.val, hdr, 0); + printf("io_uring_register(%u<%s>, " XLAT_FMT + ", {query_data=%p, query_op=" XLAT_FMT ", size=%u, result=0" + ", query_data={register_flags=0, area_flags=0" +- ", nr_ctrl_opcodes=0, rq_hdr_size=0" +- ", rq_hdr_alignment=0, __resv1=%#x, __resv2=%#llx}" ++ ", nr_ctrl_opcodes=0, features=%#x, rq_hdr_size=0" ++ ", rq_hdr_alignment=0, __resv2=%#llx}" + ", next_entry=NULL}, 0) = %s\n", + fd_null, path_null, + XLAT_SEL(query_ops.val, query_ops.str), + zcrx_data, + XLAT_ARGS(IO_URING_QUERY_ZCRX), + (unsigned int) sizeof(*zcrx_data), +- zcrx_data->__resv1, ++ zcrx_data->features, + (unsigned long long) zcrx_data->__resv2, + errstr); + diff --git a/recipes/incoming-clib/lsof.toml b/recipes/lsof.toml similarity index 100% rename from recipes/incoming-clib/lsof.toml rename to recipes/lsof.toml diff --git a/recipes/incoming-clib/mandoc.toml b/recipes/mandoc.toml similarity index 100% rename from recipes/incoming-clib/mandoc.toml rename to recipes/mandoc.toml diff --git a/recipes/nlattr-fix.patch b/recipes/nlattr-fix.patch new file mode 100644 index 00000000..6d480fab --- /dev/null +++ b/recipes/nlattr-fix.patch @@ -0,0 +1,21 @@ +--- strace-4.18/tests/nlattr.c.old 2017-07-05 07:08:09.000000000 +0000 ++++ strace-4.18/tests/nlattr.c 2017-08-17 00:25:26.734218699 +0000 +@@ -61,7 +61,7 @@ + }; + struct msg *msg; + struct nlattr *nla; +- unsigned int msg_len; ++ uint32_t msg_len; + long rc; + + /* fetch fail: len < sizeof(struct nlattr) */ +@@ -259,7 +259,7 @@ + }; + struct msg *msg; + struct nlattr *nla; +- unsigned int msg_len; ++ uint32_t msg_len; + long rc; + + msg_len = NLMSG_SPACE(sizeof(msg->udm)) + sizeof(*nla); + diff --git a/recipes/off64.patch b/recipes/off64.patch new file mode 100644 index 00000000..9ac41c35 --- /dev/null +++ b/recipes/off64.patch @@ -0,0 +1,39 @@ +off_t is always 64-bit with musl + +--- a/tests/readahead.c ++++ b/tests/readahead.c +@@ -42,7 +42,7 @@ static const int fds[] = { + 0x7fffffff, + }; + +-static const off64_t offsets[] = { ++static const off_t offsets[] = { + -0x8000000000000000LL, + -0x5060708090a0b0c0LL, + -1LL, +--- a/tests/sync_file_range.c ++++ b/tests/sync_file_range.c +@@ -20,8 +20,8 @@ int + main(void) + { + const int fd = -1; +- const off64_t offset = 0xdeadbeefbadc0dedULL; +- const off64_t nbytes = 0xfacefeedcafef00dULL; ++ const off_t offset = 0xdeadbeefbadc0dedULL; ++ const off_t nbytes = 0xfacefeedcafef00dULL; + const unsigned int flags = -1; + + int rc = sync_file_range(fd, offset, nbytes, flags); +--- a/tests/sync_file_range2.c ++++ b/tests/sync_file_range2.c +@@ -20,8 +20,8 @@ int + main(void) + { + const int fd = -1; +- const off64_t offset = 0xdeadbeefbadc0ded; +- const off64_t nbytes = 0xfacefeedcafef00d; ++ const off_t offset = 0xdeadbeefbadc0ded; ++ const off_t nbytes = 0xfacefeedcafef00d; + const unsigned int flags = -1; + + int rc = sync_file_range(fd, offset, nbytes, flags); diff --git a/recipes/outdated-warn-disable.patch b/recipes/outdated-warn-disable.patch new file mode 100644 index 00000000..6c58d841 --- /dev/null +++ b/recipes/outdated-warn-disable.patch @@ -0,0 +1,17 @@ +On Alpine, apropos(1) is available in a separate subpackages and not +installed by default. For this reason, having this warning enabled by +default does not make much sense since we don't use mandoc.db by +default. + +diff -upr a/main.c b/main.c +--- a/main.c 2021-09-19 18:21:40.000000000 +0200 ++++ b/main.c 2021-09-19 19:40:28.711594083 +0200 +@@ -822,8 +822,6 @@ fs_lookup(const struct manpaths *paths, + return globres; + + found: +- warnx("outdated mandoc.db lacks %s(%s) entry, run %s %s", +- name, sec, BINM_MAKEWHATIS, paths->paths[ipath]); + if (res == NULL) + free(file); + else if (file == NULL) diff --git a/recipes/incoming-clib/pciutils.toml b/recipes/pciutils.toml similarity index 100% rename from recipes/incoming-clib/pciutils.toml rename to recipes/pciutils.toml diff --git a/recipes/incoming-clib/procps-ng.toml b/recipes/procps-ng.toml similarity index 100% rename from recipes/incoming-clib/procps-ng.toml rename to recipes/procps-ng.toml diff --git a/recipes/incoming-clib/shadow.toml b/recipes/shadow.toml similarity index 100% rename from recipes/incoming-clib/shadow.toml rename to recipes/shadow.toml diff --git a/recipes/incoming-clib/strace.toml b/recipes/strace.toml similarity index 100% rename from recipes/incoming-clib/strace.toml rename to recipes/strace.toml diff --git a/recipes/tv_usec.patch b/recipes/tv_usec.patch new file mode 100644 index 00000000..51b30730 --- /dev/null +++ b/recipes/tv_usec.patch @@ -0,0 +1,46 @@ +Fix types on 32-bit + +--- a/tests/futimesat.c ++++ b/tests/futimesat.c +@@ -100,7 +100,7 @@ main(void) + tv[0].tv_sec = 0xdeadbeefU; + tv[0].tv_usec = 0xfacefeedU; + tv[1].tv_sec = (typeof(tv[1].tv_sec)) 0xcafef00ddeadbeefLL; +- tv[1].tv_usec = (suseconds_t) 0xbadc0dedfacefeedLL; ++ tv[1].tv_usec = (typeof(tv[1].tv_usec)) 0xbadc0dedfacefeedLL; + + k_futimesat(kfdcwd, kfname, (uintptr_t) tv); + printf("futimesat(AT_FDCWD, %s, [", qname); +--- a/tests/xettimeofday.c ++++ b/tests/xettimeofday.c +@@ -58,7 +58,7 @@ main(void) + tz->tz_minuteswest, tz->tz_dsttime, sprintrc(-1)); + + tv->tv_sec = (typeof(tv->tv_sec)) 0xcafef00ddeadbeefLL; +- tv->tv_usec = (suseconds_t) 0xbadc0dedfacefeedLL; ++ tv->tv_usec = (typeof(tv->tv_usec)) 0xbadc0dedfacefeedLL; + assert(syscall(__NR_settimeofday, tv, tz) == -1); + printf("settimeofday({tv_sec=%lld, tv_usec=%llu}" + ", {tz_minuteswest=%d, tz_dsttime=%d}) = %s\n", +--- a/tests/xselect.c ++++ b/tests/xselect.c +@@ -214,7 +214,7 @@ main(void) + */ + *l_rs = (1UL << fds[0]) | (1UL << fds[1]); + tv_in.tv_sec = (typeof(tv_in.tv_sec)) 0xcafef00ddeadbeefLL; +- tv_in.tv_usec = (suseconds_t) 0xbadc0dedfacefeedLL; ++ tv_in.tv_usec = (typeof(tv_in.tv_usec)) 0xbadc0dedfacefeedLL; + memcpy(tv, &tv_in, sizeof(tv_in)); + rc = xselect(nfds, a_rs, a_rs, a_rs, a_tv); + if (rc < 0) { +--- a/tests/xutimes.c ++++ b/tests/xutimes.c +@@ -87,7 +87,7 @@ main(void) + tv[0].tv_sec = 0xdeadbeefU; + tv[0].tv_usec = 0xfacefeedU; + tv[1].tv_sec = (typeof(tv[1].tv_sec)) 0xcafef00ddeadbeefLL; +- tv[1].tv_usec = (suseconds_t) 0xbadc0dedfacefeedLL; ++ tv[1].tv_usec = (typeof(tv[1].tv_usec)) 0xbadc0dedfacefeedLL; + + k_utimes(kfname, (uintptr_t) tv); + printf("%s(%s, [", TEST_SYSCALL_STR, qname); diff --git a/recipes/useradd-defaults.patch b/recipes/useradd-defaults.patch new file mode 100644 index 00000000..e10610c6 --- /dev/null +++ b/recipes/useradd-defaults.patch @@ -0,0 +1,24 @@ +From: Jakub Jirutka +Date: Sun, 19 Dec 2021 21:50:00 +0100 +Subject: [PATCH] Change some useradd defaults + +--- a/src/useradd.c ++++ b/src/useradd.c +@@ -87,14 +87,14 @@ + /* + * These defaults are used if there is no defaults file. + */ +-static gid_t def_group = 1000; ++static gid_t def_group = 100; + static const char *def_groups = ""; + static const char *def_gname = "other"; + static const char *def_home = "/home"; +-static const char *def_shell = "/bin/bash"; ++static const char *def_shell = "/bin/ash"; + static const char *def_template = SKEL_DIR; + static const char *def_usrtemplate = USRSKELDIR; +-static const char *def_create_mail_spool = "yes"; ++static const char *def_create_mail_spool = "no"; + static const char *def_log_init = "yes"; + + static long def_inactive = -1; diff --git a/tandas/base-system-2.txt b/tandas/base-system-2.txt new file mode 100644 index 00000000..ed898ed1 --- /dev/null +++ b/tandas/base-system-2.txt @@ -0,0 +1,10 @@ +# base-system-2 — tier 2 del userland foundational (2026-07-10). Mismo patrón de de-Alpinización. +shadow +kbd +procps-ng +gnupg +pciutils +usbutils +lsof +strace +mandoc