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

Pregunta:

La página de manual de cp(1) dice

--no-clobber no sobrescribe un archivo existente

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

  1. cp comprueba 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. Dado que cp no conoce el archivo ahora existente, sobrescribe los datos

¿Es cp --no-clobber vulnerable a esta condición de carrera? Y si no es así, ¿cómo evita cp la situación anterior?

Respuesta:

cp no es vulnerable a esta condición de carrera. Cuando se establece --no-clobber , comprueba si el destino ya existe; si determina que no lo hace y, por lo tanto, debe continuar con la copia, recuerda que se supone que debe copiar a un nuevo archivo. Cuando llega el momento de abrir el archivo de destino, lo abre con banderas que O_CREAT su creación , O_CREAT y O_EXCL ; el sistema operativo luego verifica que el archivo no existe al abrirlo , y falla ( EEXIST ) si existe.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım