7.11. 컴파일러 및 개발 도구
glibc의 감사 모듈에서 재귀 dlopen 호출 지원 개선
이전 버전에서는 auditors의 재귀dlopen 호출에서 glibc의dl-open.c 에서r_state == RT_CONSISTENT 어설션 실패를 트리거할 수 있었습니다. 그 결과 감사자가 활성화되면 애플리케이션이 예기치 않게 종료되었습니다. 이번 업데이트를 통해 동적 링커는 진행 중인 호출 중에 이전에 내부 데이터 구조의 일관성을 보고합니다. 결과적으로 감사자에 대한 재귀적dlopen 작업이 더 많은 경우에 지원됩니다.
glibc: 감사 모드에서 초기 TLS 할당 중에 애플리케이션 충돌
이전에는 감사 모드에서 스레드 로컬 스토리지(TLS) 관리와 관련된 내부 데이터 구조가 프로세스 시작 중에 기본malloc 이 초기화되기 전에 기본 loc 함수를 사용하여 할당되었습니다. 그 결과malloc 에 의해 할당되지 않은 메모리에realloc 가 호출되었을 때 애플리케이션이 충돌했습니다.
이번 업데이트를 통해 동적 링커는 시작 프로세스가 완료될 때까지malloc 및realloc 의 스텁 또는 최소 구현을 사용합니다. 초기 TLS 할당 중에 애플리케이션이 더 이상 충돌하지 않습니다.
Jira:RHEL-71922[1]
glibc: ctype.h 매크로로 인해 여러 libc.so가 있는 다중 스레드 프로그램에서 분할 오류가 발생했습니다.
이전 버전에서는 감사 또는dlmopen 을 사용하여 생성한 보조 C 라이브러리 복사본의 <ctype.h >의 내부 상태가 kafkapthread_create 로 생성된 스레드를 초기화하지 못했습니다. 결과적으로 직접 또는 간접적으로 보조 스레드와 네임스페이스가 프로그램 충돌을 초래하는 <ctype.h > 기능을 사용합니다.
이번 업데이트를 통해 <ctype.h >의 내부 상태는 보조 스레드 및 네임스페이스의C 로케일을 참조하도록 초기화됩니다. 그 결과 이러한 시나리오에서 <ctype.h >의 기능을 사용하면 더 이상 충돌이 발생하지 않습니다.
glibc 감사 로깅은 완전한 오브젝트 라이프사이클 추적 기능을 제공합니다.
이전에는 이전 la_objopen 이 없는 보조 네임스페이스의 프록시 ld.so 링크 맵에 대해 la_objclose 라는 glibc 동적 링커라는 glibc 동적 링커가 공유 오브젝트를 추적하기 위해 la_objopen 에 의존하는 툴에 대한 개체 수명 주기 보고가 불완전했습니다.
la_objopen 에 의존하는 감사 툴은 프록시 링크 맵을 안정적으로 모니터링하지 못하여 가시성과 언로드 이벤트를 잘못 해석할 수 있습니다.
이번 업데이트를 통해 glibc 동적 링커는 보조 네임스페이스의 프록시 ld.so 를 포함하여 해당 링크 맵에 대해 la_objopen 을 생성하여 감사 인터페이스에 대한 일관된 시퀀스를 보장합니다.
결과적으로 감사자는 la_objopen 및 la_objclose 쌍과 일관된 수명 주기 전반에 걸쳐 프록시 링크 맵을 추적하여 감사 툴링 및 진단의 안정성을 개선할 수 있습니다.
감사 모드에서 glibc 를 실행할 때 특정 프로그램이 더 이상 충돌하지 않음
이번 업데이트 이전에는 LD_AUDIT 모드의 glibc 동적 링커가 링커가 기본 malloc 하위 시스템을 초기화하기 전에 기본 calloc 함수를 사용하여 내부 데이터 구조를 할당할 수 있었습니다. 결과적으로 프로그램이 시작될 때 calloc 함수에서 프로세스가 예기치 않게 종료될 수 있었습니다. 이번 업데이트에서는 프로세스 시작 순서를 다시 정렬합니다. 결과적으로 calloc 메모리 할당은 시작 중에 사용되는 내부 malloc 구현을 사용하여 기본 malloc 함수로 전환하기 전에 수행됩니다. 결과적으로 동적 링커가 감사 모드를 사용하는 경우 calloc 함수에서 시작 중에 프로그램이 더 이상 충돌하지 않습니다.
Jira:RHEL-48820[1]
glibc에서 수정된 stdio 플러시 문제
이번 업데이트 이전에는 감사할 수 없는 입력에 대해 예상 ESPIPE 대신 EINVAL을 반환한 후 버퍼링된 후 올바른 위치를 검색하려고 할 때 glibc의 특정 stdio 스트림이 실패할 수 있었습니다. 결과적으로 파이프 또는 기타 조회할 수 없는 설명자에 fclose를 사용하는 애플리케이션에서 예기치 않은 오류가 발생하여 I/O 정리가 실패하고 일관되지 않은 파일 위치 동작이 발생할 수 있습니다.
이번 업데이트를 통해 lseek가 바이트를 읽은 후 ESPIPE 오류를 반환하고 fclose가 의도한 대로 감사할 수 없는 조건을 무시하고(예: xdup) 테스트 인프라 변경(예: xdup)을 지원하여 동작을 검증할 때 ESPIPE 오류를 조정합니다. 결과적으로 Fclose 및 관련 stdio 작업은 이제 검증되지 않은 스트림에 대해 일관되게 작동하여 오류 조건을 줄이고 버퍼링된 I/O에 의존하는 애플리케이션의 신뢰성을 개선합니다.
Jira:RHEL-68805[1]
팝업 및 포크를 병렬로 호출할 때 애플리케이션이 더 이상 교착되지 않음
이번 업데이트 이전에는 다중 스레드 애플리케이션이 별도의 스레드에서 팝업과 포크를 호출하고 포크가 내부 잠금을 유지했을 때 포크 가 발생하면 다시 이라고 하는 경우 하위 프로세스가 잠긴 상태 및 교착 상태를 상속할 수 있었습니다. popen
이번 업데이트를 통해 glibc는 포크 에서 관련 잠금 상태를 해제하여 차단 없이 후속 팝업 호출이 진행되도록 합니다. 결과적으로 다중 스레드 포크 호출 후 팝업은 더 이상 교착 상태에 있지 않고 지원되는 아키텍처의 프로세스 안정성 및 입력 출력 동작을 개선합니다.
Jira:RHEL-59712[1]
go-rpm-macros에서 GoList 명령줄 구문 분석기 수정
이번 업데이트 이전에는 명령줄 구문 분석기를 대체하여 특정 파일을 잘못 처리했습니다. 그 결과 일부 프로그램이 빌드되지 않았습니다. 이번 업데이트를 통해 원래 구문 분석기를 Golist로 복원했습니다.
결과적으로 Golist는 필요한 모든 파일을 올바르게 처리하고 프로그램이 예상대로 빌드됩니다.