termux-packages icon indicating copy to clipboard operation
termux-packages copied to clipboard

[Bug]: cksum in coreutils fails with write error

Open fancsali opened this issue 2 years ago • 4 comments

Problem description

Calling cksum from the coreutils package seems to try to call write() twice emitting the expected output but then also an error message and a non 0 return code.

What steps will reproduce the bug?

Pipe any file to cksum:

touch foo
$ cksum < foo
4294967295 0
cksum: write error: Bad address
$ echo $?
1

What is the expected behavior?

The call should only return the sum and the file size and no error message/code:

touch foo
$ cksum < foo
4294967295 0

Further information

Calling the busybox version of the tool works fine:

busybox cksum < foo
4294967295 0

Also, the version numbers of the packages in question:

$ apt list | egrep 'coreutils|busybox'

busybox/stable,now 1.35.0-2 arm [installed]
coreutils/stable,now 9.1 arm [installed]

System information

termux-info:

Termux Variables:
unsupported
Packages CPU architecture:
arm
Subscribed repositories:
# sources.list
deb https://packages.termux.dev/apt/termux-main stable main
Updatable packages:
All packages up to date
termux-tools version:
1.29.2
Android version:
9
Kernel build information:
Linux localhost 4.19.122-09121-gd58e3f311e19 #1 SMP PREEMPT Wed Aug 19 00:35:31 PDT 2020 armv7l Android
Device manufacturer:
Google
Device model:
ASUS Chromebook Flip C100PA

fancsali avatar Sep 13 '22 13:09 fancsali

I can reproduce it on arm/i686, but not on aarch64/x86_64.

licy183 avatar Sep 13 '22 14:09 licy183

I can reproduce it on arm/i686, but not on aarch64/x86_64.

Had a look myself, and sounds about right.

  • On my newer 64-bit ARM Android phone, it's working fine
  • On the older 32-bit ARM Chromebook it's buggy

Haven't had a chance to try it on architectures other than ARM, though.

fancsali avatar Sep 13 '22 14:09 fancsali

I believe this has the same root cause as #9056 (which is in fact not resolved but just worked around), suspecting a bug in Gnulib.

xtkoba avatar Sep 14 '22 01:09 xtkoba

I believe this has the same root cause as #9056 (which is in fact not resolved but just worked around), suspecting a bug in Gnulib.

Not sure what that means in this context: so how do we mitigate this?

fancsali avatar Sep 14 '22 11:09 fancsali

I think I have finally found the bug in Gnulib:

--- a/lib/stdio-impl.h
+++ b/lib/stdio-impl.h
@@ -68,8 +68,10 @@
 # elif defined __ANDROID__ /* Android */
 #  ifdef __LP64__
 #   define _gl_flags_file_t int
+#   define _gl_struct_file_off_t int64_t
 #  else
 #   define _gl_flags_file_t short
+#   define _gl_struct_file_off_t __kernel_off_t
 #  endif
   /* Up to this commit from 2015-10-12
      <https://android.googlesource.com/platform/bionic.git/+/f0141dfab10a4b332769d52fa76631a64741297a>
@@ -96,7 +98,7 @@
                          unsigned char _nbuf[1]; \
                          struct { unsigned char *_base; size_t _size; } _lb; \
                          int _blksize; \
-                         fpos_t _offset; \
+                         _gl_struct_file_off_t _offset; \
                          /* More fields, not relevant here.  */ \
                        } *) fp)
 # else

xtkoba avatar Sep 28 '22 10:09 xtkoba

@xtkoba thanks for investigating and fixing the core issue! Do you want to report it to the gnulib developers? Otherwise I can do it, would be nice to get the fix upstream

Grimler91 avatar Sep 28 '22 16:09 Grimler91