Glibc 2.34 ra mắt với các bản sửa lỗi, các chức năng mới cho Linux và hơn thế nữa

Phiên bản mới của Glibc, 2.34, vừa được công bố. Sau sáu tháng phát triển, phiên bản này bao gồm một số thay đổi quan trọng, đáng chú ý nhất là việc bổ sung các thư viện libpthread, libdl, libutil và libanl, cũng như khắc phục nhiều lỗi, trong đó có một lỗi gây ra sự cố treo máy.

Đối với những người chưa quen với Glibc, đây là một thư viện C của GNU, thường được gọi là glibc, và là thư viện thời gian chạy chuẩn cho ngôn ngữ C của GNU. Trên các hệ thống có sử dụng nó, thư viện C này, cung cấp và định nghĩa các lệnh gọi hệ thống và các chức năng cơ bản khác, được hầu hết các chương trình sử dụng.

Các tính năng mới chính của Glibc 2.34

Trong phiên bản Glibc 2.34 mới này, các thư viện chính libpthread, libdl, libutil và libanl đã được tích hợp ; việc sử dụng chức năng của chúng trong các ứng dụng không còn yêu cầu liên kết chúng với các chỉ báo -lpthread, -ldl, -lutil và -lanl nữa.

Hơn nữa, tài liệu cũng đề cập đến việc đã có những chuẩn bị để tích hợp libresolv vào libc, điều này sẽ giúp quá trình nâng cấp glibc diễn ra suôn sẻ hơn và đơn giản hóa việc triển khai thời gian chạy. Các thư viện giả lập cũng đã được cung cấp để đảm bảo khả năng tương thích với các ứng dụng được xây dựng bằng các phiên bản glibc cũ hơn.

Trong số những thay đổi tập trung vào Linux trong Glibc 2.34, đáng chú ý nhất là khả năng bổ sung sử dụng kiểu dữ liệu time_t 64-bit trong các cấu hình trước đây chỉ sử dụng kiểu dữ liệu time_t 32-bit . Tính năng này chỉ khả dụng trên các hệ thống có phiên bản kernel 5.1 trở lên.

Một thay đổi khác dành riêng cho Linux là việc triển khai hàm `execveat` , cho phép bạn thực thi một tệp thực thi từ một bộ mô tả tệp đang mở . Hàm mới này cũng được sử dụng trong việc triển khai lệnh gọi `fexecve`, lệnh này không yêu cầu hệ thống tệp giả `/proc` phải được gắn kết khi khởi động.

Hàm close_range() cũng được thêm vào, khả dụng cho các phiên bản Linux 5.9 trở lên và có thể được sử dụng để cho phép một tiến trình đóng toàn bộ phạm vi các mô tả tệp đang mở cùng một lúc. Ngoài ra, tham số glibc.pthread.stack_cache_size đã được triển khai, có thể được sử dụng để điều chỉnh kích thước bộ nhớ đệm ngăn xếp pthread.

Hơn nữa, hàm `_Fork` đã được thêm vào, thay thế cho hàm `fork` đáp ứng yêu cầu "async-signal-safe", nghĩa là nó có thể được gọi một cách an toàn từ các trình xử lý tín hiệu. Trong quá trình thực thi `_Fork`, một môi trường tối thiểu được hình thành, đủ để gọi các hàm trong trình xử lý tín hiệu như `raise` và `execute`, mà không cần gọi các tính năng có thể thay đổi khóa hoặc trạng thái nội bộ.

Đối với một phần của các lỗ hổng được khắc phục trong Glibc 2.34, những điều sau được đề cập:

CVE-2021-27645: Lỗi xảy ra ở tiến trình nscd (trình nền bộ nhớ đệm máy chủ tên miền) do gọi hàm free hai lần trong quá trình xử lý các yêu cầu nhóm mạng được tạo ra đặc biệt.

CVE-2021-33574: Truy cập vào vùng nhớ sử dụng sau khi đã giải phóng (use-after-free) trong hàm mq_notify khi sử dụng loại thông báo SIGEV_THREAD với thuộc tính luồng mà mặt nạ liên kết CPU thay thế được thiết lập. Vấn đề này có thể gây ra sự cố sập chương trình, nhưng không loại trừ các phương thức tấn công khác.

CVE-2021-35942: Lỗi tràn tham số trong hàm wordexp có thể gây sập ứng dụng.

Những thay đổi đáng chú ý khác bao gồm:

  • Hàm timespec_getres, được định nghĩa trong tiêu chuẩn ISO C2X dự thảo, đã được thêm vào và hàm timespec_get đã được tăng lên với các khả năng tương tự như hàm clock_getres của POSIX.
  • Trong tệp gconv-modules, chỉ còn lại một tập hợp tối thiểu các mô-đun gconv chính và phần còn lại được chuyển sang tệp gconv-modules-extra.conf bổ sung nằm trong thư mục gconv-modules.d.
  • Việc sử dụng các liên kết tượng trưng để liên kết các đối tượng chia sẻ có thể cài đặt với phiên bản Glibc đã bị loại bỏ. Các đối tượng này hiện đã được cài đặt như hiện tại (ví dụ: libc.so.6 bây giờ là một tệp chứ không phải là một liên kết đến libc-2.34.so).
  • Trên Linux, các chức năng như shm_open và sem_open hiện yêu cầu hệ thống tệp cho bộ nhớ dùng chung được gắn trên điểm gắn kết / dev / shm.

Cuối cùng, nếu bạn muốn tìm hiểu thêm về phiên bản mới này, bạn có thể xem chi tiết tại liên kết sau.


Thêm vào danh sách nguồn ưu tiên trên Google.