Package: tracker-extract Version: 2.1.5-4 Severity: important Tags: patch On my i386 based NAS tracker-extract repeatedly is killed via SIGSYS by the seccomp sandbox. Excerpt from strace:
17167 execve("/usr/lib/tracker/tracker-extract", ["/usr/lib/tracker/tracker- extract"], ["HOME=/home/roderich", "LANG=en_US.UTF-8", "LANGUAGE=en_US:en", "LOGNAME=roderich", "PATH=/usr/local/sbin:/usr/local/"..., "SHELL=/bin/bash", "USER=roderich", "XDG_RUNTIME_DIR=/run/user/2000", "DBUS_SESSION_BUS_ADDRESS=unix:pa"..., "MANAGERPID=312", "INVOCATION_ID=22e8f9cf5d124c59bb"..., "JOURNAL_STREAM=9:104103"]) = 0 ... 17167 clone(child_stack=0xab1ad324, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0xab1adba8, tls={entry_number=6, base_addr=0xab1adb40, limit=0x0fffff, seg_32bit=1, contents=0, read_exec_only=0, limit_in_pages=1, seg_not_present=0, useable=1}0xbf9039bc, child_tidptr=0xab1adba8) = 17188 17167 poll([{fd=4, events=POLLIN}], 1, -1 <unfinished ...> 17188 set_robust_list(0xab1adbb0, 12) = 0 17188 prctl(PR_SET_NAME, "single") = 0 17188 mprotect(0xb3321000, 4096, PROT_READ|PROT_WRITE) = 0 17188 mprotect(0xb3322000, 4096, PROT_READ|PROT_WRITE) = 0 17188 prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0) = 0 17188 seccomp(SECCOMP_SET_MODE_STRICT, 1, NULL) = -1 EINVAL (Invalid argument) 17188 seccomp(SECCOMP_SET_MODE_FILTER, 0, {len=135, filter=[BPF_STMT(BPF_LD|BPF_W|BPF_ABS, 0x4), BPF_JUMP(BPF_JMP|BPF_K|BPF_JEQ, 0x40000003, 0, 0x84), BPF_STMT(BPF_LD|BPF_W|BPF_ABS, 0),... 17188 lstat64("/home/roderich/Music/Jeff Beck with Terry Bozzio and Tony Hymas/Jeff Beck's Guitar Shop/album.jpg", {st_dev=makedev(9, 1), st_ino=159253366, st_mode=S_IFREG|0644, st_nlink=1, st_uid=2000, st_gid=2000, st_blksize=4096, st_blocks=112, st_size=56447, st_atime=1460929067 /* 2016-04-17T23:37:47.747261334+0200 */, st_atime_nsec=747261334, st_mtime=1460501084 /* 2016-04-13T00:44:44.971829499+0200 */, st_mtime_nsec=971829499, st_ctime=1460929067 /* 2016-04-17T23:37:47.807259666+0200 */, st_ctime_nsec=807259666}) = 0 17188 openat(AT_FDCWD, "/home/roderich/Music/Jeff Beck with Terry Bozzio and Tony Hymas/Jeff Beck's Guitar Shop/album.jpg", O_RDONLY|O_LARGEFILE|O_NOATIME) = 14 17188 fcntl64(14, F_GETFL) = 0x48000 (flags O_RDONLY|O_LARGEFILE|O_NOATIME) 17188 futex(0xb7cb69c8, FUTEX_WAKE_PRIVATE, 2147483647) = 0 17188 futex(0xb7cb69c8, FUTEX_WAKE_PRIVATE, 2147483647) = 0 17188 fstat64(14, {st_dev=makedev(9, 1), st_ino=159253366, st_mode=S_IFREG|0644, st_nlink=1, st_uid=2000, st_gid=2000, st_blksize=4096, st_blocks=112, st_size=56447, st_atime=1460929067 /* 2016-04-17T23:37:47.747261334+0200 */, st_atime_nsec=747261334, st_mtime=1460501084 /* 2016-04-13T00:44:44.971829499+0200 */, st_mtime_nsec=971829499, st_ctime=1460929067 /* 2016-04-17T23:37:47.807259666+0200 */, st_ctime_nsec=807259666}) = 0 17188 mprotect(0xb3323000, 4096, PROT_READ|PROT_WRITE) = 0 17188 read(14, "\377\330\377\340\0\20JFIF\0\1\1\0\0\1\0\1\0\0\377\333\0C\0\5\3\4\4\4\3\5"..., 4096) = 4096 17188 mprotect(0xb3324000, 16384, PROT_READ|PROT_WRITE) = 0 17188 lstat64("/home/roderich/Music/Jeff Beck with Terry Bozzio and Tony Hymas/Jeff Beck's Guitar Shop/album.jpg", {st_dev=makedev(9, 1), st_ino=159253366, st_mode=S_IFREG|0644, st_nlink=1, st_uid=2000, st_gid=2000, st_blksize=4096, st_blocks=112, st_size=56447, st_atime=1460929067 /* 2016-04-17T23:37:47.747261334+0200 */, st_atime_nsec=747261334, st_mtime=1460501084 /* 2016-04-13T00:44:44.971829499+0200 */, st_mtime_nsec=971829499, st_ctime=1460929067 /* 2016-04-17T23:37:47.807259666+0200 */, st_ctime_nsec=807259666}) = 0 17188 openat(AT_FDCWD, "/etc/localtime", O_RDONLY|O_CLOEXEC) = 17 17188 fstat64(17, {st_dev=makedev(9, 1), st_ino=74977878, st_mode=S_IFREG|0644, st_nlink=1, st_uid=0, st_gid=0, st_blksize=4096, st_blocks=8, st_size=2335, st_atime=1546448825 /* 2019-01-02T18:07:05+0100 */, st_atime_nsec=0, st_mtime=1546221724 /* 2018-12-31T03:02:04+0100 */, st_mtime_nsec=0, st_ctime=1546448827 /* 2019-01-02T18:07:07.614374895+0100 */, st_ctime_nsec=614374895}) = 0 17188 fstat64(17, {st_dev=makedev(9, 1), st_ino=74977878, st_mode=S_IFREG|0644, st_nlink=1, st_uid=0, st_gid=0, st_blksize=4096, st_blocks=8, st_size=2335, st_atime=1546448825 /* 2019-01-02T18:07:05+0100 */, st_atime_nsec=0, st_mtime=1546221724 /* 2018-12-31T03:02:04+0100 */, st_mtime_nsec=0, st_ctime=1546448827 /* 2019-01-02T18:07:07.614374895+0100 */, st_ctime_nsec=614374895}) = 0 17188 mprotect(0xb3328000, 4096, PROT_READ|PROT_WRITE) = 0 17188 read(17, "TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\t\0\0\0\t\0\0\0\0"..., 4096) = 2335 17188 _llseek(17, -1476, [859], SEEK_CUR) = 0 17188 read(17, "TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\t\0\0\0\t\0\0\0\0"..., 4096) = 1476 17188 close(17) = 0 17188 fadvise64_64(14, 0, 0, POSIX_FADV_DONTNEED) = 272 17188 --- SIGSYS {si_signo=SIGSYS, si_code=SYS_SECCOMP, si_call_addr=0xb7fbdd41, si_syscall=__NR_fadvise64_64, si_arch=AUDIT_ARCH_I386} --- The reason is the syscall fadvise64_64 which is _not_ whitelisted in src/libtracker-miners-common/tracker-seccomp.c In this case, the syscall seems to be issued by tracker-extract itself, as several src/tracker-extract/tracker-extract-*.c call posix_fadvise(). Note that glibc uses fadvise64_64 to implement on i386 when the source is compiled with -D_FILE_OFFSET_BITS=64 (which is the case here). Adding fadvise64_64 to the whitelist solves the problem for me, see attached patch. Cheers, Roderich -- System Information: Debian Release: buster/sid APT prefers unstable-debug APT policy: (500, 'unstable-debug'), (500, 'unstable'), (1, 'experimental-debug'), (1, 'experimental') Architecture: amd64 (x86_64) Foreign Architectures: i386 Kernel: Linux 4.20.0 (SMP w/4 CPU cores) Locale: LANG=en_US.utf8, LC_CTYPE=en_US.utf8 (charmap=UTF-8), LANGUAGE=en_US.utf8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Init: systemd (via /run/systemd/system) Versions of packages tracker-extract depends on: ii dconf-gsettings-backend [gsettings-backend] 0.30.1-2 ii libc6 2.28-4 ii libcue2 2.2.1-2 ii libexempi3 2.4.5-2 ii libexif12 0.6.21-5 ii libflac8 1.3.2-3 ii libgexiv2-2 0.10.9-1 ii libgif7 5.1.4-3 ii libglib2.0-0 2.58.2-1 ii libgsf-1-114 1.14.44-1 ii libgstreamer-plugins-base1.0-0 1.14.4-1 ii libgstreamer1.0-0 1.14.4-1 ii libgxps2 0.3.0-4 ii libicu63 63.1-5 ii libiptcdata0 1.0.5-2 ii libjpeg62-turbo 1:1.5.2-2+b1 ii libosinfo-1.0-0 1.2.0-1 ii libpng16-16 1.6.36-2 ii libpoppler-glib8 0.69.0-2 ii libseccomp2 2.3.3-3 ii libtagc0 1.11.1+dfsg.1-0.2+b2 ii libtiff5 4.0.10-3 ii libtotem-plparser18 3.26.1-2 ii libtracker-miner-2.0-0 2.1.6-5 ii libtracker-sparql-2.0-0 2.1.6-5 ii libvorbisfile3 1.3.6-1 ii libxml2 2.9.8+dfsg-1 ii tracker 2.1.6-5 tracker-extract recommends no packages. tracker-extract suggests no packages. -- no debconf information
--- a/src/libtracker-miners-common/tracker-seccomp.c +++ b/src/libtracker-miners-common/tracker-seccomp.c @@ -142,6 +142,7 @@ ALLOW_RULE (lseek); ALLOW_RULE (_llseek); ALLOW_RULE (fadvise64); + ALLOW_RULE (fadvise64_64); ALLOW_RULE (arm_fadvise64_64); ALLOW_RULE (write); ALLOW_RULE (writev);