Glibc 2.31 Издаване на системна библиотека

След шест месеца разработка публикувани издание на системната библиотека GNU C библиотека (glibc) 2.31, който напълно отговаря на изискванията на стандартите ISO C11 и POSIX.1-2008. Новата версия включва корекции от 58 разработчици.

От тези, внедрени в Glibc 2.31 подобрения можете да отбележите:

  • Добавен макрос _ISOC2X_SOURCE за активиране на способности, дефинирани в проекта на бъдещия ISO стандарт C2X. Тези функции са активирани и при използване на макроса _GNU_SOURCE или при изграждане в gcc с флага „-std=gnu2x“;
  • За функциите, дефинирани в заглавния файл "math.h", които закръглят резултатите си до по-малък тип, съответните макроси от общ тип са предложени във файла "tgmath.h", както се изисква от спецификациите TS 18661-1:2014 и TS 18661-3: 2015 г.;
  • Добавена е функция pthread_clockjoin_np(), която изчаква нишката да завърши, като взема предвид таймаута (ако таймаутът настъпи преди завършването, функцията ще върне грешка). За разлика от pthread_timedjoin_np(), в pthread_clockjoin_np() е възможно да се определи вида на таймера за изчисляване на времето за изчакване - CLOCK_MONOTONIC (отчита времето, прекарано от системата в режим на заспиване) или CLOCK_REALTIME;
  • DNS резолверът вече поддържа опцията за доверие в /etc/resolv.conf и флага RES_TRUSTAD в _res.options, когато е зададен, флагът DNSSEC се предава в DNS заявки AD (удостоверени данни). В този режим AD флагът, зададен от сървъра, става достъпен за приложения, които извикват функции като res_search(). По подразбиране, ако предложените опции не са зададени, glibc не указва AD флага в заявките и автоматично го изчиства в отговорите, което показва, че DNSSEC проверките липсват;
  • Изграждането на работещи системни обвързвания за Glibc вече не изисква инсталиране на заглавните файлове на ядрото на Linux. Изключение прави 64-битовата RISC-V архитектура;
  • Елиминиран уязвимост CVE-2019 19126-, което ви позволява да заобиколите защитата
    ASLR в програми с флага setuid и определя оформлението на адреса в заредени библиотеки чрез манипулиране на променливата на средата LD_PREFER_MAP_32BIT_EXEC.

Промени, които нарушават съвместимостта:

  • totalorder(), totalordermag() и подобни функции за други типове с плаваща запетая вече приемат указатели като аргументи, за да премахнат предупрежденията за преобразуване на стойности в състояние NaN, в съответствие с препоръките на TS 18661-1, предложени за бъдещия стандарт C2X.
    Съществуващите изпълними файлове, които предават директно аргументи с плаваща запетая, ще продължат да работят без модификация;

  • Отдавна остарялата функция stime вече не е налична за двоични файлове, свързани с glibc, и нейната дефиниция е премахната от time.h. За да зададете системното време, използвайте функцията clock_settime. В бъдеще планираме да премахнем остарялата функция ftime, както и заглавния файл sys/timeb.h (gettimeofday или clock_gettime трябва да се използват вместо ftime);
  • Функцията gettimeofday вече не предава информация за часовата зона в цялата система (тази функция беше уместна в дните на 4.2-BSD и беше отхвърлена от много години). На аргумента 'tzp' сега трябва да бъде подаден нулев указател и функцията localtime() трябва да се използва за получаване на информация за часовата зона въз основа на текущото време. Извикването на gettimeofday с ненулев аргумент 'tzp' ще върне празни полета tz_minuteswest и tz_dsttime в структурата на часовата зона. Самата функция gettimeofday е отхвърлена от POSIX (clock_gettime се препоръчва вместо gettimeofday), но няма планове за премахването й от glibc;
  • settimeofday вече не поддържа едновременно предаване на параметри за задаване на часа и отместването за коригиране на времето. Когато извиквате settimeofday, един от аргументите (време или отместване) вече трябва да бъде зададен на нула, в противен случай извикването на функцията ще се провали с грешка 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

Добавяне на нов коментар