[GTER] Correção / Atualização
Mauro Carvalho Chehab
mauro_chehab at yahoo.com.br
Wed Jun 16 01:20:08 -03 2004
Christopher Giese (SkyWarrior) wrote:
>Saudações....
>
>para quem roda algum server linux em produção
>
>ler urgente
>http://www.linuxreviews.org/news/2004-06-11_kernel_crash/index.html
>
>e boa sorte
>
>
Apesar de ter sido apontada a falha como grave, para sua exploração
exige permissão para acesso à máquina (terminal, telnet ou ssh). Se
explorada, os logs acesso provavelmente apontarão os responsáveis.
Trata-se de uma "race condition", onde são geradas excessões de
ponto flutuante em alta velocidade, dentro de um tratamento de sinal,
saindo do código imediatamente após gerada a excessão - algo bastante
incomum em um código real.
De qualquer forma, já existe solução (bastante simples por sinal),
que consiste na limpeza das excessões de ponto flutuante após o retorno
ao kernel das rotinas de final de tratamento de excessão.
Em todos os kernels afetados, a solução é, dentro do código i387.h
(nas arquiteturas intel e AMD64), substituir, na rotina clear_fpu (ou
__clear_fpu), linha com "fwait" por "fnclex; fwait", conforme o patch
abaixo (para i386, kernel 2.6):
diff -Nru a/include/asm-i386/i387.h b/include/asm-i386/i387.h
--- linux-2.6/include/asm-i386/i387.h 2004-05-06 12:26:10 -07:00
+++ linux-2.6/include/asm-i386/i387.h 2004-06-12 19:12:23 -07:00
@@ -51,7 +51,7 @@
#define __clear_fpu( tsk ) \
do { \
if ((tsk)->thread_info->status & TS_USEDFPU) { \
- asm volatile("fwait"); \
+ asm volatile("fnclex ; fwait"); \
(tsk)->thread_info->status &= ~TS_USEDFPU; \
stts(); \
} \
No site da linuxrevews existe o código "completo" do patch (que
altera em âmbas as arquiteturas afetadas).
Apliquei a solução com sucesso em um kernel 2.6.6, sem que fossem
notados efeitos colaterais.
More information about the gter
mailing list