Lançamento da biblioteca de sistema Glibc 2.31

Após seis meses de desenvolvimento foi publicado lançamento da biblioteca do sistema GNU C Library (glibc) 2.31, que atende completamente aos requisitos das normas ISO C11 e POSIX.1-2008. A nova versão inclui correções de 58 desenvolvedores.

Implementadas no Glibc 2.31 melhorias pode-se destacar:

  • Adicionado o macro _ISOC2X_SOURCE para incluir capacidades definidas no rascunho do futuro padrão ISO C2X. Essas capacidades também são incluídas ao usar o macro _GNU_SOURCE ou ao compilar no gcc com a flag "-std=gnu2x";
  • Para as funções definidas no arquivo de cabeçalho "math.h", que arredondam seus resultados para um tipo menor, o arquivo "tgmath.h" propõe os macros de tipo genérico correspondentes, conforme exigido pelas especificações TS 18661-1:2014 e TS 18661-3:2015;
  • Adicionada a função pthread_clockjoin_np(), que aguarda a conclusão da thread considerando o timeout (se o timeout ocorrer antes da conclusão, a função retornará um erro). Ao contrário de pthread_timedjoin_np(), no pthread_clockjoin_np() é permitido definir o tipo de timer para calcular o timeout — CLOCK_MONOTONIC (que considera o tempo passado pelo sistema em modo de espera) ou CLOCK_REALTIME;
  • O resolutor DNS agora suporta a opção trust-ad em /etc/resolv.conf e a flag RES_TRUSTAD em _res.options, nas quais, se ativadas, os pedidos DNS incluirão a flag DNSSEC AD (dados autenticados). Nesse modo, a flag AD definida pelo servidor fica disponível para aplicativos que chamam funções como res_search(). Por padrão, se as opções apresentadas não forem ativadas, a glibc não marca a flag AD nas solicitações e a limpa automaticamente nas respostas, indicando a ausência de verificação DNSSEC;
  • Para compilar bindings de chamadas de sistema para Glibc, não é mais necessário instalar os arquivos de cabeçalho do kernel Linux. A exceção é a arquitetura RISC-V de 64 bits;
  • Eliminada uma vulnerabilidade CVE-2019-19126, que permite contornar a proteção
    ASLR em programas com flag setuid e determinar o layout de endereços em bibliotecas carregadas através da manipulação da variável de ambiente LD_PREFER_MAP_32BIT_EXEC.

Mudanças que quebram compatibilidade:

  • Em totalorder(), totalordermag() e funções similares para outros tipos de ponto flutuante agora aceitam como argumento ponteiros para evitar avisos de conversão de valores em estado NaN, conforme recomendado pela TS 18661-1, proposta para o futuro padrão C2X.
    Os arquivos executáveis existentes, nos quais argumentos de ponto flutuante são passados diretamente, continuarão funcionando sem alteração;
  • A função obsoleta stime, há muito anunciada, agora não está disponível para arquivos binários vinculados ao glibc, e sua definição foi removida de time.h. Para definir o horário do sistema, deve-se usar a função clock_settime. No futuro, planeja-se remover também a função ftime, que foi marcada como obsoleta, assim como o arquivo de cabeçalho sys/timeb.h (em vez de ftime, deve-se usar gettimeofday ou clock_gettime);
  • A função gettimeofday agora não transmite informações sobre o fuso horário do sistema (esse recurso era relevante na época do 4.2-BSD e foi anunciado como obsoleto há muitos anos). No argumento ‘tzp’, deve-se passar um ponteiro nulo, e para obter informações sobre o fuso horário em relação ao horário atual, deve-se usar a função localtime(). Ao chamar gettimeofday com um argumento ‘tzp’ não nulo, os campos tz_minuteswest e tz_dsttime na estrutura timezone retornarão vazios. A própria função gettimeofday é considerada obsoleta no POSIX (em vez de gettimeofday, recomenda-se usar clock_gettime), mas não está planejada para ser removida do glibc;
  • No settimeofday, o suporte para a transmissão simultânea de parâmetros para definir o horário e a correção do deslocamento de horário foi interrompido. Ao chamar settimeofday, um dos argumentos (horário ou deslocamento) agora deve obrigatoriamente ser definido como nulo, caso contrário, a chamada da função resultará em erro EINVAL. Assim como gettimeofday, a função settimeofday é considerada obsoleta no POSIX e recomenda-se usar a função clock_settime ou a família de funções adjtime;
  • O suporte para a arquitetura SPARC ISA v7 foi interrompido (o suporte ao v8 é mantido, mas somente para processadores que suportam instruções CAS, como os processadores LEON, mas não os processadores SuperSPARC).
  • Em caso de falha na vinculação em modo “lazy“, onde o vinculador não procura os símbolos da função até a primeira chamada dessa função, a função dlopen agora força o encerramento do processo (anteriormente, em caso de falha, retornava NULL);
  • Para o ABI MIPS hard-float, agora é usado um stack executável, a menos que durante a construção seja explicitamente definido um limite para o uso do núcleo Linux 4.8+ através do parâmetro “—enable-kernel=4.8.0” (com núcleos até 4.8, falhas são observadas para algumas configurações MIPS);
  • As ligações sobre chamadas de sistema relacionadas à manipulação de tempo foram adaptadas para usar a chamada de sistema time64, quando disponível (em sistemas de 32 bits, a glibc tenta primeiro usar as novas chamadas de sistema que manipulam o tipo de tempo de 64 bits e, se não houver, recua para as antigas chamadas de 32 bits).

Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster