| Summary: | chrt Segmentation fault | ||
|---|---|---|---|
| Product: | Busybox | Reporter: | Bin Zhang <yangtze31> |
| Component: | Other | Assignee: | unassigned |
| Status: | RESOLVED FIXED | ||
| Severity: | normal | CC: | busybox-cvs |
| Priority: | P5 | ||
| Version: | 1.29.x | ||
| Target Milestone: | --- | ||
| Hardware: | Other | ||
| OS: | Linux | ||
| Host: | Target: | ||
| Build: | |||
|
Description
Bin Zhang
2019-04-04 15:48:53 UTC
can you strace this invocation? # pidof mpd
142
# cat /proc/146/stat
stat statm status
# cat /proc/146/status
Name: output:Interfac
Umask: 0022
State: S (sleeping)
Tgid: 142
Ngid: 0
Pid: 146
# chrt -p 146
Segmentation fault
# strace chrt -p 146
execve("/usr/bin/chrt", ["chrt", "-p", "146"], 0xffffd7c4b5e0 /* 14 vars */) = 0
brk(NULL) = 0x24016000
faccessat(AT_FDCWD, "/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib64/tls/aarch64/libresolv.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/lib64/tls/aarch64", 0xffffdb428560, 0) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib64/tls/libresolv.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/lib64/tls", 0xffffdb428560, 0) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib64/aarch64/libresolv.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/lib64/aarch64", 0xffffdb428560, 0) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib64/libresolv.so.2", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0\267\0\1\0\0\0\3207\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=80392, ...}) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xffffa5f44000
mmap(NULL, 154072, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xffffa5ef3000
mprotect(0xffffa5f05000, 65536, PROT_NONE) = 0
mmap(0xffffa5f15000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x12000) = 0xffffa5f15000
mmap(0xffffa5f17000, 6616, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xffffa5f17000
close(3) = 0
openat(AT_FDCWD, "/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0\267\0\1\0\0\0\360\r\2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1414752, ...}) = 0
mmap(NULL, 1486920, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xffffa5d87000
mprotect(0xffffa5eda000, 61440, PROT_NONE) = 0
mmap(0xffffa5ee9000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x152000) = 0xffffa5ee9000
mmap(0xffffa5eef000, 12360, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xffffa5eef000
close(3) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xffffa5f42000
mprotect(0xffffa5ee9000, 16384, PROT_READ) = 0
mprotect(0xffffa5f15000, 4096, PROT_READ) = 0
mprotect(0x472000, 4096, PROT_READ) = 0
mprotect(0xffffa5f48000, 4096, PROT_READ) = 0
sched_getscheduler(146) = 1073741825
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(0x88, 0), ...}) = 0
brk(NULL) = 0x24016000
brk(0x24037000) = 0x24037000
--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0x30045e133} ---
+++ killed by SIGSEGV +++
Segmentation fault
sched_getscheduler(146) = 1073741825 It's 0x40000001 = SCHED_RESET_ON_FORK | SCHED_FIFO "Since Linux 2.6.32, the SCHED_RESET_ON_FORK flag can be ORed in policy when calling sched_setscheduler()". Not sure why sched_GETscheduler shows the bit, but it evidently does. Trying to reference policies[pol].name with that causes SEGV. Fixed in git. It works. Thank you ! |