From: Gottox @ Void diff --git shared/n-dhcp4/src/n-dhcp4-c-probe.c shared/n-dhcp4/src/n-dhcp4-c-probe.c index 308cff830..9463528b1 100644 --- a/shared/n-dhcp4/src/n-dhcp4-c-probe.c +++ b/shared/n-dhcp4/src/n-dhcp4-c-probe.c @@ -362,8 +362,12 @@ static void n_dhcp4_client_probe_config_initialize_random_seed(NDhcp4ClientProbe seed16v[1] = (u64 >> 16) ^ (u64 >> 0); seed16v[2] = (u64 >> 32) ^ (u64 >> 16); +#ifdef __GLIBC__ r = seed48_r(seed16v, &config->entropy); c_assert(!r); +#else + memcpy(config->entropy, seed16v, sizeof seed16v); +#endif } /** @@ -377,10 +381,14 @@ static void n_dhcp4_client_probe_config_initialize_random_seed(NDhcp4ClientProbe */ uint32_t n_dhcp4_client_probe_config_get_random(NDhcp4ClientProbeConfig *config) { long int result; +#ifdef __GLIBC__ int r; r = mrand48_r(&config->entropy, &result); c_assert(!r); +#else + result = jrand48(config->entropy); +#endif return result; }; diff --git shared/n-dhcp4/src/n-dhcp4-private.h shared/n-dhcp4/src/n-dhcp4-private.h index c38ddbfc8..fb4880771 100644 --- a/shared/n-dhcp4/src/n-dhcp4-private.h +++ b/shared/n-dhcp4/src/n-dhcp4-private.h @@ -267,7 +267,11 @@ struct NDhcp4ClientProbeConfig { bool inform_only; bool init_reboot; struct in_addr requested_ip; +#ifdef __GLIBC__ struct drand48_data entropy; /* entropy pool */ +#else + unsigned short entropy[3]; /* entropy pool */ +#endif uint64_t ms_start_delay; /* max ms to wait before starting probe */ NDhcp4ClientProbeOption *options[UINT8_MAX + 1]; int8_t request_parameters[UINT8_MAX + 1];