TechNote: Booting 64-bit Kernels on UltraSPARC-1 Systems


Systems based on the UltraSPARC-1 processor, such as the Ultra 1 and Ultra 2 usually do not boot the 64-bit Solaris kernel by default, even though it may be installed. There are two reasons for this; the first is that many of these systems may require firmware upgrades to run a 64-bit kernel. The second reason is due to an obscure bug in the UltraSPARC-1 implementation which could allow a local user to execute a malicious 64-bit program that stalls the processor.

The boot(1M) man page says the following on the subject:

Certain platforms may need a firmware upgrade to run the 64-bit kernel. See the Sun Hardware Platform Guide for details. If the 64-bit kernel packages are installed and boot detects that the platform needs a firmware upgrade to run 64-bit, boot displays a message on the console and chooses the 32-bit kernel as the default file instead.

On systems containing 200MHz or lower UltraSPARC-1 processors, it is possible for a user to run a 64-bit program designed to exploit a problem that could cause a processor to stall. Since 64-bit progams cannot run on the 32-bit kernel, the 32-bit kernel is chosen as the default file on these systems.

The code sequence that exploits the problem is very unusual and is not likely to be generated by a compiler. Assembler code had to be specifically written to demonstrate the problem. It is highly unlikely that a legitimate handwritten assembler routine would use this code sequence.

Users willing to assume the risk that a user might accidentally or deliberately run a program that was designed to cause a processor to stall may choose to run the 64-bit kernel by modifying the boot policy file. Edit /platform/platform-name/boot.conf so that it contains an uncommented line with the variable named ALLOW_64BIT_KERNEL_ON_UltraSPARC_1_CPU set to the value true as shown in the example that follows:

ALLOW_64BIT_KERNEL_ON_UltraSPARC_1_CPU=true