Guillermo Austin Kim

Sources

Posts

998 posts

[리눅스커널] 시그널: ftrace 시그널 이벤트(signal_generate/signal_deliver) 소개

Guillermo Austin Kim|2019년 8월 25일

이번 소절에서 시그널 실행 흐름을 추적하는 ftrace event를 소개합니다. ftrace는 시그널 동작에 대해 다음 이벤트를 지원합니다. signal_generate: 시그널 생성 signal_deliver: 시그널 전달 후 실행 먼저 시그널 관련 ftrace 이벤트를 활성화하는 방법을 소개하겠습니다. 시그널 ftrace 이벤트 키기 시그널 관련 이벤트는 다음 명령어로 활성화할 수 있습니다."echo 1 > /sys/kernel/debug/tracing/events/signal/signal_generate/enable""echo 1 > /sys/kernel/debug/tracing/events/signal/signal_deliver/enable" 시그널 ftrace 이벤트 로그

[리눅스커널] 시그널: 커널 공간 sys_rt_sigsuspend() 함수 분석하기

Guillermo Austin Kim|2019년 8월 25일

유저 공간에서 sigsuspend() 함수를 호출하면 커널에서 어떤 동작을 하는지 다음 그림을 보면서 알아봅시다. [그림 12.13] 유저 공간에서 sigsuspend() 함수 호출 시 실행 흐름도 위 그림에서 보이듯 유저 공간에서 sigsuspend() 함수를 호출하면 해당 시스템 콜 핸들러인 sys_rt_sigsuspend() 함수가 호출됩니다. sys_rt_sigsuspend() 함수 선언부는 다음과 같습니다.[https://github.com/raspberrypi/linux/blob/rpi-4.19.y/include/linux/syscalls.h]asmlinkage long sys_rt_sigsuspend(sigset_t __user *unewset, size_t sigsetsize); 함수

[리눅스커널] 시그널: 유저 공간 suspend() 함수 분석하기

Guillermo Austin Kim|2019년 8월 25일

sigsuspend() 함수는 다음 동작을 한번에 수행합니다.1. 시그널 블록을 설정2. 시그널이 도착할 때까지 기다림 sigsuspend() 함수 동작을 다른 코드로 표현하면 다음과 같습니다. sigprocmask( SIG_SETMASK, &sert, NULL); pause(); 그런데 위 코드와 같이 구현을 했다면 문제가 발생할 수 있습니다. 그 이유는 다음과 같습니다.  sigprocmask() 함수와 pause() 함수 호출 사이에도 시그널이 발생할 수 있다. sigprocmask() 함수를 처리하는 도중에 발생한 시그널은 처리되지 않는 것입니다. 한 가지 예를 들어 볼까요? 여러분이 ‘Ctrl+C’ 키를 한 번만 누르면 터미널 프로그램이 종료돼야 하는데 가끔 여러 번

[리눅스커널] 시그널: handle_signal() 함수와 시그널 핸들러 호출 코드 분석하기

Guillermo Austin Kim|2019년 8월 25일

우리는 유저 공간에서 시그널 핸들러를 설정하면 다음과 같이 동작한다고 알고 있습니다.  해당 시그널이 발생하면 지정한 시그널 핸들러가 실행된다. 이렇게 시그널이 발생했을 때 해당 시그널 핸들러를 호출하는 동작을 수행하는 실체는 handle_signal() 함수입니다. handle_signal() 함수 분석에 앞서 어떤 조건으로 handle_signal() 함수를 호출하는지 알아볼까요? get_signal() 함수를 호출하는 do_signal() 함수 코드를 보면서 확인해봅시다. [https://elixir.bootlin.com/linux/v4.19.30/source/arch/arm/kernel/signal.c] 1 static int do_signal(struct pt_regs *regs, i

[리눅스커널][크래시] syzbot: KASAN: null-ptr-deref Write in queue_work_on

Guillermo Austin Kim|2019년 8월 23일

syzbot이 커널 패닉을 감지했다. 출처https://groups.google.com/forum/#!topic/syzkaller-bugs/yfiJ_du-UK0https://lkml.org/lkml/2019/8/21/1116 로그 분석 먼저 콜스택을 볼까?CPU: 0 PID: 9691 Comm: syz-executor935 Not tainted 5.3.0-rc4+ #113Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS queue_work_on+0xa6/0x210 kernel/workqueue.c:1517 Call Trace: __dump_stack lib/dump_stack.c:77 [inline] dump_s