Skip to content

Commit 539fc78

Browse files
committed
[PACKAGE:RANDGEN] Use PF_RDRAND_INSTRUCTION_AVAILABLE to check rdrand availability
1 parent 002d67e commit 539fc78

File tree

1 file changed

+9
-62
lines changed

1 file changed

+9
-62
lines changed

Source/Include/KNSoft/NDK/Package/RandGen.inl

Lines changed: 9 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -112,59 +112,18 @@ Rand_RdRand16(
112112

113113
#endif /* _RAND_HAS_RDRAND_ */
114114

115-
static int g_iFallbackToSW = -1;
116-
117-
__forceinline
118-
LOGICAL
119-
_Rand_FallbackToSW(VOID)
120-
{
121-
if (g_iFallbackToSW != -1)
122-
{
123-
return !!g_iFallbackToSW;
124-
}
125-
126-
/*
127-
* RDRAND is not emulated on WoA yet,
128-
* and SharedUserData->NativeProcessorArchitecture is avaliable since NT 6.2.
129-
*/
130-
if (SharedUserData->NtMajorVersion < 10)
131-
{
132-
/* WoA since NT 10 */
133-
g_iFallbackToSW = FALSE;
134-
} else if (NtReadTebPVOID(WowTebOffset) == NULL)
135-
{
136-
/* Not in WOW */
137-
g_iFallbackToSW = FALSE;
138-
} else if (SharedUserData->NativeProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 ||
139-
SharedUserData->NativeProcessorArchitecture == PROCESSOR_ARCHITECTURE_INTEL)
140-
{
141-
/* RDRAND is supported natively */
142-
g_iFallbackToSW = FALSE;
143-
} else
144-
{
145-
g_iFallbackToSW = TRUE;
146-
}
147-
return !!g_iFallbackToSW;
148-
}
149-
150115
__forceinline
151116
_Success_(return != FALSE)
152117
LOGICAL
153118
Rand_HW32(
154119
_Out_ unsigned __int32* Random)
155120
{
156-
#if _RAND_HAS_RDRAND_
157-
if (_Rand_FallbackToSW())
158-
{
159-
#endif
160-
*Random = Rand_SW32();
161-
return TRUE;
162-
#if _RAND_HAS_RDRAND_
163-
} else
121+
if (_RAND_HAS_RDRAND_ && _Inline_RtlIsProcessorFeaturePresent(PF_RDRAND_INSTRUCTION_AVAILABLE))
164122
{
165123
return Rand_RdRand32(Random);
166124
}
167-
#endif
125+
*Random = Rand_SW32();
126+
return TRUE;
168127
}
169128

170129
__forceinline
@@ -173,18 +132,12 @@ LOGICAL
173132
Rand_HW64(
174133
_Out_ unsigned __int64* Random)
175134
{
176-
#if _RAND_HAS_RDRAND_
177-
if (_Rand_FallbackToSW())
178-
{
179-
#endif
180-
*Random = Rand_SW64();
181-
return TRUE;
182-
#if _RAND_HAS_RDRAND_
183-
} else
135+
if (_RAND_HAS_RDRAND_ && _Inline_RtlIsProcessorFeaturePresent(PF_RDRAND_INSTRUCTION_AVAILABLE))
184136
{
185137
return Rand_RdRand64(Random);
186138
}
187-
#endif
139+
*Random = Rand_SW64();
140+
return TRUE;
188141
}
189142

190143
__forceinline
@@ -193,18 +146,12 @@ LOGICAL
193146
Rand_HW16(
194147
_Out_ unsigned __int16* Random)
195148
{
196-
#if _RAND_HAS_RDRAND_
197-
if (_Rand_FallbackToSW())
198-
{
199-
#endif
200-
*Random = Rand_SW16();
201-
return TRUE;
202-
#if _RAND_HAS_RDRAND_
203-
} else
149+
if (_RAND_HAS_RDRAND_ && _Inline_RtlIsProcessorFeaturePresent(PF_RDRAND_INSTRUCTION_AVAILABLE))
204150
{
205151
return Rand_RdRand16(Random);
206152
}
207-
#endif
153+
*Random = Rand_SW16();
154+
return TRUE;
208155
}
209156

210157
__forceinline

0 commit comments

Comments
 (0)