Skip to content

Commit ed9dab6

Browse files
committed
[ARM] Add extra tests for CVE-2024-7883 with undef/poison
1 parent b4263dd commit ed9dab6

File tree

1 file changed

+106
-0
lines changed

1 file changed

+106
-0
lines changed

llvm/test/CodeGen/ARM/cmse-clear-float-hard.ll

+106
Original file line numberDiff line numberDiff line change
@@ -1341,3 +1341,109 @@ entry:
13411341
%call = call float %fptr(i32 poison) #7
13421342
ret float %call
13431343
}
1344+
1345+
define float @float_return_undef_float_arg(ptr nocapture %fptr) #6 {
1346+
; CHECK-8M-LABEL: float_return_undef_float_arg:
1347+
; CHECK-8M: @ %bb.0: @ %entry
1348+
; CHECK-8M-NEXT: push {r7, lr}
1349+
; CHECK-8M-NEXT: push.w {r4, r5, r6, r7, r8, r9, r10, r11}
1350+
; CHECK-8M-NEXT: bic r0, r0, #1
1351+
; CHECK-8M-NEXT: sub sp, #136
1352+
; CHECK-8M-NEXT: vmov r12, s0
1353+
; CHECK-8M-NEXT: vlstm sp, {d0 - d15}
1354+
; CHECK-8M-NEXT: vmov s0, r12
1355+
; CHECK-8M-NEXT: ldr r1, [sp, #64]
1356+
; CHECK-8M-NEXT: bic r1, r1, #159
1357+
; CHECK-8M-NEXT: bic r1, r1, #4026531840
1358+
; CHECK-8M-NEXT: vmsr fpscr, r1
1359+
; CHECK-8M-NEXT: mov r1, r0
1360+
; CHECK-8M-NEXT: mov r2, r0
1361+
; CHECK-8M-NEXT: mov r3, r0
1362+
; CHECK-8M-NEXT: mov r4, r0
1363+
; CHECK-8M-NEXT: mov r5, r0
1364+
; CHECK-8M-NEXT: mov r6, r0
1365+
; CHECK-8M-NEXT: mov r7, r0
1366+
; CHECK-8M-NEXT: mov r8, r0
1367+
; CHECK-8M-NEXT: mov r9, r0
1368+
; CHECK-8M-NEXT: mov r10, r0
1369+
; CHECK-8M-NEXT: mov r11, r0
1370+
; CHECK-8M-NEXT: msr apsr_nzcvqg, r0
1371+
; CHECK-8M-NEXT: blxns r0
1372+
; CHECK-8M-NEXT: vmov r12, s0
1373+
; CHECK-8M-NEXT: vlldm sp, {d0 - d15}
1374+
; CHECK-8M-NEXT: vmov s0, r12
1375+
; CHECK-8M-NEXT: add sp, #136
1376+
; CHECK-8M-NEXT: pop.w {r4, r5, r6, r7, r8, r9, r10, r11}
1377+
; CHECK-8M-NEXT: pop {r7, pc}
1378+
;
1379+
; CHECK-81M-LABEL: float_return_undef_float_arg:
1380+
; CHECK-81M: @ %bb.0: @ %entry
1381+
; CHECK-81M-NEXT: push {r7, lr}
1382+
; CHECK-81M-NEXT: push.w {r4, r5, r6, r7, r8, r9, r10, r11}
1383+
; CHECK-81M-NEXT: bic r0, r0, #1
1384+
; CHECK-81M-NEXT: vpush {s16, s17, s18, s19, s20, s21, s22, s23, s24, s25, s26, s27, s28, s29, s30, s31}
1385+
; CHECK-81M-NEXT: vscclrm {s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15, s16, s17, s18, s19, s20, s21, s22, s23, s24, s25, s26, s27, s28, s29, s30, s31, vpr}
1386+
; CHECK-81M-NEXT: vstr fpcxts, [sp, #-8]!
1387+
; CHECK-81M-NEXT: clrm {r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, apsr}
1388+
; CHECK-81M-NEXT: blxns r0
1389+
; CHECK-81M-NEXT: vldr fpcxts, [sp], #8
1390+
; CHECK-81M-NEXT: vpop {s16, s17, s18, s19, s20, s21, s22, s23, s24, s25, s26, s27, s28, s29, s30, s31}
1391+
; CHECK-81M-NEXT: pop.w {r4, r5, r6, r7, r8, r9, r10, r11}
1392+
; CHECK-81M-NEXT: pop {r7, pc}
1393+
entry:
1394+
%call = call float %fptr(float undef) #7
1395+
ret float %call
1396+
}
1397+
1398+
define float @float_return_poison_float_arg(ptr nocapture %fptr) #6 {
1399+
; CHECK-8M-LABEL: float_return_poison_float_arg:
1400+
; CHECK-8M: @ %bb.0: @ %entry
1401+
; CHECK-8M-NEXT: push {r7, lr}
1402+
; CHECK-8M-NEXT: push.w {r4, r5, r6, r7, r8, r9, r10, r11}
1403+
; CHECK-8M-NEXT: bic r0, r0, #1
1404+
; CHECK-8M-NEXT: sub sp, #136
1405+
; CHECK-8M-NEXT: vmov r12, s0
1406+
; CHECK-8M-NEXT: vlstm sp, {d0 - d15}
1407+
; CHECK-8M-NEXT: vmov s0, r12
1408+
; CHECK-8M-NEXT: ldr r1, [sp, #64]
1409+
; CHECK-8M-NEXT: bic r1, r1, #159
1410+
; CHECK-8M-NEXT: bic r1, r1, #4026531840
1411+
; CHECK-8M-NEXT: vmsr fpscr, r1
1412+
; CHECK-8M-NEXT: mov r1, r0
1413+
; CHECK-8M-NEXT: mov r2, r0
1414+
; CHECK-8M-NEXT: mov r3, r0
1415+
; CHECK-8M-NEXT: mov r4, r0
1416+
; CHECK-8M-NEXT: mov r5, r0
1417+
; CHECK-8M-NEXT: mov r6, r0
1418+
; CHECK-8M-NEXT: mov r7, r0
1419+
; CHECK-8M-NEXT: mov r8, r0
1420+
; CHECK-8M-NEXT: mov r9, r0
1421+
; CHECK-8M-NEXT: mov r10, r0
1422+
; CHECK-8M-NEXT: mov r11, r0
1423+
; CHECK-8M-NEXT: msr apsr_nzcvqg, r0
1424+
; CHECK-8M-NEXT: blxns r0
1425+
; CHECK-8M-NEXT: vmov r12, s0
1426+
; CHECK-8M-NEXT: vlldm sp, {d0 - d15}
1427+
; CHECK-8M-NEXT: vmov s0, r12
1428+
; CHECK-8M-NEXT: add sp, #136
1429+
; CHECK-8M-NEXT: pop.w {r4, r5, r6, r7, r8, r9, r10, r11}
1430+
; CHECK-8M-NEXT: pop {r7, pc}
1431+
;
1432+
; CHECK-81M-LABEL: float_return_poison_float_arg:
1433+
; CHECK-81M: @ %bb.0: @ %entry
1434+
; CHECK-81M-NEXT: push {r7, lr}
1435+
; CHECK-81M-NEXT: push.w {r4, r5, r6, r7, r8, r9, r10, r11}
1436+
; CHECK-81M-NEXT: bic r0, r0, #1
1437+
; CHECK-81M-NEXT: vpush {s16, s17, s18, s19, s20, s21, s22, s23, s24, s25, s26, s27, s28, s29, s30, s31}
1438+
; CHECK-81M-NEXT: vscclrm {s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15, s16, s17, s18, s19, s20, s21, s22, s23, s24, s25, s26, s27, s28, s29, s30, s31, vpr}
1439+
; CHECK-81M-NEXT: vstr fpcxts, [sp, #-8]!
1440+
; CHECK-81M-NEXT: clrm {r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, apsr}
1441+
; CHECK-81M-NEXT: blxns r0
1442+
; CHECK-81M-NEXT: vldr fpcxts, [sp], #8
1443+
; CHECK-81M-NEXT: vpop {s16, s17, s18, s19, s20, s21, s22, s23, s24, s25, s26, s27, s28, s29, s30, s31}
1444+
; CHECK-81M-NEXT: pop.w {r4, r5, r6, r7, r8, r9, r10, r11}
1445+
; CHECK-81M-NEXT: pop {r7, pc}
1446+
entry:
1447+
%call = call float %fptr(float poison) #7
1448+
ret float %call
1449+
}

0 commit comments

Comments
 (0)