Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/random/random_harvestq.c
Show All 12 Lines | |||||
/* | /* | ||||
* Disallow userspace modification of pure entropy sources. | * Disallow userspace modification of pure entropy sources. | ||||
*/ | */ | ||||
hc_source_mask = (value & ~user_immutable_mask) | | hc_source_mask = (value & ~user_immutable_mask) | | ||||
(orig_value & user_immutable_mask); | (orig_value & user_immutable_mask); | ||||
return (0); | return (0); | ||||
} | } | ||||
SYSCTL_PROC(_kern_random_harvest, OID_AUTO, mask, CTLTYPE_UINT | CTLFLAG_RW, | SYSCTL_PROC(_kern_random_harvest, OID_AUTO, mask, | ||||
NULL, 0, random_check_uint_harvestmask, "IU", "Entropy harvesting mask"); | CTLTYPE_UINT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, | ||||
NULL, 0, random_check_uint_harvestmask, "IU", | |||||
"Entropy harvesting mask"); | |||||
/* ARGSUSED */ | /* ARGSUSED */ | ||||
static int | static int | ||||
random_print_harvestmask(SYSCTL_HANDLER_ARGS) | random_print_harvestmask(SYSCTL_HANDLER_ARGS) | ||||
{ | { | ||||
struct sbuf sbuf; | struct sbuf sbuf; | ||||
int error, i; | int error, i; | ||||
error = sysctl_wire_old_buffer(req, 0); | error = sysctl_wire_old_buffer(req, 0); | ||||
if (error == 0) { | if (error == 0) { | ||||
sbuf_new_for_sysctl(&sbuf, NULL, 128, req); | sbuf_new_for_sysctl(&sbuf, NULL, 128, req); | ||||
for (i = ENTROPYSOURCE - 1; i >= 0; i--) | for (i = ENTROPYSOURCE - 1; i >= 0; i--) | ||||
sbuf_cat(&sbuf, (hc_source_mask & (1 << i)) ? "1" : "0"); | sbuf_cat(&sbuf, (hc_source_mask & (1 << i)) ? "1" : "0"); | ||||
error = sbuf_finish(&sbuf); | error = sbuf_finish(&sbuf); | ||||
sbuf_delete(&sbuf); | sbuf_delete(&sbuf); | ||||
} | } | ||||
return (error); | return (error); | ||||
} | } | ||||
SYSCTL_PROC(_kern_random_harvest, OID_AUTO, mask_bin, | SYSCTL_PROC(_kern_random_harvest, OID_AUTO, mask_bin, | ||||
CTLTYPE_STRING | CTLFLAG_RD, NULL, 0, random_print_harvestmask, "A", | CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_NEEDGIANT, | ||||
NULL, 0, random_print_harvestmask, "A", | |||||
"Entropy harvesting mask (printable)"); | "Entropy harvesting mask (printable)"); | ||||
static const char *random_source_descr[ENTROPYSOURCE] = { | static const char *random_source_descr[ENTROPYSOURCE] = { | ||||
[RANDOM_CACHED] = "CACHED", | [RANDOM_CACHED] = "CACHED", | ||||
[RANDOM_ATTACH] = "ATTACH", | [RANDOM_ATTACH] = "ATTACH", | ||||
[RANDOM_KEYBOARD] = "KEYBOARD", | [RANDOM_KEYBOARD] = "KEYBOARD", | ||||
[RANDOM_MOUSE] = "MOUSE", | [RANDOM_MOUSE] = "MOUSE", | ||||
[RANDOM_NET_TUN] = "NET_TUN", | [RANDOM_NET_TUN] = "NET_TUN", | ||||
Show All 24 Lines | |||||
first = false; | first = false; | ||||
} | } | ||||
error = sbuf_finish(&sbuf); | error = sbuf_finish(&sbuf); | ||||
sbuf_delete(&sbuf); | sbuf_delete(&sbuf); | ||||
} | } | ||||
return (error); | return (error); | ||||
} | } | ||||
SYSCTL_PROC(_kern_random_harvest, OID_AUTO, mask_symbolic, | SYSCTL_PROC(_kern_random_harvest, OID_AUTO, mask_symbolic, | ||||
CTLTYPE_STRING | CTLFLAG_RD, NULL, 0, random_print_harvestmask_symbolic, | CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_NEEDGIANT, | ||||
NULL, 0, random_print_harvestmask_symbolic, | |||||
"A", "Entropy harvesting mask (symbolic)"); | "A", "Entropy harvesting mask (symbolic)"); | ||||
/* ARGSUSED */ | /* ARGSUSED */ | ||||
static void | static void | ||||
random_harvestq_init(void *unused __unused) | random_harvestq_init(void *unused __unused) | ||||
{ | { | ||||
static const u_int almost_everything_mask = | static const u_int almost_everything_mask = | ||||
(((1 << (RANDOM_ENVIRONMENTAL_END + 1)) - 1) & | (((1 << (RANDOM_ENVIRONMENTAL_END + 1)) - 1) & | ||||
Show All 12 Lines |