Message ID | 20190322180349.4256-1-paul.burton@mips.com (mailing list archive) |
---|---|
State | Mainlined |
Commit | e6331a321aafcc291a60ceedf4d6b0051a6117ca |
Headers | show |
Series | MIPS: KVM: Use prandom_u32_max() to generate tlbwr index | expand |
Hello, Paul Burton wrote: > Emulation of the tlbwr instruction, which writes a TLB entry to a random > index in the TLB, currently uses get_random_bytes() to generate a 4 byte > random number which we then mask to form the index. This is overkill in > a couple of ways: > > - We don't need 4 bytes here since we mask the value to form a 6 bit > number anyway, so we waste /dev/random entropy generating 3 random > bytes that are unused. > > - We don't need crypto-grade randomness here - the architecture spec > allows implementations to use any algorithm & merely encourages that > some pseudo-randomness be used rather than a simple counter. The > fast prandom_u32() function fits that criteria well. > > So rather than using get_random_bytes() & consuming /dev/random entropy, > switch to using the faster prandom_u32_max() which provides what we need > here whilst also performing the masking/modulo for us. > > Signed-off-by: Paul Burton <paul.burton@mips.com> > Reported-by: George Spelvin <lkml@sdf.org> > Cc: James Hogan <jhogan@kernel.org> Applied to mips-next. Thanks, Paul [ This message was auto-generated; if you believe anything is incorrect then please email paul.burton@mips.com to report it. ]
diff --git a/arch/mips/kvm/emulate.c b/arch/mips/kvm/emulate.c index 0074427b04fb..e5de6bac8197 100644 --- a/arch/mips/kvm/emulate.c +++ b/arch/mips/kvm/emulate.c @@ -1141,9 +1141,7 @@ enum emulation_result kvm_mips_emul_tlbwr(struct kvm_vcpu *vcpu) unsigned long pc = vcpu->arch.pc; int index; - get_random_bytes(&index, sizeof(index)); - index &= (KVM_MIPS_GUEST_TLB_SIZE - 1); - + index = prandom_u32_max(KVM_MIPS_GUEST_TLB_SIZE); tlb = &vcpu->arch.guest_tlb[index]; kvm_mips_invalidate_guest_tlb(vcpu, tlb);
Emulation of the tlbwr instruction, which writes a TLB entry to a random index in the TLB, currently uses get_random_bytes() to generate a 4 byte random number which we then mask to form the index. This is overkill in a couple of ways: - We don't need 4 bytes here since we mask the value to form a 6 bit number anyway, so we waste /dev/random entropy generating 3 random bytes that are unused. - We don't need crypto-grade randomness here - the architecture spec allows implementations to use any algorithm & merely encourages that some pseudo-randomness be used rather than a simple counter. The fast prandom_u32() function fits that criteria well. So rather than using get_random_bytes() & consuming /dev/random entropy, switch to using the faster prandom_u32_max() which provides what we need here whilst also performing the masking/modulo for us. Signed-off-by: Paul Burton <paul.burton@mips.com> Reported-by: George Spelvin <lkml@sdf.org> Cc: James Hogan <jhogan@kernel.org> --- arch/mips/kvm/emulate.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)