syzbot - memory leak in gsm_activate_mux
·
Linux/start_contribute()
그나마 쉬운 버그를 찾아서 방황하던중 누군가 패치를 제출했지만, 승인이 되지 않은 memory leak 관련 버그를 찾았다. 도전할만 하다고 생각돼서 분석, 해결 시작.Crash Report[ 165.195884][T11142] sysfs: cannot create duplicate filename '/devices/virtual/tty/gsmtty1'[ 165.196865][T11142] CPU: 1 PID: 11142 Comm: repro Tainted: G W 6.7.0-rc8-00055-g5eff55d725a4 #14[ 165.198016][T11142] Hardware name: QEMU Ubuntu 24.04 PC v2 (i440FX + PIIX, arch_c..
syzbot 버그픽스 기여 방법
·
Linux/start_contribute()
Syzbot을 위한 환경 설정git clone 리눅스 커널 가져오기버그 찾기c repro가 있는 것, open되어 있는 것 중에서 찾고, out of bounds를 위주로 찾아보자!! 이게 쉽다. 그리고 로컬 QEMU환경에서 버그를 재현해야한다.Kernel Build 하기리포트에 명시되어 있는, config를 활용하여 commit hash로 checkout한다. 그리고 이 상태에서 빌드한다.make olddefconfig : 커널의 루트에 .config작성하고 적용make -j$(nproc) bzImage : bzImage로 빌드환경 만들기 syzkaller clone해오기 파일 시스템 이미지 준비 (Debian Trixie): trixie.img 엔진: bzImage 차체: tr..
System Call 분석
·
Linux/start_analyse()
시스템 콜 번호 정의는 어디에 되어있는가?include/uapi/asm-generic/unistd.h 에 시스템 콜 번호가 저장되어있다. 만약, fork() 시스템콜이 몇번인지 확인하고자 한다면?#define __NR_clone 220__SYSCALL(__NR_clone, sys_clone)__SYSCALL은 _arm64##sym로 define 되어있다. 따라서 unistd.h는 이렇게 구성이 될 것이다.#define __NR_clone 220__arm64_sys_clone그러면 나중에 unistd.h만 include를 하면, __arm64_sys_clone() 함수를 사용할 수 있다는 뜻이다.시스템 콜의 실제 정의시스템 콜의 실제 정의는 SYSCALL_DEFINEx 매크로에 의해서 정의된다. SYSCA..
커널 기여: race condition 가능성 해결
·
Linux/start_contribute()
drivers/staging/rtl8723bs 드라이버쪽을 최근에 기웃기웃 보고있다.그러던 중race contition 해결 패치void expire_timeout_chk(struct adapter *padapter) { struct list_head *phead, *plist, *tmp; u8 updated = false; ..
커널 기여 근황
·
Linux/start_contribute()
처음 기여를 시작한 11월 말부터 현재까지 약 10개 가까이 되는(시리즈 포함) 패치를 보냈다.이중에서 현재,2개 승인8개 리뷰중3개 리젝인데, 생각보다 리뷰가 상당히 까다롭다.승인 패치[패치]https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git/commit/?h=mm-nonmm-unstable&id=f34e19c34e4e92338d2ceaab2b95dd7790d262dekernel/fork.c에 있던 주석 수정인데, 기존의 주석이 함수의 동작을 애매하게 표현했었다.따라서 함수의 동작과정(mm_release())를 분석하고 그에 맞게 주석을 수정했다.이건 별다른 리뷰 없이 승인 받았다. [패치]https://git.kernel.org/pub/scm/l..
리눅스 커널 2번째 기여: 수동 메모리 정렬 연산 PTR_ALIGN으로 최적화
·
Linux/start_contribute()
커널의 코어 영역에 기여하기란 쉽지 않다.그래서 보통 초보 개발자들은 드라이버쪽 기여를 많이 하게되는데,특히 드라이버쪽에 staging디렉토리에서 한다. staging 디렉토리는 아직 메인라인 커널의 엄격한 코딩 표준을 완벽히 충족하지 못했거나,추가적인 테스트가 필요한 과도기적 드라이버들이 모여있는 곳,그래서 초보 기여자들이 개선할 여지가 가장 많은 곳이다. 난 그중에서 rtl8723bs 와이파이 드라이버에서 기여를 해보고자 선택했다./drivers/staging/rtl8723bs/core/rtw_cmd.c여기서,이 코드를 보면, 엄청나게 긴 연산이 있다.이 비트 연산이 포함된 연산은 '메모리 정렬'을 위한 연산이다. 메모리 연산이 뭐냐면컴퓨터는 데이터를 읽어낼 때, 뭉텅이 단위로 읽는다.예를 들어, 8..