On some systems, it has been observed that Solaris 7 panics during boot from installation media and reboots the system. At least Solaris 7 U1 (3/99) and U4 (11/99) are affected. Only “fast” systems (definitely including Sandy Bridge 3+ GHz processors) exhibit this problem, and the exact behavior depends on hardware configuration.
When booting with kadb, the system doesn’t reboot itself and the panic information can be easily read:
Clearly a page fault caused a null pointer dereference… but why?
The problem is an “obvious” coding error that lay dormant for some time masked by slow hardware. A stack backtrace gives a better picture of the problem:
Solaris maintains a table of kernel symbols which needs to be updated when kernel modules are loaded/unloaded. To avoid unnecessary CPU load when many modules are quickly loaded/unloaded (especially during system boot), the OS ensures that at least one second elapsed between symbol table updates.
Astute readers are probably starting to smell a rat. Yes, Solaris 7 also waits for a second before the first update. Until that update runs, the ksyms_table pointer is NULL and if an attempt is made to access the symbol table, the kernel will panic. Duh!
As mentioned above, exposing this race condition requires a sufficiently fast system, probably considerably faster than what was available when Solaris 7 was released.
Solaris is fortunately flexible enough that the bug can be worked around on a live system. On the boot loader prompt when the installation CD asks for the installation type, enter
b kadb -d
That will boot with kernel debugger (kadb) and stop (-d) once the kernel is loaded. After the kernel is loaded, on the kadb prompt enter:
ksyms_update_delay/W 0 :c
That will remove the 1-second symbol table update delay and the panic will be avoided. Once Solaris is installed, the problem is unlikely to occur.