Bản phát hành thư viện hệ thống Glibc 2.31

Sau sáu tháng phát triển xuất bản phát hành thư viện hệ thống Thư viện GNU C (glibc) 2.31, tuân thủ đầy đủ các yêu cầu của tiêu chuẩn ISO C11 và POSIX.1-2008. Bản phát hành mới bao gồm các bản sửa lỗi từ 58 nhà phát triển.

Từ những thứ được triển khai trong Glibc 2.30 cải tiến bạn có thể lưu ý:

  • Đã thêm macro _ISOC2X_SOURCE để kích hoạt các khả năng được xác định trong dự thảo tiêu chuẩn ISO trong tương lai C2X. Các tính năng này cũng được bật khi sử dụng macro _GNU_SOURCE hoặc khi xây dựng trong gcc với cờ “-std=gnu2x”;
  • Đối với các hàm được xác định trong tệp tiêu đề "math.h" làm tròn kết quả của chúng thành loại nhỏ hơn, macro loại chung tương ứng được đề xuất trong tệp "tgmath.h", theo yêu cầu của thông số kỹ thuật TS 18661-1:2014 và TS 18661-3: 2015;
  • Đã thêm hàm pthread_clockjoin_np(), chờ luồng hoàn thành, có tính đến thời gian chờ (nếu thời gian chờ xảy ra trước khi hoàn thành, hàm sẽ trả về lỗi). không giống pthread_timedjoin_np(), trong pthread_clockjoin_np() có thể xác định loại bộ hẹn giờ để tính thời gian chờ - CLOCK_MONOTONIC (có tính đến thời gian mà hệ thống sử dụng ở chế độ ngủ) hoặc CLOCK_REALTIME;
  • Trình phân giải DNS hiện hỗ trợ tùy chọn quảng cáo tin cậy trong /etc/resolv.conf và cờ RES_TRUSTAD trong _res.options, khi được đặt, cờ DNSSEC sẽ được truyền trong các yêu cầu DNS AD (dữ liệu đã được xác thực). Ở chế độ này, cờ AD do máy chủ đặt sẽ khả dụng cho các ứng dụng gọi các hàm như res_search(). Theo mặc định, nếu các tùy chọn được đề xuất không được đặt, glibc sẽ không chỉ định cờ AD trong các yêu cầu và tự động xóa cờ đó trong các phản hồi, cho biết rằng việc kiểm tra DNSSEC bị thiếu;
  • Việc xây dựng các liên kết lệnh gọi hệ thống làm việc cho Glibc không còn yêu cầu cài đặt các tệp tiêu đề nhân Linux nữa. Ngoại lệ là kiến ​​trúc RISC-V 64-bit;
  • Đã loại bỏ sự dễ bị tổn thương CVE-2019-19126, cho phép bạn bỏ qua sự bảo vệ
    ASLR trong các chương trình có cờ setuid và xác định bố cục địa chỉ trong các thư viện được tải thông qua thao tác với biến môi trường LD_PREFER_MAP_32BIT_EXEC.

Những thay đổi phá vỡ tính tương thích:

  • Totalorder(), Totalordermag() và các hàm tương tự cho các kiểu dấu phẩy động khác hiện chấp nhận con trỏ làm đối số để loại bỏ cảnh báo về việc chuyển đổi giá trị ở trạng thái NaN, theo khuyến nghị của TS 18661-1 được đề xuất cho tiêu chuẩn C2X trong tương lai.
    Các tệp thực thi hiện có truyền trực tiếp các đối số dấu phẩy động sẽ tiếp tục chạy mà không cần sửa đổi;

  • Hàm stime không được dùng nữa từ lâu không còn khả dụng cho các tệp nhị phân được liên kết với glibc và định nghĩa của nó đã bị xóa khỏi time.h. Để đặt thời gian hệ thống, hãy sử dụng hàm clock_settime. Trong tương lai, chúng tôi dự định loại bỏ hàm ftime không được dùng nữa, cũng như tệp tiêu đề sys/timeb.h (nên sử dụng gettimeofday hoặc clock_gettime thay vì ftime);
  • Функция gettimeofday отныне не передаёт сведения о общесистемном часовом поясе (данная возможность была актуальна во времена 4.2-BSD и много лет объявлена устаревшей). В аргументе ‘tzp’ теперь следует передавать нулевой указатель, а для получения сведений о часовом поясе в привязке к текущему времени использовать функцию localtime(). При вызове gettimeofday с ненулевым аргументом ‘tzp’ будут возвращены пустые поля tz_minuteswest и tz_dsttime в структуре timezone. Сама функция gettimeofday считается устаревшей в POSIX (вместо gettimeofday рекомендуется использовать clock_gettime), но удалять её из glibc не планируется;
  • settimeofday không còn hỗ trợ truyền đồng thời các tham số để cài đặt thời gian và độ lệch hiệu chỉnh thời gian. Khi gọi settimeofday, một trong các đối số (thời gian hoặc độ lệch) bây giờ phải được đặt thành null, nếu không lệnh gọi hàm sẽ không thành công với lỗi EINVAL. Giống như gettimeofday, hàm settimeofday không được dùng nữa trong POSIX và được khuyến nghị thay thế bằng hàm clock_settime hoặc nhóm hàm adjtime;
  • Hỗ trợ cho kiến ​​trúc SPARC ISA v7 đã bị ngừng (hiện tại hỗ trợ v8 vẫn được giữ lại, nhưng chỉ dành cho các bộ xử lý hỗ trợ hướng dẫn CAS, chẳng hạn như bộ xử lý LEON, không phải bộ xử lý SuperSPARC).
  • В случает сбоя связывания в режиме «lười biếng", trong đó trình liên kết không tìm kiếm các ký hiệu của hàm cho đến khi có lệnh gọi đầu tiên đến hàm đó, hàm dlopen hiện buộc quá trình chấm dứt (trước đó trả về NULL khi lỗi);
  • Đối với ABI cứng MIPS, ngăn xếp thực thi hiện được sử dụng, trừ khi bản dựng hạn chế rõ ràng việc sử dụng nhân Linux 4.8+ thông qua tham số “-enable-kernel=4.8.0” (với hạt nhân lên tới 4.8, sẽ xảy ra sự cố được quan sát đối với một số cấu hình MIPS);
  • Các ràng buộc xung quanh lệnh gọi hệ thống liên quan đến thao tác thời gian đã được chuyển sang sử dụng lệnh gọi hệ thống time64, nếu có (trên hệ thống 32 bit, trước tiên, glibc thử các lệnh gọi hệ thống mới thao túng loại thời gian 64 bit và nếu không có lệnh gọi hệ thống này sẽ bị loại bỏ. quay lại các cuộc gọi 32-bit cũ).

Nguồn: opennet.ru

Thêm một lời nhận xét