Reiniciar Squid en RHEL 6.7 borra todos los archivos del disco duro

Tranquilos, Red Hat Enterprise Linux (RHEL) 6.7 todavía está en fase pre-beta y no se ha publicado pero acojona asusta, ¿verdad? 

Peor cara se le quedó a Swapna Krishnan, un empleado de Red Hat que notificaba el bug con el que se ejecutaba «rm -rf / *» (y, en consecuencia, eliminaba todos los archivos del sistema) con sólo reiniciar el demonio de la versión squid-3.1.23-4.el6 del popular proxy:

Descripción del problema:
"Después de instalar los paquetes de prueba para RHEL 6.7, cuando trato de parar o reiniciar Squid cuando está en ejecución, se mantiene a la espera y de repente empieza a borrar todos los archivos del disco duro. En ese punto es difícil diagnosticar nada más porque se elimina una gran cantidad de archivos en la máquina

[root@tyan-gt24-04 ~]# service squid status
squid is stopped
[root@tyan-gt24-04 ~]# service squid start
Starting squid: .[  OK  ]
[root@tyan-gt24-04 ~]#
[root@tyan-gt24-04 ~]# service squid status
squid (pid  9122) is running...
[root@tyan-gt24-04 ~]# service squid restart
Stopping squid: ...........
Stopping squid: ................[  OK  ]
rm: cannot remove `/boot': Device or resource busy
rm: cannot remove `/cgroup/cpuset/libvirt/lxc/cpuset.memory_spread_slab': Operation not permitted
rm: cannot remove `/cgroup/cpuset/libvirt/lxc/cpuset.memory_spread_page': Operation not permitted
rm: cannot remove `/cgroup/cpuset/libvirt/lxc/cpuset.memory_pressure': Operation not permitted
rm: cannot remove `/cgroup/cpuset/libvirt/lxc/cpuset.memory_migrate': Operation not permitted
.....
rm: cannot remove `/dev/shm': Device or resource busy
rm: cannot remove `/home': Device or resource busy


y simplemente se colgó aquí."


Evidentemente es sólo una nota de humor, porque como comentamos la versión con el bug nunca fue publicada y fue descubierta durante un proceso interno de QA del software. 

¿El fallo? Pues no chequear si la variable SQUID_PIDFILE_DIR está vacía en el script de arranque. Un ejemplo:

TEMP = "/tmp";

if [ -z "$TEMP"]; then echo "Vaya, la variable temp esta vacia"; else rm -rf $FEMP/*; fi


Oops, ¿ves el error? La segunda vez TEMP se escribió mal como FEMP, por lo que cuando se llama a la variable FEMP es inicializada y concatena
meramente  como "/"...

Fuente: https://bugzilla.redhat.com/show_bug.cgi?id=1202858

Comentarios