File tree Expand file tree Collapse file tree 1 file changed +20
-2
lines changed Expand file tree Collapse file tree 1 file changed +20
-2
lines changed Original file line number Diff line number Diff line change @@ -436,13 +436,31 @@ mod imp {
436
436
impl Rng for OsRng {
437
437
fn next_u32 ( & mut self ) -> u32 {
438
438
let ret;
439
- unsafe { asm ! ( "rdrand $0" : "=r" ( ret) :: : "volatile" ) } ;
439
+ let mut retry=10 ;
440
+ unsafe { asm ! ( "
441
+ 1:
442
+ rdrand $0
443
+ jc 2f
444
+ dec $1
445
+ jnz 1b
446
+ 2:
447
+ " : "=r" ( ret) , "=r" ( retry) : "1" ( retry) :: "volatile" ) } ;
448
+ if retry==0 { panic ! ( "RDRAND failure" ) }
440
449
ret
441
450
}
442
451
#[ cfg( target_arch="x86_64" ) ]
443
452
fn next_u64 ( & mut self ) -> u64 {
444
453
let ret;
445
- unsafe { asm ! ( "rdrand $0" : "=r" ( ret) :: : "volatile" ) } ;
454
+ let mut retry=10 ;
455
+ unsafe { asm ! ( "
456
+ 1:
457
+ rdrand $0
458
+ jc 2f
459
+ dec $1
460
+ jnz 1b
461
+ 2:
462
+ " : "=r" ( ret) , "=r" ( retry) : "1" ( retry) :: "volatile" ) } ;
463
+ if retry==0 { panic ! ( "RDRAND failure" ) }
446
464
ret
447
465
}
448
466
}
You can’t perform that action at this time.
0 commit comments