Posts Tagged ‘kernel’

Wine: preloader failed to reserve range 00000000-60000000

Posted on the abril 16th, 2008 under GNU/Linux,Probando herramientas,Software Libre by

Que lindo encontrarse con este error, más estando con una distribución que se va a convertir seguro en la principal en mi PC de escritorio y en el portátil. Estoy hablando de Hardy Heron, la nueva distro de Ubuntu.

Aunque según estuve investigando, el error se debe a una nueva política de seguridad en el Kernel. Acá se explica el por qué del cambio. Este error o mejor dicho advertencia (warning) es visible cuando quiero ejecutar cualquier programa mediante el Wine preloader. Especificamente me comenzó a ocurrir cuando quise probar el Smalltalk Express (que documenté aquí como hacerlo correr en GNU/Linux). Para mi desgracia luego de estos warnings terminó en un error.

Para ir al grano. La aplicación es de 16 bits, por lo tanto seguramente el error es reproducible con otras. Les pego el error que obtengo:

nacho@nacho-laptop:~/programas/oSTEXPRES$ wine VW.EXE
preloader: Warning: failed to reserve range 00000000-60000000
preloader: Warning: failed to reserve range 00000000-60000000
preloader: Warning: failed to reserve range 00000000-60000000
err:dosmem:setup_dos_mem Cannot use first megabyte for DOS address space, please report
preloader: Warning: failed to reserve range 00000000-60000000
err:dosmem:setup_dos_mem Cannot use first megabyte for DOS address space, please report
err:dosmem:setup_dos_mem Cannot use first megabyte for DOS address space, please report
preloader: Warning: failed to reserve range 00000000-60000000
err:dosmem:setup_dos_mem Cannot use first megabyte for DOS address space, please report
err:dosmem:load_winedos Could not load winedos.dll, DOS subsystem unavailable
winevdm: unable to exec '--app-name': 16-bit support missing

Buscando por la red encontré varios bugs anteriores que daban el mismo error. Pero fue éste y precisamente éste comentario, el que me enseñó la luz. En un artículo de Kerneltrap se puede leer que se decidió para evitar futuros ataques, proteger ese espacio de memoria. Sin embargo hay un mínimo que se puede utilizar, continuando con la protección, y que permite que se ejecuten en este caso, las aplicaciones de 16 bits con Wine sin problemas.

Hay que editar el archivo /etc/sysctl.conf y modificar la línea con el valor 4096 (0 desactiva la protección)

# protect bottom 64k of memory from mmap to prevent NULL-dereference
# attacks against potential future kernel security vulnerabilities.
# (Added in kernel 2.6.23.)
# vm.mmap_min_addr = 65536
vm.mmap_min_addr = 4096

para que el cambio se efectúe permanentemente. Si lo queremos hacer temporal, se puede hacer con

# echo 4096 > /proc/sys/vm/mmap_min_addr
o bien
# sysctl -w vm.mmap_min_addr=4096

En cuanto al proyecto Wine, están proponiendo un parche que al menos informe sobre esta incompatibilidad con el cambio en el parámetro del Kernel.