[syslinux] [PATCH] fix for boot crash of syslinux-4.xx

Jan Safrata jsafrata at centrum.cz
Fri Oct 21 00:19:59 PDT 2011


As already reported in gentoo bugzilla while syslinux mailing list was not available:
https://bugs.gentoo.org/show_bug.cgi?id=384917

All syslinux 4.xx versions (tested up to 4.04) seems to contain a bug, that
causes a crash in early phase of syslinux boot from an usb stick.
This is always possible to reproduce, but only on certain hw (atom based
embedded board).
Version 3.86 of syslinux always works with that hw.

When syslinux 4.xx is used to setup bootable usb stick (which works on general
desktop pc), that usb stick does not work with embedded atom based board.
Screen is garbaged, flickering and the system hangs, instead of loading the
image to be booted.

Dissecting syslinux source code reveals, that the problem is within
  core/fs/cache.c
function cache_init(), where seems to be an invalid pointer used to store an
initial value - following patch fixes the problem by commenting out the
offending line, that seems not to be needed anyway:

--- syslinux-4.04/core/fs/cache.c-orig	2011-04-18 23:24:17.000000000 +0200
+++ syslinux-4.04/core/fs/cache.c	2011-09-29 10:54:46.000000000 +0200
@@ -40,7 +40,9 @@ void cache_init(struct device *dev, int
     cache = dev->cache_head + 1; /* First cache descriptor */
 
     head->prev  = &cache[dev->cache_entries-1];
-    head->next->prev = dev->cache_head;
+    /* following line crashes on some hw - NULL dereference? */
+    /* head->next->prev = dev->cache_head; */
+    /* it should not be needed anyway, since following loop does it too */
     head->block = -1;
     head->data  = NULL;

With that patch, syslinux works perfectly on the atom based embedded board as
well as on general pc.



More information about the Syslinux mailing list