5.4.10. 컴파일러 및 개발 도구
dlopen
에 실패하는 경우 할당되지 않고 초기화되지 않은 공유 오브젝트로 인해 더 이상 실패하지 않습니다.
이전에는 dlopen
호출이 실패하면 오류를 보고하기 전에 glibc
동적 링커에서 NODELETE
표시가 있는 공유 개체를 제거하지 않았습니다. 결과적으로 재배치되지 않고 초기화되지 않은 공유 오브젝트가 프로세스 이미지에 남아 있어 어설션 실패 또는 충돌이 발생했습니다. 이번 업데이트를 통해 동적 로더는 보류 중인 NODELETE
상태를 사용하여 dlopen
실패 시 공유 개체를 제거한 후 이를 영구적으로 NODELETE
로 표시합니다. 결과적으로 프로세스가 재배치되지 않은 오브젝트를 그대로 두지 않습니다. 또한 ELF 생성자와 구조자가 실행되는 동안 지연 바인딩 오류는 이제 프로세스를 종료합니다.
64비트 ARM 아키텍처의 고급 SIMD 기능은 lazily가 해결되면 더 이상 잘못 컴파일되지 않습니다.
이전에는 고급 SIMD 기능을 지연할 때 특정 호출자 저장 레지스터를 올바르게 저장하고 복원하지 않은 고급 SIMD의 새로운 CVS(Varlier Procedure Call Standard)가 실패했습니다. 이로 인해 런타임 시 바이너리가 잘못될 수 있었습니다. 이번 업데이트를 통해 기호 테이블의 Advanced SIMD 및 SVE 벡터 함수는 .variant_pcs
와 함께 표시되며 그 결과 동적 링커가 이러한 기능을 조기에 바인딩합니다.
sudo
래퍼 스크립트에서 옵션을 구문 분석합니다
이전에는 /opt/redhat/devtoolset*/root/usr/bin/sudo
래퍼 스크립트가 sudo
옵션을 올바르게 구문 분석하지 않았습니다. 결과적으로 일부 sudo
옵션(예: sudo -i
)을 실행할 수 없습니다. 이번 업데이트를 통해 더 많은 sudo
옵션이 올바르게 구문 분석되고 sudo
래퍼 스크립트가 /usr/bin/sudo
처럼 작동합니다.
glibc
에서 TLS 변수 정렬이 수정되었습니다
이전에는 특정 조건에서 정렬된 스레드-로컬 스토리지(TLS) 데이터가 예상 정렬 없이 인스턴스화될 수 있었습니다. 이번 업데이트를 통해 모든 조건에서 올바르게 정렬되도록 POSIX 스레드 라이브러리 libpthread
가 향상되었습니다. 결과적으로 정렬된 TLS 데이터가 올바른 정렬을 통해 모든 스레드에 대해 올바르게 인스턴스화됩니다.
EINTR 또는 E
AGAIN
오류 다음에 반복된 pututxline
호출이 더 이상 utmp 파일이 손상되지
않음
pututxline
함수가 잠금을 획득하려고 시도하고 시간 내에 성공하지 못하면 이 함수는 EINTR 또는 E
AGAIN
오류 코드를 반환합니다. 이전에는 pututxline
을 즉시 호출하여 잠금을 얻기 위해 관리하면 utmp
파일에서 이미 할당된 일치하는 슬롯을 사용하지 않았지만 다른 항목을 추가했습니다. 그 결과 사용되지 않은 이러한 항목은 utmp
파일의 크기를 크게 높였습니다. 이번 업데이트에서는 문제가 해결되어 이제 utmp
파일에 항목이 올바르게 추가됩니다.
내부 오류가 발생할 때 더 이상 mtrace
가 중단되지 않습니다
이전에는 mtrace
툴 구현의 결함으로 인해 메모리 추적이 중단될 수 있었습니다. 이 문제를 해결하기 위해 mtrace
메모리 추적 구현이 내부 오류가 발생해도 중단되지 않도록 더욱 강력해졌습니다. 결과적으로 사용자가 mtrace
를 호출할 수 있으며 더 이상 중단되지 않고 바인딩된 시간으로 완료합니다.
fork
기능은 pthread_atfork
사용과 관련된 특정 교착 상태를 방지합니다.
이전 버전에서는 프로그램이 atfork
핸들러를 등록하고 비동기-신호 처리기에서 포크
를 호출한 경우 내부 구현 의존적 잠금의 결함으로 인해 프로그램이 중단될 수 있었습니다. 이번 업데이트를 통해 단일 스레드 프로그램에서 fork
및 해당 atfork
핸들러 구현이 조정되어 교착 상태가 발생하지 않습니다.
strstr
는 더 이상 잘린 패턴에 대해 잘못된 일치 항목을 반환하지 않습니다
특정 IBM Z 플랫폼(이전 arch13으로 알려짐)에서 페이지 경계를 통과하는 검색 패턴을 처리할 때 strstr
함수가 CPU 레지스터를 올바르게 업데이트하지 않았습니다. 그 결과 strstr
가 잘못된 일치를 반환했습니다. 이번 업데이트에서는 문제가 해결되어 strstr
가 언급된 시나리오에서 예상대로 작동합니다.
glibc
에서 c.UTF-8 로케일 소스 줄임표 표현식이 수정되었습니다.
이전에는 C.UTF-8 소스 로케일의 결함으로 인해 U+10000 이상의 모든 유니코드 코드 포인트에 배치 가중치가 없었습니다. 그 결과 U+10000 이상의 모든 코드 포인트는 예상대로 조회되지 않았습니다. C.UTF-8 소스 로케일이 수정되었으며 새로 컴파일된 바이너리 로케일의 모든 유니코드 코드 포인트에 대한 배치 가중치가 있습니다. 컴파일된 C.UTF-8 로케일은 이번 수정의 결과로 5.3MiB 더 큽니다.
getpwent()를 호출하지 않고
를 호출할 때 setpwent()
glibc
가 더 이상 실패하지 않습니다.
/etc/nsswitch.conf
파일이 Berkeley DB (db
) 암호 공급자를 가리키는 경우, 먼저 setpwent()를 호출하지 않고
getpwent()
함수를 사용하여 데이터를 요청할 수 있습니다.endpwent()
함수를 호출할 때, 새 쿼리를 허용하도록 end
에 대한 추가 호출으로 pwent()를 재설정할 수 없기 때문에
pwent()setpwent()
를 먼저 호출하지 않고 getglibc
가 실패했습니다. 이번 업데이트에서는 문제가 해결되었습니다. 결과적으로 endpwent()로 하나의 쿼리를 종료하면 set
pwent()
를 호출하지 않아도 getpwent()
에 대한 추가 호출이 새 쿼리를 시작합니다.
ltrace
는 강화된 바이너리에서 시스템 호출을 추적할 수 있음
이전에는 ltrace
가 AMD 및 Intel 64비트 아키텍처에서 시스템 바이너리와 같은 강화된 특정 바이너리에서 결과를 생성하지 않았습니다. 이번 업데이트를 통해 이제 ltrace
가 강화된 바이너리에서 시스템 호출을 추적할 수 있습니다.
(BZ#1655368)
Intel의 JCC 취약점이 더 이상 GCC 컴파일러에서 상당한 성능 저하를 초래하지 않음
특정 Intel CPU는 JCC(Jump Conditional Code) 버그의 영향을 받기 때문에 시스템 지침이 잘못 실행됩니다. 결과적으로 영향을 받는 CPU가 프로그램을 제대로 실행하지 못할 수 있습니다. 전체 수정을 위해서는 취약한 CPU의 마이크로 코드를 업데이트하여 성능 저하를 일으킬 수 있습니다. 이번 업데이트를 통해 어셈블러에서 성능 손실을 줄이는 데 도움이 되는 해결 방법을 사용할 수 있습니다. 해결방법은 기본적으로 활성화되어 있지 않습니다.
해결방법을 적용하려면 GCC를 -Wa,-mbranches-with-32B-boundaries
명령줄 옵션과 함께 사용하여 프로그램을 다시 컴파일합니다. 이 명령줄 옵션으로 다시 컴파일된 프로그램은 JCC 취약점의 영향을 받지 않지만 시스템을 완전히 보호하는 데 여전히 마이크로 코드 업데이트가 필요합니다.
해결방법을 적용하면 프로그램의 크기가 증가하며 재컴파일이 없으면 성능이 저하될 수 있습니다.
병렬 빌드를 사용할 때 더 이상
느려지지 않음
이전에는 병렬 빌드를 실행하는 동안 전환을
기다리는 동안 하위 프로세스가 일시적으로 응답하지 않을 수 있었습니다. 결과적으로 높은 -j
값이 있는 빌드가 더 낮은 유효 -j
값에서 느려지거나 실행되었습니다. 이번 업데이트를 통해 이제 make
의 작업 제어 논리가 차단되지 않았습니다. 결과적으로 상위 -j
값이 있는 빌드가 full -j
속도로 실행됩니다.
ltrace 툴에서 함수
호출을 올바르게 보고합니다
모든 RHEL 구성 요소에 적용된 바이너리 강화 기능이 개선되어 이전에 ltrace
툴에서 RHEL 구성 요소의 바이너리 파일의 함수 호출을 탐지할 수 없었습니다. 결과적으로 이러한 바이너리 파일에 사용될 때 탐지된 호출을 보고하지 않았기 때문에 ltrace
출력이 비어 있었습니다. 이번 업데이트에서는 ltrace
가 함수 호출을 처리하는 방식이 수정되어 설명된 문제가 발생하지 않습니다.
(BZ#1618748)