vmovdqa выдает общую ошибку защиты - PullRequest
0 голосов
/ 20 сентября 2018

Я использую функции 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?

...