Pull Request https://github.com/namhyung/uftrace/pull/861Problem: 파일 열기에 실패할 경우 fd가 NULL이 되어 segfault 발생
Solution: 파일 열기에 실패할 경우 fd를 stderr로 변경하고 예외 상황에 대한 처리
-> 다른 프로젝트에 대한 인생 첫 커밋.. 👍
Issue https://github.com/namhyung/uftrace/issues/939Pull Request https://github.com/namhyung/uftrace/pull/946Problem: fread 함수는 문자열 끝에 NULL 바이트를 삽입하지 않기 때문에 변수의 크기를 넘어간 데이터까지 문자열로 인식하여 읽어올 수 있는 문제 발생
Solution: fread 함수로 읽어온 데이터의 끝에 NULL 바이트 삽입
-> cmdline 이 4096 바이트보다 길어지는 경우에 대해 모든 바이트를 저장할 수 있도록 수정하려 했지만 개발적인 관점에서 이것은 unusual 한 케이스이기 때문에 코드 수정을 최소화하는 방향으로 수정하는 것이 낫다는 것을 알게 됨
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 모임 신청