vmovdqa产生常规保护错误

时间:2018-09-20 04:48:09

标签: linux-kernel alignment linux-device-driver aes-ni

我使用https://github.com/01org/isa-l_crypto库中的XTS_AES_256_enc_avxXTS_AES_256_dec_avx函数。 使用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

当我使用RIP寄存器反汇编gdb中的代码时,我能够看到故障发生在

函数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

0 个答案:

没有答案
相关问题