Я использую функции XTS_AES_256_enc_avx
и XTS_AES_256_dec_avx
из библиотеки https://github.com/01org/isa-l_crypto.собрал их, используя yasm
ассемблер
yasm -f elf64 -o XTS_AES_256_enc_avx.o XTS_AES_256_enc_avx.asm
yasm -f elf64 -o XTS_AES_256_dec_avx.o XTS_AES_256_dec_avx.asm
Как только эти файлы собраны, я связываю их с моим модулем, используя
mymod-y += mymod.c XTS_AES_256_dec_avx.o XTS_AES_256_enc_avx.o
У меня есть файл заголовка, который объявляет эти функции как внешние функциии в c
-файле я вызываю эти функции.Но при вызове этого генерируется GPF
.
[Tue Sep 18 08:17:02 2018] general protection fault: 0000 [#1] SMP
[Tue Sep 18 08:17:02 2018] Modules linked in: .........[removed for readability]
[Tue Sep 18 08:17:02 2018] CPU: 1 PID: 1886 Comm: bash Tainted: G O 4.7.0+ #1
[Tue Sep 18 08:17:02 2018] Hardware name: Advantech SOM-5991/Default string, BIOS 5.11 12/12/2016
[Tue Sep 18 08:17:02 2018] task: ffff880858c8c240 ti: ffff8807ce230000 task.ti: ffff8807ce230000
[Tue Sep 18 08:17:02 2018] RIP: 0010:[<ffffffffa045f3ea>]
[<ffffffffa045f3ea>] XTS_AES_256_enc_avx+0x2a/0x3980 [mymod]
RIP [<ffffffffa045f3ea>] XTS_AES_256_enc_avx+0x2a/0x3980
Когда я разобрал код в gdb с помощью регистра RIP, я могу видеть, что ошибка происходит в
Дамп кода ассемблера дляфункция XTS_AES_256_enc_avx
:
0x0000000000008f30 <+0>: sub $0x178,%rsp -> 8BYTE aligned
0x0000000000008f37 <+7>: mov %rbx,0x170(%rsp)
0x0000000000008f3f <+15>: mov $0x87,%r10
0x0000000000008f46 <+22>: vmovdqu (%rdx),%xmm1
0x0000000000008f4a <+26>: vpxor %xmm4,%xmm4,%xmm4
0x0000000000008f4e <+30>: vmovdqu (%rdi),%xmm0
0x0000000000008f52 <+34>: vpxor %xmm0,%xmm1,%xmm1
0x0000000000008f56 <+38>: vmovdqu (%rsi),%xmm2
**0x0000000000008f5a <+42>: vmovdqa %xmm2,0x80(%rsp)** -->>crash point.
vmovdqa
требует выравнивания 16B
, иначе выдает GPF
.Какой подход я могу предпринять, чтобы решить эту проблему GPF
?