Control: tags 995393 + pending
Control: tags 1001961 + pending

Dear maintainer,

to fix the two pressing problems for this package, I've prepared an NMU
for fakeroot (versioned as 1.26-1.1), upload it to DELAYED/3 will follow
shortly. Please feel free to tell me if I should delay it longer.

Regards.

    Christoph

diff -Nru fakeroot-1.26/debian/changelog fakeroot-1.26/debian/changelog
--- fakeroot-1.26/debian/changelog      2021-09-07 03:41:37.000000000 +0200
+++ fakeroot-1.26/debian/changelog      2021-12-23 08:19:30.000000000 +0100
@@ -1,3 +1,11 @@
+fakeroot (1.26-1.1) unstable; urgency=high
+
+  * Non-maintainer upload
+  * Also wrap the "stat" library call. Closes: #1001961
+  * Work around segfault on ppc64el. Closes: #995393
+
+ -- Christoph Biedl <debian.a...@manchmal.in-ulm.de>  Thu, 23 Dec 2021 
08:19:30 +0100
+
 fakeroot (1.26-1) unstable; urgency=medium
 
   [ Helmut Grohne ]
diff -Nru fakeroot-1.26/debian/patches/also-wrap-stat-library-call.patch 
fakeroot-1.26/debian/patches/also-wrap-stat-library-call.patch
--- fakeroot-1.26/debian/patches/also-wrap-stat-library-call.patch      
1970-01-01 01:00:00.000000000 +0100
+++ fakeroot-1.26/debian/patches/also-wrap-stat-library-call.patch      
2021-12-23 08:17:43.000000000 +0100
@@ -0,0 +1,63 @@
+Subject: Also wrap the "stat" library call
+Author: Christoph Biedl <debian.a...@manchmal.in-ulm.de>
+Date: 2021-12-20
+Bug-Debian: https://bugs.debian.org/1001961
+Forwarded: Yes
+
+    Seems changes in glibc 2.33 caused the stat() function to be mapped
+    into a stat() library call instead of __xstat() as it used to be.
+
+    However, fakeroot does not wrap this, causing files to be reported
+    with the real owner, not 0 as expected.
+
+    The fix for this got a bit ugly as the abstraction in configure.ac
+    would not allow wrapping both "stat" and "__xstat". So enhance the
+    search list capabilities with an optional symbol how the wrapped
+    function is named internally. Also hack the parser so "stat" gets
+    actually probed and not mistaken for __xstat.
+
+    Using "realstat" as a symbol is not the best choice as it might be
+    confusing, but "statstat" seemed even worse.
+
+--- a/configure.ac
++++ b/configure.ac
+@@ -353,9 +353,13 @@
+ 
+ :>fakerootconfig.h.tmp
+ 
+-for SEARCH in %stat f%stat l%stat f%statat %stat64 f%stat64 l%stat64 
f%statat64 %mknod %mknodat; do
+-  FUNC=`echo $SEARCH|sed -e 's/.*%//'`
++for SEARCH in %stat s%tat@realstat f%stat l%stat f%statat %stat64 f%stat64 
l%stat64 f%statat64 %mknod %mknodat; do
++  FUNC=`echo $SEARCH|sed -e 's/.*%// ; s/@.*//'`
+   PRE=`echo $SEARCH|sed -e 's/%.*//'`
++  SYMBOL=`echo $SEARCH|sed -e 's/.*@//'`
++  if test "$SYMBOL" = "$SEARCH" ; then
++    SYMBOL="${PRE}${FUNC}"
++  fi
+   FOUND=
+   for WRAPPED in __${PRE}x${FUNC} _${PRE}x${FUNC} __${PRE}${FUNC}13 
${PRE}${FUNC}; do
+     AC_CHECK_FUNCS($WRAPPED,FOUND=$WRAPPED)
+@@ -366,8 +370,8 @@
+ dnl  for WRAPPED in _${PRE}${FUNC}; do
+ dnl    FOUND=$WRAPPED
+     if test -n "$FOUND"; then
+-      PF=[`echo ${PRE}${FUNC}| tr '[a-z]' '[A-Z]'`]
+-      DEFINE_WRAP=[`echo wrap_${PRE}${FUNC}| tr '[a-z]' '[A-Z]'`]
++      PF=[`echo $SYMBOL | tr '[a-z]' '[A-Z]'`]
++      DEFINE_WRAP=[`echo wrap_${SYMBOL}| tr '[a-z]' '[A-Z]'`]
+       DEFINE_NEXT=[`echo wrap_${FOUND}| tr '[a-z]' '[A-Z]'`]
+       DEFINE_ARG=[`echo wrap_${FOUND}| tr '[a-z]' '[A-Z]'`]
+       AC_DEFINE_UNQUOTED(WRAP_${PF}, $FOUND)
+@@ -509,6 +513,12 @@
+ #define TMP_STAT  __astat
+ #define NEXT_STAT_NOARG  next___astat
+ 
++#define WRAP_REALSTAT  __astat
++#define WRAP_REALSTAT_QUOTE  __astat
++#define WRAP_REALSTAT_RAW  __astat
++#define TMP_REALSTAT  __astat
++#define NEXT_REALSTAT_NOARG  next___astat
++
+ #define WRAP_LSTAT_QUOTE  __astat
+ #define WRAP_LSTAT  __astat
+ #define WRAP_LSTAT_RAW  __astat
diff -Nru fakeroot-1.26/debian/patches/ppc64el-workaround.patch 
fakeroot-1.26/debian/patches/ppc64el-workaround.patch
--- fakeroot-1.26/debian/patches/ppc64el-workaround.patch       1970-01-01 
01:00:00.000000000 +0100
+++ fakeroot-1.26/debian/patches/ppc64el-workaround.patch       2021-12-23 
08:18:30.000000000 +0100
@@ -0,0 +1,31 @@
+Subject: Work around segfault on ppc64el
+Author: Christoph Biedl <debian.a...@manchmal.in-ulm.de>
+Date: 2021-12-20
+Bug-Debian: https://bugs.debian.org/995393
+Forwarded: Yes
+
+    For whatever reason the generated code segfaults on ppc64el when
+    built with the usual optimizations. The root cause is not clear,
+    might be a compiler bug or the result of improperly generated
+    function prototypes.
+
+    As a workaround, disable optimizations for the affected function.
+
+    This should be re-visted upon any major compiler release whether
+    it's still needed.
+
+--- a/libfakeroot.c
++++ b/libfakeroot.c
+@@ -2596,7 +2596,11 @@
+ #endif
+ 
+ #ifdef HAVE_OPENAT
+-int openat(int dir_fd, const char *pathname, int flags, ...)
++int
++#if HAVE_OPENAT && defined(__powerpc__) && defined(__powerpc64__) && 
__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
++__attribute__((optimize("O0")))
++#endif
++openat(int dir_fd, const char *pathname, int flags, ...)
+ {
+       mode_t mode;
+ 
diff -Nru fakeroot-1.26/debian/patches/series 
fakeroot-1.26/debian/patches/series
--- fakeroot-1.26/debian/patches/series 2021-09-07 03:41:37.000000000 +0200
+++ fakeroot-1.26/debian/patches/series 2021-12-23 08:18:30.000000000 +0100
@@ -1 +1,3 @@
 fix-shell-in-fakeroot
+also-wrap-stat-library-call.patch
+ppc64el-workaround.patch

Attachment: signature.asc
Description: PGP signature

Reply via email to