Issue |
95232
|
Summary |
[Clang] Allows incorrect memory size directive.
|
Labels |
clang
|
Assignees |
|
Reporter |
witbring
|
I discovered that the latest Clang improperly checks memory size directives.
## Case 1
I discovered that the latest Clang disallows valid memory size directives but allows invalid memory size directives.
Specifically, when I used the valid memory size directive "QWORD PTR" for clrssbsy and rstorssp instruction, Clang emitted an error message.
However, Clang accepted the invalid directive "DWORD PTR".
Buggy code
```
.intel_syntax noprefix
Bug:
clrssbsy DWORD PTR [RAX]
//Assembly Error
//clrssbsy QWORD PTR [RAX]
rstorssp DWORD PTR [RAX]
//Assembly Error
//rstorssp QWORD PTR [EAX]
```
Compiled Code
```
Bug:
clrssbsy QWORD PTR [rax]
```
You can reproduce it through godbolt
- x64: https://godbolt.org/z/sx3488hqe
- x86: https://godbolt.org/z/vbecf5dPG
## Case 2
I discovered that the latest Clang does not check memory size directives.
This error has been identified in 41 opcodes in x64 and 21 opcodes in x86.
Buggy Code (x64)
```
.intel_syntax noprefix
Bug:
aesencwide128kl ZMMWORD PTR [RAX]
aesencwide256kl ZMMWORD PTR [RAX]
aesdecwide128kl ZMMWORD PTR [RAX]
aesdecwide256kl ZMMWORD PTR [RAX]
call ZMMWORD PTR [RAX]
call WORD PTR [RAX]
jmp ZMMWORD PTR [RAX]
jmp WORD PTR [RAX]
fldenv ZMMWORD PTR [RAX]
fnsave ZMMWORD PTR [RAX]
frstor ZMMWORD PTR [RAX]
fxsave ZMMWORD PTR [RAX]
fnstenv ZMMWORD PTR [RAX]
fxrstor ZMMWORD PTR [RAX]
fxsave64 ZMMWORD PTR [RAX]
fxrstor64 ZMMWORD PTR [RAX]
ldtilecfg ZMMWORD PTR [RAX]
lgdt ZMMWORD PTR [RAX]
lidt ZMMWORD PTR [RAX]
sgdt ZMMWORD PTR [RAX]
sttilecfg ZMMWORD PTR [RAX]
xsave ZMMWORD PTR [RAX]
xrstor ZMMWORD PTR [RAX]
xsavec ZMMWORD PTR [RAX]
xsaves ZMMWORD PTR [RAX]
xrstors ZMMWORD PTR [RAX]
xsave64 ZMMWORD PTR [RAX]
xrstor64 ZMMWORD PTR [RAX]
xsavec64 ZMMWORD PTR [RAX]
xsaveopt ZMMWORD PTR [RAX]
xsaves64 ZMMWORD PTR [RAX]
xrstors64 ZMMWORD PTR [RAX]
xsaveopt64 ZMMWORD PTR [RAX]
```
Compiled Code (x64)
```
Bug:
aesencwide128kl [rax]
aesencwide256kl [rax]
aesdecwide128kl [rax]
aesdecwide256kl [rax]
call FWORD PTR [rax]
call FWORD PTR [rax]
jmp FWORD PTR [rax]
jmp FWORD PTR [rax]
fldenv [rax]
fnsave [rax]
frstor [rax]
fxsave [rax]
fnstenv [rax]
fxrstor [rax]
fxsave64 [rax]
fxrstor64 [rax]
ldtilecfg [rax]
lgdt [rax]
lidt [rax]
sgdt [rax]
sttilecfg [rax]
xsave [rax]
xrstor [rax]
xsavec [rax]
xsaves [rax]
xrstors [rax]
xsave64 [rax]
xrstor64 [rax]
xsavec64 [rax]
xsaveopt [rax]
xsaves64 [rax]
xrstors64 [rax]
xsaveopt64 [rax]
```
Buggy Code (x86)
```
.intel_syntax noprefix
Bug:
aesencwide128kl ZMMWORD PTR [EAX]
aesencwide256kl ZMMWORD PTR [EAX]
aesdecwide128kl ZMMWORD PTR [EAX]
aesdecwide256kl ZMMWORD PTR [EAX]
call ZMMWORD PTR [EAX]
call WORD PTR [EAX]
jmp ZMMWORD PTR [EAX]
jmp WORD PTR [EAX]
fldenv ZMMWORD PTR [EAX]
fnsave ZMMWORD PTR [EAX]
frstor ZMMWORD PTR [EAX]
fxsave ZMMWORD PTR [EAX]
fnstenv ZMMWORD PTR [EAX]
fxrstor ZMMWORD PTR [EAX]
lgdt ZMMWORD PTR [EAX]
lidt ZMMWORD PTR [EAX]
sgdt ZMMWORD PTR [EAX]
xsave ZMMWORD PTR [EAX]
xrstor ZMMWORD PTR [EAX]
xsavec ZMMWORD PTR [EAX]
xsaves ZMMWORD PTR [EAX]
xrstors ZMMWORD PTR [EAX]
xsaveopt ZMMWORD PTR [EAX]
```
Compiled Code (x86)
```
Bug:
aesencwide128kl [eax]
aesencwide256kl [eax]
aesdecwide128kl [eax]
aesdecwide256kl [eax]
call FWORD PTR [eax]
call WORD PTR [eax]
jmp FWORD PTR [eax]
jmp WORD PTR [eax]
fldenv [eax]
fnsave [eax]
frstor [eax]
fxsave [eax]
fnstenv [eax]
fxrstor [eax]
lgdtd [eax]
lidtd [eax]
sgdtd [eax]
xsave [eax]
xrstor [eax]
xsavec [eax]
xsaves [eax]
xrstors [eax]
xsaveopt [eax]
```
You can reproduce the bugs through Godbolt Site:
x64: https://godbolt.org/z/EvosqvGhr
x86: https://godbolt.org/z/4cYbsbGfG
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs