¿Es seguro leer / dev / urandom thread-thread?
-
02-07-2019 - |
Pregunta
Este es el código:
unsigned int number;
FILE* urandom = fopen("/dev/urandom", "r");
if (urandom) {
size_t bytes_read = fread(&number, 1, sizeof(number), urandom);
DCHECK(bytes_read == sizeof(number));
fclose(urandom);
} else {
NOTREACHED();
}
Si no es así, ¿cómo lo hago seguro para subprocesos?
Solución
Siempre que cada ejecución de la función esté en su propio hilo (es decir, las variables locales number
, urandom
, bytes_read
no están compartido entre hilos), no veo ningún problema de seguridad de hilos. Cada hilo tendrá su propio descriptor de archivo en / dev / urandom
. / dev / urandom
se puede abrir simultáneamente desde múltiples procesos, así que está bien.
Por cierto, / dev / urandom
puede fallar al abrir, y su código debe lidiar con eso. Algunas causas son: quedarse sin descriptores de archivo disponibles; / dev
no está montado correctamente (aunque en este caso tiene problemas mayores); su programa se ejecuta en un chroot
especial que niega el acceso a cualquier dispositivo; etc.