random_harvestq.c (767991d2bed376736535f8f788007a9c3766fcaf) random_harvestq.c (4312ebfe0bbf314a0d5d1b6d14d003673255dd0d)
1/*-
2 * Copyright (c) 2017 Oliver Pinter
3 * Copyright (c) 2017 W. Dean Freeman
4 * Copyright (c) 2000-2015 Mark R V Murray
5 * Copyright (c) 2013 Arthur Mesh
6 * Copyright (c) 2004 Robert N. M. Watson
7 * All rights reserved.
8 *

--- 97 unchanged lines hidden (view full) ---

106struct random_sources {
107 CK_LIST_ENTRY(random_sources) rrs_entries;
108 struct random_source *rrs_source;
109};
110
111static CK_LIST_HEAD(sources_head, random_sources) source_list =
112 CK_LIST_HEAD_INITIALIZER(source_list);
113
1/*-
2 * Copyright (c) 2017 Oliver Pinter
3 * Copyright (c) 2017 W. Dean Freeman
4 * Copyright (c) 2000-2015 Mark R V Murray
5 * Copyright (c) 2013 Arthur Mesh
6 * Copyright (c) 2004 Robert N. M. Watson
7 * All rights reserved.
8 *

--- 97 unchanged lines hidden (view full) ---

106struct random_sources {
107 CK_LIST_ENTRY(random_sources) rrs_entries;
108 struct random_source *rrs_source;
109};
110
111static CK_LIST_HEAD(sources_head, random_sources) source_list =
112 CK_LIST_HEAD_INITIALIZER(source_list);
113
114SYSCTL_NODE(_kern_random, OID_AUTO, harvest, CTLFLAG_RW, 0,
114SYSCTL_NODE(_kern_random, OID_AUTO, harvest, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
115 "Entropy Device Parameters");
116
117/*
118 * Put all the harvest queue context stuff in one place.
119 * this make is a bit easier to lock and protect.
120 */
121static struct harvest_context {
122 /* The harvest mutex protects all of harvest_context and

--- 177 unchanged lines hidden (view full) ---

300
301 /*
302 * Disallow userspace modification of pure entropy sources.
303 */
304 hc_source_mask = (value & ~user_immutable_mask) |
305 (orig_value & user_immutable_mask);
306 return (0);
307}
115 "Entropy Device Parameters");
116
117/*
118 * Put all the harvest queue context stuff in one place.
119 * this make is a bit easier to lock and protect.
120 */
121static struct harvest_context {
122 /* The harvest mutex protects all of harvest_context and

--- 177 unchanged lines hidden (view full) ---

300
301 /*
302 * Disallow userspace modification of pure entropy sources.
303 */
304 hc_source_mask = (value & ~user_immutable_mask) |
305 (orig_value & user_immutable_mask);
306 return (0);
307}
308SYSCTL_PROC(_kern_random_harvest, OID_AUTO, mask, CTLTYPE_UINT | CTLFLAG_RW,
309 NULL, 0, random_check_uint_harvestmask, "IU", "Entropy harvesting mask");
308SYSCTL_PROC(_kern_random_harvest, OID_AUTO, mask,
309 CTLTYPE_UINT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, NULL, 0,
310 random_check_uint_harvestmask, "IU",
311 "Entropy harvesting mask");
310
311/* ARGSUSED */
312static int
313random_print_harvestmask(SYSCTL_HANDLER_ARGS)
314{
315 struct sbuf sbuf;
316 int error, i;
317
318 error = sysctl_wire_old_buffer(req, 0);
319 if (error == 0) {
320 sbuf_new_for_sysctl(&sbuf, NULL, 128, req);
321 for (i = ENTROPYSOURCE - 1; i >= 0; i--)
322 sbuf_cat(&sbuf, (hc_source_mask & (1 << i)) ? "1" : "0");
323 error = sbuf_finish(&sbuf);
324 sbuf_delete(&sbuf);
325 }
326 return (error);
327}
328SYSCTL_PROC(_kern_random_harvest, OID_AUTO, mask_bin,
312
313/* ARGSUSED */
314static int
315random_print_harvestmask(SYSCTL_HANDLER_ARGS)
316{
317 struct sbuf sbuf;
318 int error, i;
319
320 error = sysctl_wire_old_buffer(req, 0);
321 if (error == 0) {
322 sbuf_new_for_sysctl(&sbuf, NULL, 128, req);
323 for (i = ENTROPYSOURCE - 1; i >= 0; i--)
324 sbuf_cat(&sbuf, (hc_source_mask & (1 << i)) ? "1" : "0");
325 error = sbuf_finish(&sbuf);
326 sbuf_delete(&sbuf);
327 }
328 return (error);
329}
330SYSCTL_PROC(_kern_random_harvest, OID_AUTO, mask_bin,
329 CTLTYPE_STRING | CTLFLAG_RD, NULL, 0, random_print_harvestmask, "A",
331 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, 0,
332 random_print_harvestmask, "A",
330 "Entropy harvesting mask (printable)");
331
332static const char *random_source_descr[ENTROPYSOURCE] = {
333 [RANDOM_CACHED] = "CACHED",
334 [RANDOM_ATTACH] = "ATTACH",
335 [RANDOM_KEYBOARD] = "KEYBOARD",
336 [RANDOM_MOUSE] = "MOUSE",
337 [RANDOM_NET_TUN] = "NET_TUN",

--- 44 unchanged lines hidden (view full) ---

382 first = false;
383 }
384 error = sbuf_finish(&sbuf);
385 sbuf_delete(&sbuf);
386 }
387 return (error);
388}
389SYSCTL_PROC(_kern_random_harvest, OID_AUTO, mask_symbolic,
333 "Entropy harvesting mask (printable)");
334
335static const char *random_source_descr[ENTROPYSOURCE] = {
336 [RANDOM_CACHED] = "CACHED",
337 [RANDOM_ATTACH] = "ATTACH",
338 [RANDOM_KEYBOARD] = "KEYBOARD",
339 [RANDOM_MOUSE] = "MOUSE",
340 [RANDOM_NET_TUN] = "NET_TUN",

--- 44 unchanged lines hidden (view full) ---

385 first = false;
386 }
387 error = sbuf_finish(&sbuf);
388 sbuf_delete(&sbuf);
389 }
390 return (error);
391}
392SYSCTL_PROC(_kern_random_harvest, OID_AUTO, mask_symbolic,
390 CTLTYPE_STRING | CTLFLAG_RD, NULL, 0, random_print_harvestmask_symbolic,
391 "A", "Entropy harvesting mask (symbolic)");
393 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, 0,
394 random_print_harvestmask_symbolic, "A",
395 "Entropy harvesting mask (symbolic)");
392
393/* ARGSUSED */
394static void
395random_harvestq_init(void *unused __unused)
396{
397 static const u_int almost_everything_mask =
398 (((1 << (RANDOM_ENVIRONMENTAL_END + 1)) - 1) &
399 ~_RANDOM_HARVEST_ETHER_OFF & ~_RANDOM_HARVEST_UMA_OFF);

--- 261 unchanged lines hidden ---
396
397/* ARGSUSED */
398static void
399random_harvestq_init(void *unused __unused)
400{
401 static const u_int almost_everything_mask =
402 (((1 << (RANDOM_ENVIRONMENTAL_END + 1)) - 1) &
403 ~_RANDOM_HARVEST_ETHER_OFF & ~_RANDOM_HARVEST_UMA_OFF);

--- 261 unchanged lines hidden ---