Package: mlucas
Version: 20.1.1-1
Severity: serious
Tags: patch
User: ubuntu-de...@lists.ubuntu.com
Usertags: origin-ubuntu kinetic ubuntu-patch

Hi Alex,

The new version of mlucas in unstable is failing to build on arm*
architectures where it previously built, because upstream has introduced
some wrong architecture-specific cpu-checking code:

[...]
make  check-TESTS
make[2]: Entering directory '/<<PKGBUILDDIR>>'

    Mlucas 20.1.1

    http://www.mersenneforum.org/mayer/README.html

System total RAM = 11954, free RAM = 8417
ERROR: at line 1913 of file upstream/src/util.c
Assertion failed: /proc/cpuinfo file not found!
[...]

  
(https://buildd.debian.org/status/fetch.php?pkg=mlucas&arch=arm64&ver=20.1.1-1&stamp=1641070740&raw=0)

The problem is that upstream/src/util.c is calling mlucas_fopen(), which
mangles the argument to prefix it with $HOME/.mlucas.d/.

So first of all, '$HOME' should never appear in the argument to the openat()
syscall; this fopen wrapper function is failing to do variable interpolation
for the home directory.

And secondly, /proc/cpuinfo should never be relative to the mlucas directory
- this is a system path.

I've uploaded the attached patch to Ubuntu, fixing the build regression
there.  Please consider including in Debian as well.

Thanks,
-- 
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/
slanga...@ubuntu.com                                     vor...@debian.org
diff -Nru mlucas-20.1.1/debian/patches/fopen-on-arm.patch 
mlucas-20.1.1/debian/patches/fopen-on-arm.patch
--- mlucas-20.1.1/debian/patches/fopen-on-arm.patch     1969-12-31 
16:00:00.000000000 -0800
+++ mlucas-20.1.1/debian/patches/fopen-on-arm.patch     2022-07-07 
09:40:44.000000000 -0700
@@ -0,0 +1,22 @@
+Description: don't use mlucas_fopen() for system files
+ mlucas_fopen() is a wrapper around fopen() that rewrites the path in
+ various cases.  It is not an appropriate interface for opening system
+ files like /proc/cpuinfo, and causes the mlucas binary to be completely
+ broken on ARM architectures.
+Author: Steve Langasek <steve.langa...@ubuntu.com>
+Forwarded: no
+Last-Update: 2022-07-07
+
+Index: mlucas-20.1.1/upstream/src/util.c
+===================================================================
+--- mlucas-20.1.1.orig/upstream/src/util.c
++++ mlucas-20.1.1/upstream/src/util.c
+@@ -1909,7 +1909,7 @@
+       int has_asimd(void)
+       {
+               char in_line[STR_MAX_LEN];
+-              FILE*fp = mlucas_fopen("/proc/cpuinfo", "r");
++              FILE*fp = fopen("/proc/cpuinfo", "r");
+               ASSERT(HERE, fp != 0x0, "/proc/cpuinfo file not found!");
+               while(fgets(in_line, STR_MAX_LEN, fp) != 0x0) {
+                       if(strstr(in_line, "asimd") != 0)
diff -Nru mlucas-20.1.1/debian/patches/series 
mlucas-20.1.1/debian/patches/series
--- mlucas-20.1.1/debian/patches/series 1969-12-31 16:00:00.000000000 -0800
+++ mlucas-20.1.1/debian/patches/series 2022-07-07 09:39:00.000000000 -0700
@@ -0,0 +1 @@
+fopen-on-arm.patch

Reply via email to