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 --- |