Ubuntu AppArmor 커스텀 프로파일 작성하기 — merged /usr와 apparmor-utils에서 실제로 겪은 문제

프로세스 하나가 뚫리면 그 프로세스가 가진 권한 전체가 그대로 노출된다. 파일 소유권이나 setuid만으로는 "이 프로그램은 딱 이 파일 몇 개만 건드릴 수 있다"는 세밀한 통제가 안 된다. AppArmor는 경로 기반…

Continue ReadingUbuntu AppArmor 커스텀 프로파일 작성하기 — merged /usr와 apparmor-utils에서 실제로 겪은 문제

Python os.eventfd()로 이벤트 알림 다루기 — 카운터 누적부터 poll 이벤트 루프 깨우기까지

스레드 간, 또는 프로세스 간에 "무슨 일이 일어났다"는 신호 하나만 가볍게 보내고 싶을 때 파이프나 소켓은 다소 과하다. eventfd는 커널이 관리하는 64비트 정수 카운터 하나를 파일 디스크립터로 노출해서, select/poll/epoll 같은…

Continue ReadingPython os.eventfd()로 이벤트 알림 다루기 — 카운터 누적부터 poll 이벤트 루프 깨우기까지

리누스 토발즈 “리눅스는 반AI 프로젝트 아니다” — 이미 시행 중인 Assisted-by 태그 정책까지

2024년 10월만 해도 리누스 토발즈는 AI 코딩 도구를 두고 "90%는 마케팅 과장"이라며 무시하겠다고 말했습니다. 2026년 7월 15일, 그는 정반대에 가까운 어조로 리눅스 커널 메일링 리스트에 이렇게 썼습니다. "Linux is not…

Continue Reading리누스 토발즈 “리눅스는 반AI 프로젝트 아니다” — 이미 시행 중인 Assisted-by 태그 정책까지

RCU(Read-Copy-Update) 기초 — rcu_read_lock부터 synchronize_rcu까지 실제로 확인하기

라우팅 테이블이나 설정 캐시처럼 읽기는 압도적으로 많고 쓰기는 어쩌다 한 번인 자료구조에 일반 락(mutex/spinlock)을 쓰면, 정작 서로 방해할 일이 없는 리더끼리도 락 때문에 경합한다. RCU(Read-Copy-Update)는 리더 쪽을 아예 락-프리로 만들어버리는…

Continue ReadingRCU(Read-Copy-Update) 기초 — rcu_read_lock부터 synchronize_rcu까지 실제로 확인하기

GDB record full로 역방향 디버깅하기 — 하드웨어 카운터 없이 되감는 rr 대안

워치포인트로 "이 변수가 언제 바뀌는지"는 잡을 수 있어도, 그 값이 왜 그렇게 됐는지 되짚어 올라가려면 결국 브레이크포인트를 다시 걸고 처음부터 재실행하기를 반복하게 된다. Mozilla의 rr 같은 record-and-replay 디버거는 실행을 통째로…

Continue ReadingGDB record full로 역방향 디버깅하기 — 하드웨어 카운터 없이 되감는 rr 대안

Python os.pidfd_open()으로 PID 재사용 레이스 없이 프로세스 관리하기

PID 기반 프로세스 관리(os.kill(pid, sig), os.waitpid(pid, ...))에는 근본적인 문제가 있다. PID는 재사용된다. 어떤 프로세스가 죽고 그 PID가 회수되면, 커널은 그 번호를 완전히 다른 새 프로세스에 다시 배정할 수 있다. 자식…

Continue ReadingPython os.pidfd_open()으로 PID 재사용 레이스 없이 프로세스 관리하기

Network Block Device 사용법

로컬 디스크가 부족하거나, diskless 클라이언트를 원격 스토리지로 부팅해야 하거나, 원격에 있는 이미지 파일을 로컬 블록 디바이스처럼 다루고 싶을 때가 있다. iSCSI가 이런 용도의 표준이지만 타깃 설정이 상대적으로 번거롭다. NBD(Network Block…

Continue ReadingNetwork Block Device 사용법

KFENCE: Kernel Electric-Fence

KASAN은 힙 오버플로우나 use-after-free를 잡아내는 데 강력하지만, 모든 할당에 리다이렉션 존(redzone)과 섀도 메모리 검사를 붙이는 방식이라 오버헤드가 크고 프로덕션에 상시 켜두기는 부담스럽다. KFENCE(Kernel Electric-Fence)는 이 문제를 확률적 샘플링으로 우회한다 —…

Continue ReadingKFENCE: Kernel Electric-Fence

ARM GIC v3 (Generic Interrupt Controller v3)

GICv2는 아키텍처상 PE(Processing Element, 코어)를 최대 8개까지만 지원한다. 서버·모바일 SoC의 코어 수가 계속 늘어나면서 이 상한이 실제 병목이 됐고, ARM은 GICv3에서 Distributor 하나가 모든 코어를 직접 상대하던 구조를 버리고 코어마다…

Continue ReadingARM GIC v3 (Generic Interrupt Controller v3)