2015-12-15 5 views
2

Я наблюдал за потоком в списке рассылки OpenSSL. Поток называется CBC ciphers + TLS 1.0 protocol does not work in OpenSSL 1.0.2d.Является ли поведенческое изменение из-за оптимизации с «определенной реализацией» законной или ожидаемой?

OpenSSL 1.0.2d had intermittent problems due to the following. Он появился под компилятором Microsoft WinCE. Идея состоит в том, чтобы распространять высокий бит на все остальные биты:

#define DUPLICATE_MSB_TO_ALL(x) ((unsigned)((int)(x) >> (sizeof(int)*8-1))) 
#define DUPLICATE_MSB_TO_ALL_8(x) ((unsigned char)(DUPLICATE_MSB_TO_ALL(x))) 

static unsigned char constant_time_eq_8(unsigned a, unsigned b) 
{ 
    unsigned c = a^b; 
    c--; 
    return DUPLICATE_MSB_TO_ALL_8(c); 
} 

OpenSSL пытается следовать за C89. Я считаю, что это implementation defined behavior due to shifting of a negative value on a 2's compliment machine.

Однако, что обнаружил ОП, на него повлияли оптимизации. Без оптимизация кода привела к правильным результатам. С оптимизация кода привела к неправильным результатам.

Мой вопрос в том, что, полагаясь на поведение, определяемое реализацией, является ли оно законным или ожидается, что результаты будут изменены в зависимости от оптимизации?

+0

«Я считаю, что это» - в коде, который вы опубликовали, нет подписанных изменений. –

+0

@ KarolyHorvath - мой плохой ... Я вытащил неправильный фрагмент из сообщений (его длинная нить). Он обновлен. – jww

+0

OpenSSL полон страшного кода, подобного этому .. imho, тем скорее он заброшен лучше. Кто знает, сколько уязвимостей скрывается из-за такого мусора. –

ответ

2

Реализация определенных означает, что реализация должна документировать поведение:

определяется реализацией поведение

неопределенные поведения, где каждая реализация документов, как сделан выбор

Итак, ознакомьтесь с документацией, для которой компилятор, с которым вы наблюдали неожиданные res . Документация может или не может указывать поведение, которое вы наблюдали.

Если наблюдаемое поведение отличается от документации, подтвердите его с помощью SSCCE и напишите отчет об ошибке. Если документация отсутствует, укажите файл ошибки для отсутствия необходимой документации.

+0

Спасибо @ M.M. Поэтому я понимаю: если Microsoft документирует поведенческие изменения на основе оптимизаций, то это законно. Это верно? (Я не думаю, что его ожидали, но ожидаемые и законные - две разные вещи). – jww

+0

Я считаю, что это правильно –

+1

Это законно.Нередко (хотя и часто неожиданно), что разные уровни оптимизации изменяют реализацию определенного или неопределенного поведения. – mpez0