개선 사항, 버그 수정 등이 포함된 Glibc 2.35 출시

XNUMX개월의 개발 끝에 Glibc 2.35의 새 버전 출시가 발표되었습니다. 어느 66 개발자의 수정 사항 포함 구현된 개선 사항 중 "C.UTF-8" 로케일에 대한 지원이 추가되었음을 알 수 있습니다. 여기에는 모든 유니코드 코드에 대한 데이터 정렬이 포함되지만 저장을 위해 fnmatch, regexec 및 regcomp 함수에서 ASCII 범위 사용으로 제한됩니다. 공간.

로케일은 약 400KB이며 그 중 346KB는 유니코드용 LC_CTYPE 데이터이며 별도로 설치해야 합니다(Glibc에 내장되지 않음). 인코딩 데이터, 문자 유형 정보 및 음역 테이블이 유니코드 14.0.0 사양을 지원하도록 업데이트되었습니다.

눈에 띄는 또 다른 변화는 와이 결과를 더 좁은 유형으로 반올림하는 함수와 매크로를 구현합니다. IEEE 754-2019 사양에 설명된 float, long double, _FloatN 및 _FloatNx 유형의 부동 소수점 수의 최소값과 최대값을 찾기 위한 함수 및 매크로 구현 외에도.

기능을 위해 exp10, 해당 매크로가 헤더 파일에 추가됩니다., 특정 유형에 바인딩되지 않고 _PRINTF_NAN_LEN_MAX 매크로가 추가되었습니다. , ISO C2X 표준 초안에서 제안되었습니다.

동적 연결 시스템은 새로운 분류 알고리즘을 구현합니다. 깊이 검색(DFS)을 사용하는 DSO 루프 종속성을 처리할 때 성능 문제를 해결합니다. DSO 정렬 알고리즘을 선택하기 위해 glibc.rtld.dynamic_sort 매개변수가 제안되며 "1"로 설정하여 이전 알고리즘으로 폴백할 수 있습니다.

게다가 새 기능 '__memcmpeq'에 대한 지원 추가 이 함수의 반환 값이 작업의 완료 상태를 확인하는 데에만 사용되는 경우 'memcmp' 사용을 최적화하기 위해 컴파일러에서 사용하는 ABI로.

그만큼 자동 스레드 등록 지원 Linux 커널 4.18부터 제공되는 rseq(재시작 가능한 시퀀스) 시스템 호출을 사용합니다. rseq 시스템 호출 명령 그룹의 지속적인 실행을 구성할 수 있습니다. 중단되지 않고 그룹의 마지막 명령문으로 결과를 커밋합니다. 기본적으로 다른 스레드에 의해 중단된 경우 정리되고 다시 시도되는 작업의 원자적 실행을 매우 빠르게 수행할 수 있는 기능을 제공합니다.

한편, 제공 모든 실행 파일의 기본 컴파일 PIE(위치 독립 실행 파일) 모드의 내장 프로그램 및 테스트 스위트.

이 동작을 비활성화하려면 "-disable-default-pie" 옵션이 제공됩니다., Linux의 경우 glibc.malloc.hugetlb 설정을 추가하여 mmap 및 sbrk에 대한 MADV_HUGEPAGE 플래그와 함께 madvise 시스템 호출을 사용하거나 mmap 호출에서 MAP_HUGETLB 플래그를 지정하여 대용량 메모리 페이지를 직접 사용하도록 malloc 구현을 변경합니다.

첫 번째 경우에는 madvise 모드에서 투명 Huge Pages를 사용하여 성능 향상을 달성할 수 있고, 두 번째 경우에는 시스템 예약 거대한 페이지(Huge Pages)를 사용할 수 있습니다.

또한 이 새 버전에서는 일부 취약점이 수정되었습니다.

  • CVE-2022-23218, CVE-2022-23219: 복사된 데이터의 크기를 확인하지 않고 파일 이름 매개변수의 내용을 스택에 복사하여 발생하는 svcunix_create 및 clnt_create 함수의 버퍼 오버플로. 스택 보호 없이 "unix" 프로토콜을 사용하여 구축된 애플리케이션의 경우 이 취약점으로 인해 매우 긴 파일 이름을 처리할 때 악성 코드가 실행될 수 있습니다.
  • CVE-2021-3998 : 스택에서 정리되지 않은 잔여 데이터를 포함하는 특정 조건에서 잘못된 값을 반환하여 발생하는 realpath() 함수의 취약점. SUID-root fusermount 프로그램의 경우 취약점을 사용하여 프로세스 메모리에서 중요한 정보를 얻을 수 있습니다(예: 포인터 정보 얻기).
  • CVE-2021-3999 : getcwd() 함수에서 단일 바이트 버퍼 오버플로. 이 문제는 1995년 이후 발생한 버그로 인해 발생합니다. 오버플로를 호출하려면 별도의 마운트 지점 네임스페이스에서 "/" 디렉터리에서 chdir()을 호출하기만 하면 됩니다.

최종적으로 그것에 대해 더 많이 알고 싶다면 당신은에서 세부 사항을 확인할 수 있습니다 다음 링크.