¿Es `cp --no-clobber` vulnerable a la condición de carrera?

¿Es `cp --no-clobber` vulnerable a la condición de carrera?

La página de manual paracp(1)dice

--no-clobberno sobrescribir un archivo existente

Sin embargo, ¿no sería posible el siguiente escenario?

  1. cpcomprueba la existencia del archivo, supongamos que el archivo no existe (todavía)
  2. Algún otro proceso escribe en la misma ruta, por lo que ahora hay datos escritos en el archivo que antes no existía.
  3. Como cpno conoce el archivo ahora existente, sobrescribe los datos.

¿Es cp --no-clobbervulnerable a esta condición de carrera? Y si no, ¿cómo se cpevita la situación anterior?

Respuesta1

cpno es vulnerable a esta condición de carrera. Cuando --no-clobberestá configurado, verifica si el destino ya existe; si determina que no es así y, por lo tanto, debe continuar con la copia, recuerda que se supone que debe copiar a un archivo nuevo. Cuando llegue el momento de abrir el archivo de destino,lo abre con banderas que imponen su creación,O_CREATyO_EXCL; El sistema operativo luego verifica que el archivo no existe.mientras lo abrey falla ( EEXIST) si lo hace.

información relacionada