|
@@ -1675,8 +1675,16 @@ static struct random_ready_callback random_ready = {
|
|
|
|
|
|
static int __init initialize_ptr_random(void)
|
|
|
{
|
|
|
- int ret = add_random_ready_callback(&random_ready);
|
|
|
+ int key_size = sizeof(ptr_key);
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ /* Use hw RNG if available. */
|
|
|
+ if (get_random_bytes_arch(&ptr_key, key_size) == key_size) {
|
|
|
+ static_branch_disable(¬_filled_random_ptr_key);
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
|
|
|
+ ret = add_random_ready_callback(&random_ready);
|
|
|
if (!ret) {
|
|
|
return 0;
|
|
|
} else if (ret == -EALREADY) {
|