У меня возникли проблемы с поиском соответствующей документации для проблемы. У меня возникает согласование HMACS в ядре и пространстве пользователя. Согласно R. Love в LKD, дескриптор памяти mm-> start_code и mm-> end_code должны содержать сегмент .text. Поиск сегмента .text в статическом исполняемом файле хорошо определен в документации ELF и легко получить. Таким образом, учитывая следующие два фрагмента кода, можно было бы ожидать, чтобы получить соответствующий HMAC:Когда сегмент ELF .text не является сегментом ELF .text?
Kernel:
__mm = get_task_mm(__task);
__retcode = ntru_crypto_hmac_init(__crypto_context);
if(__retcode != NTRU_CRYPTO_HMAC_OK)
return 1;
__retcode = ntru_crypto_hmac_update(__crypto_context, (const uint8_t*)__mm->start_code,
__mm->end_code - __mm->start_code);
if(__retcode != NTRU_CRYPTO_HMAC_OK)
return 1;
__retcode = ntru_crypto_hmac_final(__crypto_context, __hmac);
if(__retcode != NTRU_CRYPTO_HMAC_OK)
return 1;
return 0;
Userland:
for (j = 0; j < file_hdr32.e_shnum; j++)
{
if (!strcmp(".text", strIndex + section_hdr32[j]->sh_name))
{
retcode = ntru_crypto_hmac_init(__crypto_context());
if(retcode != NTRU_CRYPTO_HMAC_OK)
{
syslog(LOG_ERR, "ntru_crypto_hmac_init error: retcode = %d, TID(0x%lx)",
retcode,pthread_self());
return 0;
}
retcode = ntru_crypto_hmac_update(__crypto_context(),
filebuf + section_hdr32[j]->sh_offset, section_hdr32[j]->sh_size);
if(retcode != NTRU_CRYPTO_HMAC_OK)
{
syslog(LOG_ERR, "Internal crypto error (%d)", retcode);
return 0;
}
retcode = ntru_crypto_hmac_final(__crypto_context(), _hmac);
if(retcode != NTRU_CRYPTO_HMAC_OK)
{
syslog(LOG_ERR, "Failed to finalize HMAC, TID(0x%lx)", pthread_self());
return 0;
}
return 1;
}
}
В обоих случаях сегмент .text именно там, где его документально подтвердили, но они никогда не совпадают. Я создал пользовательский HMACS для всех 17 000 исполняемых файлов в системе, поэтому даже если сегмент кода в дескрипторе памяти ядра указывал на зависимость, а не на основной исполняемый файл, я все равно должен получить совпадение, но не кубик. Есть что-то принципиально иное между двумя сегментами «.text», и мне было интересно, знает ли кто-нибудь, что это такое, чтобы я мог сэкономить некоторое время - какие-то подсказки? Заранее спасибо, Pete;. 1
Это работает! Спасибо миллион за указатель! – pjenney58