version 1.5, 2018/07/23 21:25:42
|
version 1.11, 2018/07/31 22:22:28
|
Line 4 Here a list of possible problems of NetB
|
Line 4 Here a list of possible problems of NetB
|
investigation in order to write proper PR or better yet to fix them! |
investigation in order to write proper PR or better yet to fix them! |
|
|
|
|
## `mpv` and NetBSD crashes |
## `mpv` SIGSEGVs (strnlen(s, (size_t)-1) always returns -1) |
Just by invoking `mpv` via: |
Just by invoking `mpv` via: |
|
|
$ mpv |
% mpv |
|
|
It is possible to completely crash NetBSD on aarch64. Investigate why and if |
It SEGV as follows: |
possible get a complete backtrace. |
|
|
|
(Is it PaX MPROTECT related?) |
|
|
|
|
% mpv |
|
/usr/pkg/lib/ffmpeg4/libavcodec.so.58: text relocations |
|
mpv 0.29.0 Copyright © 2000-2018 mpv/MPlayer/mplayer2 projects |
|
built on Sat Jul 28 21:02:57 CEST 2018 |
|
ffmpeg library versions: |
|
libavutil 56.14.100 |
|
libavcodec 58.18.100 |
|
libavformat 58.12.100 |
|
libswscale 5.1.100 |
|
libavfilter 7.16.100 |
|
libswresample 3.1.100 |
|
ffmpeg version: 4.0.2 |
|
|
|
Usage: mpv [options] [url|path/]filename |
|
|
|
Basic options: |
|
--start=<time> seek to given (percent, seconds, or hh:mm:ss) position |
|
--no-audio do not play sound |
|
--no-video do not play video |
|
--fs fullscreen playback |
|
--sub-file=<file> specify subtitle file to use |
|
--playlist=<file> specify playlist file |
|
|
|
--list-options list all mpv options |
|
--h=<string> print options which contain the given string in their name |
|
|
|
[1] Segmentation fault (core dumped) /usr/pkg/bin/mpv... |
|
% gdb -core mpv.core /usr/pkg/bin/mpv |
|
Reading symbols from /usr/pkg/bin/mpv...done. |
|
[New process 5] |
|
[New process 6] |
|
[New process 4] |
|
[New process 3] |
|
[New process 2] |
|
[New process 1] |
|
Core was generated by `mpv'. |
|
Program terminated with signal SIGSEGV, Segmentation fault. |
|
#0 0x0000f96f727f40b0 in memcpy () from /usr/lib/libc.so.12 |
|
[Current thread is 1 (process 5)] |
|
(gdb) bt |
|
#0 0x0000f96f727f40b0 in memcpy () from /usr/lib/libc.so.12 |
|
#1 0x00000002001cba34 in __memcpy_ichk (len=18446744073709551615, src=0xf96f6e10fec0, dst=<optimized out>) |
|
at /usr/include/ssp/string.h:82 |
|
#2 strndup_append_at (str=str@entry=0xf96f6f4ff348, at=0, append=0xf96f6e10fec0 "speed", append_len=<optimized out>, |
|
append_len@entry=18446744073709551615) at ../ta/ta_utils.c:113 |
|
#3 0x00000002001cbea4 in ta_strdup_append_buffer (str=str@entry=0xf96f6f4ff348, a=<optimized out>) at ../ta/ta_utils.c:165 |
|
#4 0x00000002001cb7b8 in ta_talloc_strdup_append_buffer (s=<optimized out>, s@entry=0x0, a=<optimized out>) at ../ta/ta_talloc.c:31 |
|
#5 0x0000000200157eec in print_str_list (opt=<optimized out>, src=<optimized out>) at ../options/m_option.c:1477 |
|
[...] |
|
|
|
This happens because `strnlen(s, (size_t)-1)`, always returns -1, e.g.: |
|
|
|
% cat strnlen_size_max.c |
|
#include <stdio.h> |
|
#include <string.h> |
|
|
|
|
|
int |
|
main(int argc, char *argv[]) |
|
{ |
|
int i; |
|
for (i = 1; i < argc; i++) { |
|
printf("strnlen(\"%s\", (size_t)-1) -> %ld\n", |
|
argv[i], strnlen(argv[i], ~(size_t)0)); |
|
} |
|
|
|
return 0; |
|
} |
|
% gcc -Wall strnlen_size_max.c |
|
% ./a.out foo |
|
strnlen("foo", (size_t)-1) -> -1 |
|
|
|
(This should returns 3, not -1!) |
|
|
|
The following patch workaround the mpv problem by avoiding all |
|
`strnlen(s, (size_t)-1)` calls (and just using strlen() instead): |
|
|
|
$NetBSD$ |
|
|
|
Avoid to directly call: |
|
|
|
strnlen(s, (size_t)-1) |
|
|
|
because on aarch64 ATM it (incorrectly) always returns -1 (also |
|
when s is a string with less than SIZE_MAX characters). |
|
|
|
Add a kludge in order to use strlen() in these cases. |
|
|
|
--- ta/ta_utils.c.orig 2018-07-31 21:45:47.492269366 +0000 |
|
+++ ta/ta_utils.c |
|
@@ -98,7 +98,11 @@ static bool strndup_append_at(char **str |
|
if (!*str && !append) |
|
return true; // stays NULL, but not an OOM condition |
|
|
|
- size_t real_len = append ? strnlen(append, append_len) : 0; |
|
+ size_t real_len = append ? |
|
+ append_len == (size_t)-1 ? |
|
+ strlen(append) : |
|
+ strnlen(append, append_len) : |
|
+ 0; |
|
if (append_len > real_len) |
|
append_len = real_len; |
|
|
|
|
## Python `import requests` SIGILLs |
## Python `import requests` SIGILLs |
Doing a (please note that also `python36` is affected): |
Doing a (please note that also `python36` is affected): |
Line 121 Doing a (please note that also `python36
|
Line 221 Doing a (please note that also `python36
|
fpsr 0x3000000 50331648 |
fpsr 0x3000000 50331648 |
fpcr 0x10 16 |
fpcr 0x10 16 |
(gdb) quit |
(gdb) quit |
|
|
|
...and `_cffi_restore_errno` and `_cffi_save_errno` are defined in |
|
`cffi/_cffi_include.h` as follows: |
|
|
|
#define _cffi_restore_errno \ |
|
((void(*)(void))_cffi_exports[13]) |
|
#define _cffi_save_errno \ |
|
((void(*)(void))_cffi_exports[14]) |
|
|
|
Since py-cffi-1.11.5nb1 a kludge to workaround the issue is present (by |
|
disabling __thread). |
|
|
|
|
|
## polkitd crashes |
|
|
|
pinebook# /usr/pkg/lib/polkit-1/polkitd |
|
Successfully changed to user polkitd |
|
Error loading /var/run/ConsoleKit/database: Error statting file /var/run/ConsoleKit/database: No such file or directory[1] Segmentation fault /usr/pkg/lib/polkit-1/polkitd |