kpatch
kpatch개발자 | 레드햇 |
---|---|
초기 릴리즈 | 2014년 2월 26일([1] |
안정된 릴리스 | 2021년[2] 4월 20일 0.9.3, 전( ) |
저장소 | |
운영 체제 | 리눅스 |
유형 | 커널 확장 |
면허증. | GNU GPL 버전 2 |
웹 사이트 | github |
kpatch는 실행 중인 커널의 라이브 패치를 구현하는 Linux 커널의 기능입니다.이것에 의해, 커널의 실행중에 커널 패치를 적용할 수 있습니다.kpatch는 원하는 패치를 포함하는 새로운 커널을 사용하여 시스템을 재부팅할 필요가 없도록 함으로써 시스템 가동 시간과 가용성을 극대화하는 것을 목표로 합니다.동시에 kpatch를 사용하면 커널 관련 보안 업데이트를 예정된 [1][3]다운타임을 지연시키지 않고 적용할 수 있습니다.내부적으로 kpatch를 사용하면 실행 중인 커널의 모든 기능을 패치가 적용된 버전으로 교체할 수 있으며 라이브 패치가 [4]실행되는 동안 실행 중인 모든 프로세스를 중지하여 안전하게 교체할 수 있습니다.
kpatch는 Red Hat에 의해 개발되었으며 소스 코드는 GNU General Public License 버전 2(GPLv2)[1]의 조건에 따라 라이선스가 부여되었습니다.2014년 5월 kpatch는 Linux 커널 [5]메인라인에 포함시키기 위해 제출되었으며 라이브 패치의 미니멀리즘 [6]기반은 2015년 4월 12일에 출시된 커널 버전 4.0에서 Linux 커널 메인라인에 통합되었습니다.
내부
내부적으로 kpatch는 두 부분으로 구성되어 있습니다.코어 커널 모듈은 커널의 내부 동작을 변경하여 라이브 패치메커니즘을 실행하고 사용자 공간 유틸리티는 소스 차이에서 개별 핫 패치 커널 모듈을 준비하여 애플리케이션을 관리합니다.라이브 커널 패치는 기능 레벨에서 실행됩니다.즉, kpatch는 ftrace가 제공하는 기능을 사용하여 오래된 버전의 함수를 라우팅함으로써 실행 중인 커널의 모든 기능을 패치가 적용된 버전으로 대체할 수 있습니다.그렇게 하면 핫 패치도 쉽게 실행 취소할 수 있습니다.커널의 내부 데이터 구조에 대한 변경은 불가능하지만 kpatch와 함께 사용되는 자연스러운 후보 중 하나인 보안 패치는 커널의 데이터 구조에 [4][5][7]대한 변경을 거의 포함하지 않습니다.
kpatch는 핫패치가 적용되는 동안 실행 중인 모든 프로세스를 중지하고 패치가 적용되는 기능 내에서 정지된 프로세스가 실행되지 않도록 함으로써 핫패치가 원자적이고 안전하게 적용되도록 합니다.이러한 접근법에 의해 라이브 패치 메커니즘 전체가 간소화되어 원래 버전과 패치가 적용된 기능에서 데이터 구조가 사용되는 방식과 관련된 특정 문제를 방지할 수 있습니다.단점으로는 이 접근방식에서는 핫패치에 장애가 발생할 가능성도 남아 있어 실행 중인 [4][5][7]모든 프로세스를 정지하는 데 필요한 지연 시간이 적습니다.
역사
Red Hat은 2014년 2월에 GNU General Public License 버전 2(GPLv2)[1]의 조건에 따라 kGraft.[8] kpatch라는 자체 라이브 커널 패치 구현이 출시되기 직전에 kpatch를 발표하여 공개하였으며,[5][9] 2014년 5월에 Linux 커널 메인라인에 포함되도록 제출하였다.
kpatch는 [10][11]기술 프리뷰로 2014년 6월 10일에 출시된 Red Hat Enterprise Linux 7.0에 포함되어 있습니다.
라이브 커널 패치를 위한 최소 기반은 2015년 4월 12일에 출시된 커널 버전 4.0에서 Linux 커널 메인라인에 통합되었습니다.이러한 기반은 주로 커널의 ftrace 기능을 기반으로 핫 패치를 포함하는 커널 모듈용 애플리케이션 프로그래밍 인터페이스(API)와 사용자 공간 관리 유틸리티용 애플리케이션 바이너리 인터페이스(ABI)를 제공함으로써 kpatch와 kGraft 양쪽에 의한 핫 패치를 지원할 수 있는 공통 코어를 형성합니다.그러나 Linux 커널 4.0에 포함된 공통 코어는 x86 아키텍처만 지원하며 핫 패치가 [6][12][13]적용되는 동안 기능 수준의 일관성을 보장하는 메커니즘은 제공하지 않습니다.
2015년 4월부터 kpatch를 Linux 커널 메인라인에서 [13]제공하는 공통 라이브 패치 코어로 이식하는 작업이 진행 중입니다.단, Linux 커널에 의해 제공되는 콜스택은 적절한 스택프레임 없이 어셈블리코드를 수반하는 상황에서는 신뢰할 수 없기 때문에 필요한 기능 수준의 일관성 메커니즘의 구현이 지연되고 있습니다.그 결과 2015년 9월[update] 현재 포팅 작업은 계속 진행 중입니다.커널 콜 스택의 신뢰성을 향상시키기 위해 전문 건전성 검사를 실시stacktool 사용자 공간 유틸리티도 [14][15]개발되었습니다.
「 」를 참조해 주세요.
- 동적 소프트웨어 업데이트 - 프로그램 실행 중 업그레이드에 초점을 맞춘 연구 분야
- 실행 중인 시스템에서 완전히 새로운 Linux 커널을 로드하는 방법인 kexec
- Ksplice와 KernelCare, Ksplice, Inc.(나중에 Oracle에 인수됨)와 CloudLinux가 각각 개발한 기타 Linux 커널 라이브 패치 기술
레퍼런스
- ^ a b c d Josh Poimboeuf; Seth Jennings (February 26, 2014). "Introducing kpatch: Dynamic Kernel Patching". redhat.com. Retrieved July 23, 2014.
- ^ "Release 0.9.3". April 20, 2021. Retrieved May 14, 2021.
- ^ Sean Michael Kerner (June 6, 2014). "Linux Kernel Patching Gets Dynamic". ServerWatch. Retrieved July 23, 2014.
- ^ a b c Jonathan Corbet (May 7, 2014). "The first kpatch submission". LWN.net. Retrieved July 23, 2014.
- ^ a b c d Josh Poimboeuf (May 1, 2014). "kpatch: dynamic kernel patching". LWN.net. Retrieved July 23, 2014.
- ^ a b "Linux kernel 4.0, Section 1.2. Live patching". kernelnewbies.org. April 26, 2015. Retrieved April 27, 2015.
- ^ a b c Seth Jennings; Josh Poimboeuf (June 10, 2014). "Dynamic Kernel Patching". Red Hat. Retrieved July 23, 2014.
- ^ "SUSE Releases kGraft for Live Patching of Linux Kernel". SUSE. March 27, 2014. Retrieved February 11, 2015.
- ^ Michael Larabel (May 1, 2014). "SUSE Posts kGraft, Red Hat Posts Kpatch Patches". Phoronix. Retrieved July 23, 2014.
- ^ "Red Hat Enterprise Linux 7.0 Release Notes, Chapter 5. Kernel". Red Hat. July 15, 2014. Retrieved July 23, 2014.
- ^ Carlos Sanchez (June 26, 2014). "Red Hat Releases Red Hat Enterprise Linux 7 with Increased Linux Containers Support". infoq.com. Retrieved July 23, 2014.
- ^ Jonathan Corbet (February 25, 2015). "A rough patch for live patching". LWN.net. Retrieved April 27, 2015.
- ^ a b "Linux kernel source tree: kernel/git/torvalds/linux.git: Pull live patching infrastructure from Jiri Kosina". kernel.org. February 11, 2015. Retrieved April 27, 2015.
- ^ Jonathan Corbet (September 30, 2015). "Compile-time stack validation". LWN.net. Retrieved October 2, 2015.
- ^ Josh Poimboeuf (September 24, 2015). "Linux kernel documentation: Documentation/stack-validation.txt (from the v13 patch)". LWN.net. Retrieved October 2, 2015.