پس از شش ماه توسعه، کتابخانه سیستمی GNU C Library (glibc) 2.34 منتشر شد که به طور کامل با الزامات استانداردهای ISO C11 و POSIX.1-2017 مطابقت دارد. نسخه جدید شامل اصلاحاتی از 66 توسعه دهنده است.
برخی از بهبودهای اجرا شده در Glibc 2.34 عبارتند از:
- کتابخانه های libpthread، libdl، libutil و libanl در ساختار اصلی libc یکپارچه شده اند، استفاده از عملکرد آنها در برنامه ها دیگر نیازی به پیوند با استفاده از پرچم های -lpthread، -ldl، -lutil و -lanl ندارد. مقدمات برای ادغام libresolv در libc انجام شده است. یکپارچهسازی فرآیند بهروزرسانی یکپارچهتر glibc را امکانپذیر میکند و اجرای زمان اجرا را سادهتر میکند. کتابخانههای Stub برای ارائه سازگاری با برنامههای ساخته شده با نسخههای قدیمیتر glibc ارائه شدهاند. با توجه به گسترش تعداد ساختارها و توابع ارائه شده در glibc، ممکن است مشکلاتی در برنامههایی ایجاد شود که در آنها تلاقی نامها با کتابخانههای استفاده نشده قبلی libpthread، libdl، libutil، libresolv و libanl وجود دارد.
- امکان استفاده از نوع time_t 64 بیتی را در پیکربندی هایی که به طور سنتی از نوع time_t 32 بیتی استفاده می کردند، فراهم می کند. در چنین پیکربندیهایی، برای مثال در سیستمهای x86، پیشفرض همچنان 32 بیت time_t است، اما اکنون میتوان این رفتار را با استفاده از ماکرو "_TIME_BITS" تغییر داد. این ویژگی فقط در سیستم هایی با حداقل هسته لینوکس نسخه 5.1 موجود است.
- تابع _Fork، جایگزینی برای تابع فورک که الزامات "async-signal-safe" را برآورده می کند، اضافه شده است. امکان تماس ایمن از کنترل کننده های سیگنال. در طول اجرای _Fork، یک محیط حداقل ایجاد میشود که برای فراخوانی توابع در کنترلکنندههای سیگنال مانند raise و execve بدون درگیر کردن ویژگیهایی که ممکن است قفل یا حالت داخلی را تغییر دهند، کافی است. فراخوانی _Fork در نسخه بعدی استاندارد POSIX تعریف خواهد شد، اما در حال حاضر به عنوان یک افزونه گنو گنجانده شده است.
- برای پلتفرم لینوکس، تابع execveat پیاده سازی شده است که به شما امکان می دهد یک فایل اجرایی را از یک توصیفگر فایل باز اجرا کنید. تابع جدید همچنین در اجرای فراخوانی fexecve استفاده میشود که در هنگام راهاندازی به شبه FS /proc نصب شده نیاز ندارد.
- تابع timespec_getres، تعریف شده در پیش نویس استاندارد ISO C2X اضافه شده است، که تابع timespec_get را با قابلیت هایی مشابه تابع Clock_getres POSIX گسترش می دهد.
- تابع ()close_range اضافه شد، که به یک فرآیند اجازه میدهد تا طیف وسیعی از توصیفگرهای فایل باز را به یکباره ببندد. این تابع در سیستم هایی با هسته لینوکس حداقل نسخه 5.9 موجود است.
- توابع closefrom و posix_spawn_file_actions_addclosefrom_np اضافه شده است که به شما امکان می دهد همه توصیفگرهای فایل را به یکباره ببندید، تعداد آنها بیشتر یا مساوی با مقدار مشخص شده است.
- در حالتهای "_DYNAMIC_STACK_SIZE_SOURCE" و "_GNU_SOURCE"، PTHREAD_STACK_MIN، MINSIGSTKSZ و SIGSTKSZ دیگر ثابت نیستند، و امکان پشتیبانی از مجموعههای ثبت با اندازه پویا مانند موارد ارائه شده در برنامه افزودنی ARM SVE را فراهم میکنند.
- پیوند دهنده گزینه "--list-diagnostics" را برای نمایش اطلاعات مربوط به عملیات تعریف IFUNC (عملکرد غیر مستقیم) و انتخاب زیر شاخه glibc-hwcaps پیاده سازی می کند.
- ماکرو __STDC_WANT_IEC_60559_EXT__ برای بررسی وجود عملکردهای تعریف شده در ضمیمه F مشخصات ISO C2X طراحی شده است.
- برای سیستمهای powerpc64*، گزینه «--disable-scv» پیادهسازی شده است که به شما امکان میدهد بدون پشتیبانی از دستورالعمل scv، glibc بسازید.
- فقط حداقل مجموعه ای از ماژول های هسته gconv در فایل gconv-modules باقی مانده است و بقیه به یک فایل اضافی gconv-modules-extra.conf که در فهرست gconv-modules.d قرار دارد منتقل می شوند.
- برای پلتفرم لینوکس، پارامتر glibc.pthread.stack_cache_size پیاده سازی شده است که می توان از آن برای پیکربندی اندازه کش پشته pthread استفاده کرد.
- تابع inet_neta از فایل هدر منسوخ شده است ، و همچنین توابع مختلف که به ندرت استفاده می شوند از (dn_count_labels, fp_nquery, fp_query, fp_resstat, hostalias, loc_aton, loc_ntoa, p_cdname, p_cdnname, p_class, p_fqname, p_fqnname, p_option, p_query, p_rcode_, reputhours, p_rcode_, reputhours, p_rcode_, reputhours, p_rcode_, reputhours, p_rcode_, p_typestalia, p_cdn سرور، استعلام res_name، res_queriesmatch، res_randomid، sym_ntop، sym_ntos، sym_ston) و (ns_datetosecs، ns_format_ttl، ns_makecanon، ns_parse_ttl، ns_samedomain، ns_samename، ns_sprintrr، ns_sprintrrf، ns_subdomain). به جای این توابع، توصیه می شود از کتابخانه های جداگانه برای کار با DNS استفاده کنید.
- توابع pthread_mutex_consistent_np، thread_mutexattr_getrobust_np، pthread_mutexattr_setrobust_np و pthread_yield منسوخ شده اند و به جای آن، pthread_mutex_consistent، thread_mutexattr_getrobust_ و باید استفاده شود. .
- استفاده از پیوندهای نمادین برای اتصال اشیاء مشترک نصب شده به نسخه Glibc متوقف شد. چنین اشیایی اکنون همانطور که هستند نصب می شوند (مثلاً libc.so.6 اکنون یک فایل است نه پیوندی به libc-2.34.so).
- به طور پیشفرض، ویژگیهای اشکالزدایی در malloc غیرفعال هستند، مانند MALLOC_CHECK_ (glibc.malloc.check)، mtrace() و mcheck()، که به کتابخانه جداگانه libc_malloc_debug.so منتقل میشوند، که توابع منسوخ malloc_get_state و malloc_set_state نیز در آن قرار دارند. منتقل شده است.
- در لینوکس، توابعی مانند shm_open و sem_open اکنون برای کار کردن به دستگاه /dev/shm نیاز دارند.
- آسیب پذیری ها رفع شد:
- CVE-2021-27645: فرآیند nscd (شیب ذخیرهسازی سرور نام) به دلیل تماس مضاعف با تابع رایگان هنگام پردازش درخواستهای گروه شبکه ساختهشده خاص از کار میافتد.
- CVE-2021-33574: هنگام استفاده از نوع اعلان SIGEV_THREAD با ویژگی رشته ای که یک ماسک تمایل CPU جایگزین برای آن تنظیم شده است، به یک ناحیه حافظه از قبل آزاد شده (استفاده پس از آزاد شدن) در عملکرد mq_notify دسترسی پیدا کنید. این مشکل می تواند منجر به خرابی شود، اما دیگر گزینه های حمله را نمی توان رد کرد.
- CVE-2021-35942: سرریز اندازه پارامتر در تابع wordexp می تواند باعث از کار افتادن برنامه شود.
منبع: opennet.ru