From: Hemanth Kumar M D <[email protected]> Following ptests were failing on aarch64 after glibc 2.43 upgrade: - printf_understands_%s_'"x'_"'y"_"'zTAIL" - printf_handles_positive_numbers_for_%f
Backport fix from Debian bug #1128825. References: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1128825 Signed-off-by: Hemanth Kumar M D <[email protected]> --- ...printf-ptest-failure-with-glibc-2.43.patch | 114 ++++++++++++++++++ meta/recipes-core/busybox/busybox_1.37.0.bb | 1 + 2 files changed, 115 insertions(+) create mode 100644 meta/recipes-core/busybox/busybox/0001-busybox-fix-printf-ptest-failure-with-glibc-2.43.patch diff --git a/meta/recipes-core/busybox/busybox/0001-busybox-fix-printf-ptest-failure-with-glibc-2.43.patch b/meta/recipes-core/busybox/busybox/0001-busybox-fix-printf-ptest-failure-with-glibc-2.43.patch new file mode 100644 index 0000000000..951812532b --- /dev/null +++ b/meta/recipes-core/busybox/busybox/0001-busybox-fix-printf-ptest-failure-with-glibc-2.43.patch @@ -0,0 +1,114 @@ +busybox: fix printf ptest failure with glibc 2.43 + +Following ptests were failing on aarch64 after glibc 2.43 upgrade: + - printf_understands_%s_'"x'_"'y"_"'zTAIL" + - printf_handles_positive_numbers_for_%f + +Backport fix from Debian bug #1128825. + +Upstream-Status: Submitted [https://bugs.debian.org/cgi-bin/bugreport.cgi?att=1;bug=1128825;filename=busybox_glibc-2.43_thp.patch;msg=10] + +Signed-off-by: Hemanth Kumar M D <[email protected]> + +diff --git a/coreutils/printf.c b/coreutils/printf.c +index 3cd48cfcc..a5d995ab5 100644 +--- a/coreutils/printf.c ++++ b/coreutils/printf.c +@@ -191,6 +191,7 @@ static void print_direc(char *format, unsigned fmt_length, + double dv; + char saved; + char *have_prec, *have_width; ++ int saved_errno, ret; + + saved = format[fmt_length]; + format[fmt_length] = '\0'; +@@ -205,22 +206,32 @@ static void print_direc(char *format, unsigned fmt_length, + + switch (format[fmt_length - 1]) { + case 'c': +- printf(format, *argument); ++ saved_errno = errno; ++ ret = printf(format, *argument); ++ /* Restore errno if there was no error */ ++ if (ret >= 0) { ++ errno = saved_errno; ++ } + break; + case 'd': + case 'i': + llv = my_xstrtoll(skip_whitespace(argument)); + print_long: ++ saved_errno = errno; + if (!have_width) { + if (!have_prec) +- printf(format, llv); ++ ret = printf(format, llv); + else +- printf(format, precision, llv); ++ ret = printf(format, precision, llv); + } else { + if (!have_prec) +- printf(format, field_width, llv); ++ ret = printf(format, field_width, llv); + else +- printf(format, field_width, precision, llv); ++ ret = printf(format, field_width, precision, llv); ++ } ++ /* Restore errno if there was no error */ ++ if (ret >= 0) { ++ errno = saved_errno; + } + break; + case 'o': +@@ -238,16 +249,21 @@ static void print_direc(char *format, unsigned fmt_length, + } else { + /* Hope compiler will optimize it out by moving call + * instruction after the ifs... */ ++ saved_errno = errno; + if (!have_width) { + if (!have_prec) +- printf(format, argument, /*unused:*/ argument, argument); ++ ret = printf(format, argument, /*unused:*/ argument, argument); + else +- printf(format, precision, argument, /*unused:*/ argument); ++ ret = printf(format, precision, argument, /*unused:*/ argument); + } else { + if (!have_prec) +- printf(format, field_width, argument, /*unused:*/ argument); ++ ret = printf(format, field_width, argument, /*unused:*/ argument); + else +- printf(format, field_width, precision, argument); ++ ret = printf(format, field_width, precision, argument); ++ } ++ /* Restore errno if there was no error */ ++ if (ret >= 0) { ++ errno = saved_errno; + } + break; + } +@@ -257,16 +273,21 @@ static void print_direc(char *format, unsigned fmt_length, + case 'g': + case 'G': + dv = my_xstrtod(argument); ++ saved_errno = errno; + if (!have_width) { + if (!have_prec) +- printf(format, dv); ++ ret = printf(format, dv); + else +- printf(format, precision, dv); ++ ret = printf(format, precision, dv); + } else { + if (!have_prec) +- printf(format, field_width, dv); ++ ret = printf(format, field_width, dv); + else +- printf(format, field_width, precision, dv); ++ ret = printf(format, field_width, precision, dv); ++ } ++ /* Restore errno if there was no error */ ++ if (ret >= 0) { ++ errno = saved_errno; + } + break; + } /* switch */ diff --git a/meta/recipes-core/busybox/busybox_1.37.0.bb b/meta/recipes-core/busybox/busybox_1.37.0.bb index d3851a27b9..2a38372339 100644 --- a/meta/recipes-core/busybox/busybox_1.37.0.bb +++ b/meta/recipes-core/busybox/busybox_1.37.0.bb @@ -59,6 +59,7 @@ SRC_URI = "https://busybox.net/downloads/busybox-${PV}.tar.bz2;name=tarball \ file://CVE-2025-46394-01.patch \ file://CVE-2025-46394-02.patch \ file://CVE-2025-60876.patch \ + file://0001-busybox-fix-printf-ptest-failure-with-glibc-2.43.patch \ " SRC_URI:append:libc-musl = " file://musl.cfg" SRC_URI:append:x86-64 = " file://sha_accel.cfg" -- 2.49.0
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#232994): https://lists.openembedded.org/g/openembedded-core/message/232994 Mute This Topic: https://lists.openembedded.org/mt/118281850/21656 Group Owner: [email protected] Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
