@@ -189,7 +189,8 @@ mod x86_64 {
189
189
/// break memory safety with wrong flags, e.g. by disabling long mode.
190
190
#[ inline]
191
191
pub unsafe fn write_raw ( flags : u64 ) {
192
- Self :: MSR . write ( flags) ;
192
+ let mut msr = Self :: MSR ;
193
+ msr. write ( flags) ;
193
194
}
194
195
195
196
/// Update EFER flags.
@@ -221,7 +222,8 @@ mod x86_64 {
221
222
/// Write a given virtual address to the FS.Base register.
222
223
#[ inline]
223
224
pub fn write ( address : VirtAddr ) {
224
- unsafe { Self :: MSR . write ( address. as_u64 ( ) ) } ;
225
+ let mut msr = Self :: MSR ;
226
+ unsafe { msr. write ( address. as_u64 ( ) ) } ;
225
227
}
226
228
}
227
229
@@ -235,7 +237,8 @@ mod x86_64 {
235
237
/// Write a given virtual address to the GS.Base register.
236
238
#[ inline]
237
239
pub fn write ( address : VirtAddr ) {
238
- unsafe { Self :: MSR . write ( address. as_u64 ( ) ) } ;
240
+ let mut msr = Self :: MSR ;
241
+ unsafe { msr. write ( address. as_u64 ( ) ) } ;
239
242
}
240
243
}
241
244
@@ -249,7 +252,8 @@ mod x86_64 {
249
252
/// Write a given virtual address to the KernelGsBase register.
250
253
#[ inline]
251
254
pub fn write ( address : VirtAddr ) {
252
- unsafe { Self :: MSR . write ( address. as_u64 ( ) ) } ;
255
+ let mut msr = Self :: MSR ;
256
+ unsafe { msr. write ( address. as_u64 ( ) ) } ;
253
257
}
254
258
}
255
259
@@ -316,7 +320,8 @@ mod x86_64 {
316
320
let mut msr_value = 0u64 ;
317
321
msr_value. set_bits ( 48 ..64 , sysret. into ( ) ) ;
318
322
msr_value. set_bits ( 32 ..48 , syscall. into ( ) ) ;
319
- Self :: MSR . write ( msr_value) ;
323
+ let mut msr = Self :: MSR ;
324
+ msr. write ( msr_value) ;
320
325
}
321
326
322
327
/// Write the Ring 0 and Ring 3 segment bases.
@@ -366,7 +371,8 @@ mod x86_64 {
366
371
/// This holds the target RIP of a syscall.
367
372
#[ inline]
368
373
pub fn write ( address : VirtAddr ) {
369
- unsafe { Self :: MSR . write ( address. as_u64 ( ) ) } ;
374
+ let mut msr = Self :: MSR ;
375
+ unsafe { msr. write ( address. as_u64 ( ) ) } ;
370
376
}
371
377
}
372
378
@@ -392,7 +398,8 @@ mod x86_64 {
392
398
/// to 0, the corresponding rFLAGS bit is not modified.
393
399
#[ inline]
394
400
pub fn write ( value : RFlags ) {
395
- unsafe { Self :: MSR . write ( value. bits ( ) ) } ;
401
+ let mut msr = Self :: MSR ;
402
+ unsafe { msr. write ( value. bits ( ) ) } ;
396
403
}
397
404
}
398
405
}
0 commit comments