segfault
abbycin opened this issue · 1 comments
abbycin commented
以下是全过程
╭─criss@Chameleon ~
╰─$ git clone https://github.com/Arondight/sudodev/
Cloning into 'sudodev'...
remote: Counting objects: 179, done.
remote: Compressing objects: 100% (43/43), done.
remote: Total 179 (delta 21), reused 0 (delta 0), pack-reused 136
Receiving objects: 100% (179/179), 69.62 KiB | 0 bytes/s, done.
Resolving deltas: 100% (106/106), done.
Checking connectivity... done.
╭─criss@Chameleon ~
╰─$ cd sudodev
╭─criss@Chameleon ~/sudodev ‹master›
╰─$ ./build.sh &>/dev/null
╭─criss@Chameleon ~/sudodev ‹master›
╰─$ cd bin
╭─criss@Chameleon ~/sudodev/bin ‹master›
╰─$ su
Password:
Chameleon:/home/criss/sudodev/bin # rm /var/run/sudodevd.pid
Chameleon:/home/criss/sudodev/bin # ./sudodevd
Chameleon:/home/criss/sudodev/bin # pgrep sudodevd
Chameleon:/home/criss/sudodev/bin # date
Mon Nov 9 13:32:25 CST 2015
查看日志 journalctl -xn
Nov 09 13:32:05 Chameleon sudodevd[10960]: SIGHUP is received, reload config
Nov 09 13:32:05 Chameleon kernel: sudodevd[10960]: segfault at 0 ip 00000000004026a8 sp 00007ffecb183a70 error 4 in sudodevd[400000+7000]
然后我就issue你了。
Arondight commented
readfile ()
在读取出错的时候返回-1
,在文件不存在的时候返回0
,sighupHandler ()
中没有判断文件不存在的情况,导致文件不存在的时候也会尝试进行一次去重,造成segfault。
在历史版本的sighupHandler ()
中,即使文件不存在,也不会有去重操作,加之在历史版本的eventloop ()
中进行UUID 匹配的时候嵌套循环也避免了空指针造成的segfault,所以这个地方就这么被避免了……后来因为提交 9c400d5 把这个问题又暴露了出来。