Index: sys/dev/random/fortuna.c =================================================================== --- sys/dev/random/fortuna.c +++ sys/dev/random/fortuna.c @@ -299,14 +299,14 @@ fortuna_state.fs_lasttime = 0; random_fortuna_o = SYSCTL_ADD_NODE(&random_clist, SYSCTL_STATIC_CHILDREN(_kern_random), - OID_AUTO, "fortuna", CTLFLAG_RW, 0, + OID_AUTO, "fortuna", CTLFLAG_RW | CTLFLAG_MPSAFE, 0, "Fortuna Parameters"); SYSCTL_ADD_PROC(&random_clist, - SYSCTL_CHILDREN(random_fortuna_o), OID_AUTO, - "minpoolsize", CTLTYPE_UINT | CTLFLAG_RWTUN, - &fortuna_state.fs_minpoolsize, RANDOM_FORTUNA_DEFPOOLSIZE, - random_check_uint_fs_minpoolsize, "IU", - "Minimum pool size necessary to cause a reseed"); + SYSCTL_CHILDREN(random_fortuna_o), OID_AUTO, "minpoolsize", + CTLTYPE_UINT | CTLFLAG_RWTUN | CTLFLAG_NEEDGIANT, + &fortuna_state.fs_minpoolsize, RANDOM_FORTUNA_DEFPOOLSIZE, + random_check_uint_fs_minpoolsize, "IU", + "Minimum pool size necessary to cause a reseed"); KASSERT(fortuna_state.fs_minpoolsize > 0, ("random: Fortuna threshold must be > 0 at startup")); SYSCTL_ADD_BOOL(&random_clist, SYSCTL_CHILDREN(random_fortuna_o), Index: sys/dev/random/ivy.c =================================================================== --- sys/dev/random/ivy.c +++ sys/dev/random/ivy.c @@ -60,7 +60,7 @@ .rs_read = random_ivy_read }; -SYSCTL_NODE(_kern_random, OID_AUTO, rdrand, CTLFLAG_RW, 0, +SYSCTL_NODE(_kern_random, OID_AUTO, rdrand, CTLFLAG_RW | CTLFLAG_MPSAFE, 0, "rdrand (ivy) entropy source"); static bool acquire_independent_seed_samples = false; SYSCTL_BOOL(_kern_random_rdrand, OID_AUTO, rdrand_independent_seed, Index: sys/dev/random/random_harvestq.c =================================================================== --- sys/dev/random/random_harvestq.c +++ sys/dev/random/random_harvestq.c @@ -111,7 +111,7 @@ static CK_LIST_HEAD(sources_head, random_sources) source_list = CK_LIST_HEAD_INITIALIZER(source_list); -SYSCTL_NODE(_kern_random, OID_AUTO, harvest, CTLFLAG_RW, 0, +SYSCTL_NODE(_kern_random, OID_AUTO, harvest, CTLFLAG_RW | CTLFLAG_MPSAFE, 0, "Entropy Device Parameters"); /* @@ -305,8 +305,10 @@ (orig_value & user_immutable_mask); return (0); } -SYSCTL_PROC(_kern_random_harvest, OID_AUTO, mask, CTLTYPE_UINT | CTLFLAG_RW, - NULL, 0, random_check_uint_harvestmask, "IU", "Entropy harvesting mask"); +SYSCTL_PROC(_kern_random_harvest, OID_AUTO, mask, + CTLTYPE_UINT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, NULL, 0, + random_check_uint_harvestmask, "IU", + "Entropy harvesting mask"); /* ARGSUSED */ static int @@ -326,7 +328,8 @@ return (error); } 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)"); static const char *random_source_descr[ENTROPYSOURCE] = { @@ -387,8 +390,9 @@ return (error); } SYSCTL_PROC(_kern_random_harvest, OID_AUTO, mask_symbolic, - CTLTYPE_STRING | CTLFLAG_RD, NULL, 0, random_print_harvestmask_symbolic, - "A", "Entropy harvesting mask (symbolic)"); + CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_NEEDGIANT, NULL, 0, + random_print_harvestmask_symbolic, "A", + "Entropy harvesting mask (symbolic)"); /* ARGSUSED */ static void Index: sys/dev/random/random_infra.c =================================================================== --- sys/dev/random/random_infra.c +++ sys/dev/random/random_infra.c @@ -38,9 +38,10 @@ #include /* Set up the sysctl root node for the entropy device */ -SYSCTL_NODE(_kern, OID_AUTO, random, CTLFLAG_RW, 0, +SYSCTL_NODE(_kern, OID_AUTO, random, CTLFLAG_RW | CTLFLAG_MPSAFE, 0, "Cryptographically Secure Random Number Generator"); -SYSCTL_NODE(_kern_random, OID_AUTO, initial_seeding, CTLFLAG_RW, 0, +SYSCTL_NODE(_kern_random, OID_AUTO, initial_seeding, + CTLFLAG_RW | CTLFLAG_MPSAFE, 0, "Initial seeding control and information"); /*