انتشار کتابخانه سیستم Glibc 2.31

پس از شش ماه توسعه منتشر شد انتشار کتابخانه سیستم کتابخانه گنو سی (glibc) 2.31، که به طور کامل با الزامات استاندارد ISO C11 و POSIX.1-2008 مطابقت دارد. نسخه جدید شامل اصلاحاتی از 58 توسعه دهنده است.

از موارد اجرا شده در Glibc 2.30 بهبودها می توانید توجه داشته باشید:

  • اضافه شده _ISOC2X_SOURCE ماکرو برای فعال کردن قابلیت های تعریف شده در پیش نویس استاندارد ISO آینده C2X. این ویژگی ها همچنین هنگام استفاده از ماکرو _GNU_SOURCE یا هنگام ساختن در gcc با پرچم "-std=gnu2x" فعال می شوند.
  • برای توابع تعریف شده در فایل هدر "math.h" که نتایج خود را به یک نوع کوچکتر گرد می کنند، ماکروهای نوع عمومی مربوطه در فایل "tgmath.h" پیشنهاد شده اند، همانطور که توسط مشخصات TS 18661-1:2014 و TS لازم است. 18661-3: 2015;
  • تابع pthread_clockjoin_np() اضافه شد، که با در نظر گرفتن مهلت زمانی منتظر می ماند تا thread تکمیل شود (اگر مهلت قبل از تکمیل رخ دهد، تابع یک خطا برمی گرداند). بر خلاف pthread_timedjoin_np()، در pthread_clockjoin_np() می توان نوع تایمر را برای محاسبه مهلت تعیین کرد - CLOCK_MONOTONIC (زمان صرف شده توسط سیستم در حالت خواب را در نظر می گیرد) یا CLOCK_REALTIME.
  • حل‌کننده DNS اکنون از گزینه trust-ad در /etc/resolv.conf و پرچم RES_TRUSTAD در _res.options پشتیبانی می‌کند، در صورت تنظیم، پرچم DNSSEC در درخواست‌های DNS منتقل می‌شود. AD (داده های تایید شده). در این حالت، پرچم AD تنظیم شده توسط سرور در دسترس برنامه هایی قرار می گیرد که توابعی مانند res_search() را فراخوانی می کنند. به طور پیش فرض، اگر گزینه های پیشنهادی تنظیم نشده باشند، glibc پرچم AD را در درخواست ها مشخص نمی کند و به طور خودکار آن را در پاسخ ها پاک می کند، که نشان می دهد بررسی های DNSSEC وجود ندارد.
  • ایجاد پیوندهای فراخوانی سیستم کاری برای Glibc دیگر نیازی به نصب فایل‌های هدر هسته لینوکس ندارد. استثنا معماری RISC-V 64 بیتی است.
  • حذف شد آسیب پذیری CVE-2019-19126، که به شما امکان می دهد محافظت را دور بزنید
    ASLR در برنامه هایی با پرچم setuid و تعیین طرح آدرس در کتابخانه های بارگذاری شده از طریق دستکاری متغیر محیطی LD_PREFER_MAP_32BIT_EXEC.

تغییراتی که سازگاری را از بین می برد:

  • totalorder()، totalordermag() و توابع مشابه برای سایر انواع ممیز شناور اکنون نشانگرها را به عنوان آرگومان برای حذف هشدارها در مورد تبدیل مقادیر در حالت می پذیرند. NaN، مطابق با توصیه های TS 18661-1 پیشنهاد شده برای استاندارد آینده C2X.
    فایل های اجرایی موجود که به طور مستقیم آرگومان های ممیز شناور را ارسال می کنند، بدون تغییر به کار خود ادامه می دهند.

  • تابع زمان طولانی منسوخ شده دیگر برای باینری های مرتبط با glibc در دسترس نیست و تعریف آن از time.h حذف شده است. برای تنظیم زمان سیستم، از تابع clock_settime استفاده کنید. در آینده، ما قصد داریم تابع ftime منسوخ شده و همچنین فایل هدر sys/timeb.h را حذف کنیم (به جای ftime باید از gettimeofday یا clock_gettime استفاده شود).
  • Функция gettimeofday отныне не передаёт сведения о общесистемном часовом поясе (данная возможность была актуальна во времена 4.2-BSD и много лет объявлена устаревшей). В аргументе ‘tzp’ теперь следует передавать нулевой указатель, а для получения сведений о часовом поясе в привязке к текущему времени использовать функцию localtime(). При вызове gettimeofday с ненулевым аргументом ‘tzp’ будут возвращены пустые поля tz_minuteswest и tz_dsttime в структуре timezone. Сама функция gettimeofday считается устаревшей в POSIX (вместо gettimeofday рекомендуется использовать clock_gettime), но удалять её из glibc не планируется;
  • settimeofday دیگر از ارسال همزمان پارامترها برای تنظیم زمان و افست تصحیح زمان پشتیبانی نمی کند. هنگام فراخوانی settimeofday، یکی از آرگومان ها (time یا offset) اکنون باید روی null تنظیم شود، در غیر این صورت فراخوانی تابع با خطای EINVAL ناموفق خواهد بود. مانند gettimeofday، تابع settimeofday توسط POSIX منسوخ شده است و توصیه می شود با تابع clock_settime یا خانواده توابع adjtime جایگزین شود.
  • پشتیبانی از معماری SPARC ISA v7 متوقف شده است (پشتیبانی v8 در حال حاضر حفظ می شود، اما فقط برای پردازنده هایی که از دستورالعمل های CAS پشتیبانی می کنند، مانند پردازنده های LEON، نه پردازنده های SuperSPARC).
  • В случает сбоя связывания в режиме «تنبل"، که در آن پیوند دهنده تا اولین فراخوانی آن تابع، نمادهای یک تابع را جستجو نمی کند، تابع dlopen اکنون فرآیند را مجبور به خاتمه می کند (قبلاً در صورت شکست NULL را برمی گرداند).
  • برای MIPS hard-float ABI، اکنون از پشته اجرایی استفاده می شود، مگر اینکه بیلد به صراحت استفاده از هسته Linux 4.8+ را از طریق پارامتر "-enable-kernel=4.8.0" محدود کند (با کرنل های تا 4.8، خرابی ها وجود دارد. مشاهده شده برای برخی از تنظیمات MIPS)؛
  • پیوندهای مربوط به تماس‌های سیستمی مربوط به دستکاری زمان برای استفاده از تماس سیستمی time64، در صورت وجود، منتقل شده‌اند (در سیستم‌های 32 بیتی، glibc ابتدا تماس‌های سیستمی جدیدی را امتحان می‌کند که نوع زمان 64 بیتی را دستکاری می‌کند، و اگر وجود نداشته باشد، سقوط می‌کند. بازگشت به تماس های 32 بیتی قبلی).

منبع: opennet.ru

اضافه کردن نظر