@@ -248,6 +248,12 @@ ENTRY(sie64a)
248
248
sie_exit:
249
249
lg %r14 ,__SF_EMPTY+8 (%r15 ) # load guest register save area
250
250
stmg %r0,%r13 ,0 (%r14 ) # save guest gprs 0-13
251
+ xgr %r0,%r0 # clear guest registers to
252
+ xgr %r1,%r1 # prevent speculative use
253
+ xgr %r2,%r2
254
+ xgr %r3,%r3
255
+ xgr %r4,%r4
256
+ xgr %r5,%r5
251
257
lmg %r6,%r14 ,__SF_GPRS(%r15 ) # restore kernel registers
252
258
lg %r2,__SF_EMPTY+16 (%r15 ) # return exit reason code
253
259
br %r14
@@ -282,6 +288,8 @@ ENTRY(system_call)
282
288
.Lsysc_vtime:
283
289
UPDATE_VTIME %r8 ,%r9 ,__LC_SYNC_ENTER_TIMER
284
290
stmg %r0,%r7,__PT_R0(%r11 )
291
+ # clear user controlled register to prevent speculative use
292
+ xgr %r0,%r0
285
293
mvc __PT_R8(64 ,%r11 ),__LC_SAVE_AREA_SYNC
286
294
mvc __PT_PSW(16 ,%r11 ),__LC_SVC_OLD_PSW
287
295
mvc __PT_INT_CODE(4 ,%r11 ),__LC_SVC_ILC
@@ -561,6 +569,15 @@ ENTRY(pgm_check_handler)
561
569
4: lgr %r13 ,%r11
562
570
la %r11 ,STACK_FRAME_OVERHEAD(%r15 )
563
571
stmg %r0,%r7,__PT_R0(%r11 )
572
+ # clear user controlled registers to prevent speculative use
573
+ xgr %r0,%r0
574
+ xgr %r1,%r1
575
+ xgr %r2,%r2
576
+ xgr %r3,%r3
577
+ xgr %r4,%r4
578
+ xgr %r5,%r5
579
+ xgr %r6,%r6
580
+ xgr %r7,%r7
564
581
mvc __PT_R8(64 ,%r11 ),__LC_SAVE_AREA_SYNC
565
582
stmg %r8 ,%r9 ,__PT_PSW(%r11 )
566
583
mvc __PT_INT_CODE(4 ,%r11 ),__LC_PGM_ILC
@@ -626,6 +643,16 @@ ENTRY(io_int_handler)
626
643
lmg %r8 ,%r9 ,__LC_IO_OLD_PSW
627
644
SWITCH_ASYNC __LC_SAVE_AREA_ASYNC,__LC_ASYNC_ENTER_TIMER
628
645
stmg %r0,%r7,__PT_R0(%r11 )
646
+ # clear user controlled registers to prevent speculative use
647
+ xgr %r0,%r0
648
+ xgr %r1,%r1
649
+ xgr %r2,%r2
650
+ xgr %r3,%r3
651
+ xgr %r4,%r4
652
+ xgr %r5,%r5
653
+ xgr %r6,%r6
654
+ xgr %r7,%r7
655
+ xgr %r10 ,%r10
629
656
mvc __PT_R8(64 ,%r11 ),__LC_SAVE_AREA_ASYNC
630
657
stmg %r8 ,%r9 ,__PT_PSW(%r11 )
631
658
mvc __PT_INT_CODE(12 ,%r11 ),__LC_SUBCHANNEL_ID
@@ -839,6 +866,16 @@ ENTRY(ext_int_handler)
839
866
lmg %r8 ,%r9 ,__LC_EXT_OLD_PSW
840
867
SWITCH_ASYNC __LC_SAVE_AREA_ASYNC,__LC_ASYNC_ENTER_TIMER
841
868
stmg %r0,%r7,__PT_R0(%r11 )
869
+ # clear user controlled registers to prevent speculative use
870
+ xgr %r0,%r0
871
+ xgr %r1,%r1
872
+ xgr %r2,%r2
873
+ xgr %r3,%r3
874
+ xgr %r4,%r4
875
+ xgr %r5,%r5
876
+ xgr %r6,%r6
877
+ xgr %r7,%r7
878
+ xgr %r10 ,%r10
842
879
mvc __PT_R8(64 ,%r11 ),__LC_SAVE_AREA_ASYNC
843
880
stmg %r8 ,%r9 ,__PT_PSW(%r11 )
844
881
lghi %r1,__LC_EXT_PARAMS2
@@ -1046,6 +1083,16 @@ ENTRY(mcck_int_handler)
1046
1083
.Lmcck_skip:
1047
1084
lghi %r14 ,__LC_GPREGS_SAVE_AREA+64
1048
1085
stmg %r0,%r7,__PT_R0(%r11 )
1086
+ # clear user controlled registers to prevent speculative use
1087
+ xgr %r0,%r0
1088
+ xgr %r1,%r1
1089
+ xgr %r2,%r2
1090
+ xgr %r3,%r3
1091
+ xgr %r4,%r4
1092
+ xgr %r5,%r5
1093
+ xgr %r6,%r6
1094
+ xgr %r7,%r7
1095
+ xgr %r10 ,%r10
1049
1096
mvc __PT_R8(64 ,%r11 ),0 (%r14 )
1050
1097
stmg %r8 ,%r9 ,__PT_PSW(%r11 )
1051
1098
xc __PT_FLAGS(8 ,%r11 ),__PT_FLAGS(%r11 )
0 commit comments