kosslab-kr / uftrace

Function (graph) tracer for user-space
https://uftrace.github.io/slide/
GNU General Public License v2.0
16 stars 0 forks source link

[19' 김민정] 최종보고서 #96

Open rls1004 opened 5 years ago

rls1004 commented 5 years ago

Issue & Pull Request

1. --logfile 옵션 사용시 발생하는 segfault 문제 해결

Pull Request https://github.com/namhyung/uftrace/pull/861 Problem: 파일 열기에 실패할 경우 fd가 NULL이 되어 segfault 발생 Solution: 파일 열기에 실패할 경우 fd를 stderr로 변경하고 예외 상황에 대한 처리 -> 다른 프로젝트에 대한 인생 첫 커밋.. 👍

2. 함수 인자에 대한 로깅 시 발생하는 segfault 문제 해결

Issue https://github.com/namhyung/uftrace/issues/858 Pull Request https://github.com/namhyung/uftrace/pull/865 Problem: memory bound 를 벗어난 위치의 인자 요청 시 잘못된 주소를 읽어 segfault 발생 Solution: 메모리 주소에 대한 유효성 검사 추가 / test case 추가 -> 커밋 수정을 통해 reflog, reset, stash, squash, rebase, force push 등 git 의 다양한 기능들을 사용하고 익히게 됨 -> 이후의 커밋들에 많은 도움이 됨.. 👍

3. std::string 포맷으로 인자를 표현 시 발생하는 segfault 문제 해결

Issue https://github.com/namhyung/uftrace/issues/905 Pull Request https://github.com/namhyung/uftrace/pull/906 Problem: std::string 타입이 아닌 함수 인자를 std::string 포맷으로 표현하려고 하면 잘못된 주소를 읽어 segfault 발생 Solution: 메모리 주소에 대한 유효성 검사 추가

4. opts 객체에서 발생하는 메모리 누수 문제 해결

Issue https://github.com/namhyung/uftrace/issues/963 Pull Request https://github.com/namhyung/uftrace/pull/964 Problem: --signal 옵션 사용 시 opts->sig_trigger 에 메모리가 할당되지만 해제되지 않는 문제 발생 Solution: opts 에 대한 메모리 해제 시 opts->sig_trigger 에 대한 메모리 해제 코드 추가

5. 함수 인자에 대한 데이터 저장 시 발생하는 heap buffer overflow

Pull Request https://github.com/namhyung/uftrace/pull/937 Problem: 메모리 할당 시 사용된 크기와 메모리를 읽을 때 사용된 크기가 달라져서 문제 발생 Solution: 메모리를 할당하기 전에 적절한 크기로 수정

6. cmdline 을 읽을 때 발생하는 stack buffer overflow

Issue https://github.com/namhyung/uftrace/issues/939 Pull Request https://github.com/namhyung/uftrace/pull/946 Problem: fread 함수는 문자열 끝에 NULL 바이트를 삽입하지 않기 때문에 변수의 크기를 넘어간 데이터까지 문자열로 인식하여 읽어올 수 있는 문제 발생 Solution: fread 함수로 읽어온 데이터의 끝에 NULL 바이트 삽입 -> cmdline 이 4096 바이트보다 길어지는 경우에 대해 모든 바이트를 저장할 수 있도록 수정하려 했지만 개발적인 관점에서 이것은 unusual 한 케이스이기 때문에 코드 수정을 최소화하는 방향으로 수정하는 것이 낫다는 것을 알게 됨

7. "list-event" 옵션에 대한 디스크립션 중 오타 수정

Pull Request https://github.com/namhyung/uftrace/pull/954

8. tui.c 코드 중 주석의 오타 수정

Pull Request https://github.com/namhyung/uftrace/pull/955

9. record.c 코드 중 주석의 오타 수정

Pull Request https://github.com/namhyung/uftrace/pull/956

10. dump.c 코드 중 주석의 오타 수정 (open)

Pull Request https://github.com/namhyung/uftrace/pull/970

11. 문자열 형태의 함수 인자 처리 시 발생하는 heap buffer overflow (open)

Issue https://github.com/namhyung/uftrace/issues/993 Pull Request https://github.com/namhyung/uftrace/pull/994 Problem: 4 바이트 보다 작은 문자열이 4 바이트 문자열과 비교될 수 있는 문제 발생 Solution: 문자열 길이가 4 바이트 일 때만 문자열 비교를 수행하도록 수정

12. 여러줄의 커맨드 라인에 대한 저장/읽기 시 발생하는 error (open)

Issue https://github.com/namhyung/uftrace/issues/996 Pull Request https://github.com/namhyung/uftrace/pull/998 Problem: 여러줄의 커맨드 라인에 대해 fgets() 로 읽기 때문에 다음 라인을 읽지 못하여 다음 처리 루틴에서 에러 발생 Solution: 여러줄의 커맨드 라인 저장 시 '\n' 을 공백으로 대체하여 저장

13. opts 객체의 run_cmd 메모리를 해제하지 않아 발생하는 메모리 누수 문제 (open)

Issue https://github.com/namhyung/uftrace/issues/1005 Pull Request https://github.com/namhyung/uftrace/pull/1007 Problem: --run-cmd 옵션 사용시 opts->run_cmd 에 메모리가 할당되지만 해제되지 않아 문제 발생 Solution: opts 에 대한 메모리 해제 시 opts->run_cmd 에 대한 메모리 해제 코드 추가

Discussion

python function tracing

https://github.com/namhyung/uftrace/pull/934 -> multiprocessing 모듈을 사용한 runtest.py 에 대해 tracing 할 때 발생하는 무한 루프 문제 분석 ---> 프로세스들이 공유하는 shared 객체에 데이터가 제대로 저장되지 않는 문제 발견 ---> 이를 재현할 수 있는 POC 코드 작성 ---> cpython 의 문제인 것으로 확인, bug reporting 진행중 -----> https://bugs.python.org/issue38511

Wiki

uftrace for RustPython

https://github.com/namhyung/uftrace/wiki/uftrace-for-RustPython uftrace 를 이용하여 RustPython 을 tracing 하는 방법에 대해 정리 -> 해당 Wiki 를 레퍼런스로 RustPython Wiki 에 uftrace 에 대한 Wiki 가 생성됨 ---> https://github.com/RustPython/RustPython/wiki/uftrace

etc.

uftrace 를 이용하여 RustPython 에서 발생하는 문제에 대한 원인 코드 파악 및 해결 (6 Issue, 2 Pull Request) https://github.com/RustPython/RustPython/issues/created_by/rls1004 https://github.com/RustPython/RustPython/pull/1496 https://github.com/RustPython/RustPython/pull/1393

향후 계획

cpython 에 bug reporting 진행중

https://bugs.python.org/issue38511 python function tracing 중 sys.settrace 로 인한 문제 해결을 위해 진행중

(10/26) sprint seoul 참가 신청

https://www.sprintseoul.org/ cpython 에서 문제가 해결되지 않는다면 RustPython 에 hook 기능을 구현하여 cpython 을 대체할 수 있지 않을까 해서 RustPython 모임 신청