[Debian-med-packaging] Bug#953675: clearcut fails on armhf with glibc 2.31 and linux 4.15 (bad errno handling)
Steve Langasek
steve.langasek at canonical.com
Thu Mar 12 06:37:48 GMT 2020
Package: clearcut
Version: 1.0.9-4
Severity: important
Tags: patch
User: ubuntu-devel at lists.ubuntu.com
Usertags: origin-ubuntu focal ubuntu-patch
Dear maintainers,
When introducing glibc 2.31 in Ubuntu, the clearcut autopkgtest showed a
regression on armhf:
[...]
autopkgtest [03:03:16]: test run-unit-test: [-----------------------
Clearcut: Distance value out-of-range.
Clearcut: Syntax error in distance matrix at offset 23.
autopkgtest [03:03:18]: test run-unit-test: -----------------------]
autopkgtest [03:03:20]: test run-unit-test: - - - - - - - - - - results - - - -
- - - - - -
run-unit-test FAIL non-zero exit status 253
[...]
(https://objectstorage.prodstack4-5.canonical.com/v1/AUTH_77e2ada1e7a84929a74ba3b87153c0ac/autopkgtest-focal/focal/armhf/c/clearcut/20200312_030404_e5698@/log.gz)
I've isolated this to a bug in clearcut itself, which is not handling errno
properly when using it to check for errors from atof() (which is not
standard anyway). Since glibc 2.31 is opportunistically using a newer
syscall on armhf that's not present in Linux 4.15, errno winds up set to
ENOSYS due to an earlier function call, and clearcut fails to correctly
clear this prior to calling atof(), which has zero guarantee of resetting it
on success.
The attached patch fixes clearcut so that it will work more correctly in any
situation where this occurs, including on armhf with glibc 2.31 and Linux
4.15.
Thanks for considering,
--
Steve Langasek Give me a lever long enough and a Free OS
Debian Developer to set it on, and I can move the world.
Ubuntu Developer https://www.debian.org/
slangasek at ubuntu.com vorlon at debian.org
-------------- next part --------------
diff -Nru clearcut-1.0.9/debian/patches/clear-errno-before-checking.patch clearcut-1.0.9/debian/patches/clear-errno-before-checking.patch
--- clearcut-1.0.9/debian/patches/clear-errno-before-checking.patch 1969-12-31 16:00:00.000000000 -0800
+++ clearcut-1.0.9/debian/patches/clear-errno-before-checking.patch 2020-03-11 23:25:04.000000000 -0700
@@ -0,0 +1,26 @@
+Description: clear errno before using it to check failure from atof()
+ The atof() function is not guaranteed to clear errno on success, so if
+ any earlier errors have been set prior to calling atof(), these will
+ result in a spurious failure. On armhf, glibc 2.31 now opportunistically
+ calls a new syscall that may not be supported on older kernels (Linux 4.15),
+ resulting in errno == ENOSYS:
+ .
+ syscall_0x193(0x5, 0xffb2b650, 0xf77b7000, 0, 0x5, 0xffb2b650) = -1 ENOSYS (Function not implemented)
+ .
+ Therefore we should clear errno before calling atof() to make sure any
+ errors actually originate from this function.
+Author: Steve Langasek <steve.langasek at ubuntu.com>
+Last-Update: 2020-03-11
+
+Index: clearcut-1.0.9/dmat.c
+===================================================================
+--- clearcut-1.0.9.orig/dmat.c
++++ clearcut-1.0.9/dmat.c
+@@ -570,6 +570,7 @@
+ goto XIT_BAD;
+ }
+
++ errno = 0;
+ val = atof(token->buf);
+ if(errno) {
+ fprintf(stderr, "Clearcut: Distance value out-of-range.\n");
diff -Nru clearcut-1.0.9/debian/patches/series clearcut-1.0.9/debian/patches/series
--- clearcut-1.0.9/debian/patches/series 2019-03-28 22:16:52.000000000 -0700
+++ clearcut-1.0.9/debian/patches/series 2020-03-11 23:21:27.000000000 -0700
@@ -1,2 +1,3 @@
mothur_trivial_patch
hardening.patch
+clear-errno-before-checking.patch
More information about the Debian-med-packaging
mailing list