Package: grub Version: 0.97-41 Severity: normal
Grub seems to fail if attempting to install the boot block on an image file target. This only occurs when running a Debian patched version of grub on an amd64 host; unpatched grub does not produce this error and neither does the patched grub on an x86 host. The patched x86 version also fails if run in a 32-bit chroot on an amd64 host. An error message is left in the kernel dmesg: ioctl32(grub:3018): Unknown cmd fd(3) cmd(00005331){t:'S';sz:0} arg(00000000) on /home/ksandstr/grub_image_bug/demonstration.img ioctl32(grub:3018): Unknown cmd fd(3) cmd(80041272){t:12;sz:4} arg(f7ba49f0) on /home/ksandstr/grub_image_bug/demonstration.img ioctl32(grub:3018): Unknown cmd fd(3) cmd(00001261){t:12;sz:0} arg(00000000) on /home/ksandstr/grub_image_bug/demonstration.img ioctl32(grub:3018): Unknown cmd fd(3) cmd(00001261){t:12;sz:0} arg(00000000) on /home/ksandstr/grub_image_bug/demonstration.img grub[3018] trap divide error ip:804d886 sp:f7ba4720 error:0 in grub[8048000+bb000] I suspect this is caused by lacking error handling in an ioctl that is present in x86 kernels but absent in amd64 kernels: the ioctl command would return an EINVAL error (or equivalent) error which the caller ignores, causing an output variable to be left at its initialization-time value of 0, which produces a division by zero error further down the line. A script that provokes this bug (requires the genext2fs package): -- provoke.sh begins -- #!/bin/sh IMAGE=demonstration.img mkdir -p rootdir genext2fs --squash -b 2880 -d rootdir $IMAGE /usr/sbin/grub --batch --device-map=/dev/null <<EOF device (fd0) $IMAGE root (fd0) setup (fd0) quit EOF -- provoke.sh ends -- -- Package-specific info: *********************** BEGIN /boot/grub/device.map (hd0) /dev/hda (hd1) /dev/hdb (hd2) /dev/sda (hd3) /dev/sdb *********************** END /boot/grub/device.map *********************** BEGIN /proc/mounts /dev/md0 / reiserfs rw,relatime,acl 0 0 /dev/md0 /dev/.static/dev reiserfs rw,acl 0 0 /dev/hda1 /boot ext2 rw,noatime,errors=continue 0 0 /dev/mapper/uc /usr jfs rw,relatime 0 0 /dev/mapper/vc /var jfs rw,relatime 0 0 /dev/mapper/raid1-emul /emul jfs rw,relatime 0 0 /dev/mapper/raid1-srv /srv xfs rw,relatime,nobarrier,noquota 0 0 /dev/mapper/raid1-pg /var/lib/postgresql jfs rw,relatime 0 0 /dev/mapper/raid1-ia32sid /var/chroot/sid-ia32 jfs rw,relatime 0 0 /dev/mapper/home /home xfs rw,nobarrier,noquota 0 0 /dev/mapper/data /data xfs rw,nobarrier,noquota 0 0 /dev/mapper/bakkis /mnt/backup ext3 rw,errors=continue,data=ordered 0 0 /dev/mapper/stuff /stuff xfs rw,noatime,nobarrier,noquota 0 0 *********************** END /proc/mounts *********************** BEGIN /boot/grub/menu.lst # menu.lst - See: grub(8), info grub, update-grub(8) # grub-install(8), grub-floppy(8), # grub-md5-crypt, /usr/share/doc/grub # and /usr/share/doc/grub-doc/. ## default num # Set the default entry to the entry number NUM. Numbering starts from 0, and # the entry number 0 is the default if the command is not used. # # You can specify 'saved' instead of a number. In this case, the default entry # is the entry saved with the command 'savedefault'. default 0 ## timeout sec # Set a timeout, in SEC seconds, before automatically booting the default entry # (normally the first entry defined). timeout 5 # Pretty colours color cyan/blue white/blue ### PASSWORD LINE REMOVED ### # If used in the first section of a menu file, disable all interactive editing # control (menu entry editor and command-line) and entries protected by the # command 'lock' ### PASSWORD LINE REMOVED ### ### PASSWORD LINE REMOVED ### ### PASSWORD LINE REMOVED ### # # examples # # title Windows 95/98/NT/2000 # root (hd0,0) # makeactive # chainloader +1 # # title Linux # root (hd0,1) # kernel /vmlinuz root=/dev/hda2 ro # # # Put static boot stanzas before and/or after AUTOMAGIC KERNEL LIST ### BEGIN AUTOMAGIC KERNELS LIST ## lines between the AUTOMAGIC KERNELS LIST markers will be modified ## by the debian update-grub script except for the default options below ## DO NOT UNCOMMENT THEM, Just edit them to your needs ## ## Start Default Options ## ## default kernel options ## default kernel options for automagic boot options ## If you want special options for specific kernels use kopt_x_y_z ## where x.y.z is kernel version. Minor versions can be omitted. ## e.g. kopt=root=/dev/hda1 ro ## kopt_2_6_8=root=/dev/hdc1 ro ## kopt_2_6_8_2_686=root=/dev/hdc2 ro # kopt=root=/dev/md0 ro console=tty0 ## default grub root device ## e.g. groot=(hd0,0) # groot=(hd0,0) ## should update-grub create alternative automagic boot options ## e.g. alternative=true ## alternative=false # alternative=true ## should update-grub lock alternative automagic boot options ## e.g. lockalternative=true ## lockalternative=false # lockalternative=false ## additional options to use with the default boot option, but not with the ## alternatives ## e.g. defoptions=vga=791 resume=/dev/hda5 # defoptions= ## should update-grub lock old automagic boot options ## e.g. lockold=false ## lockold=true # lockold=false ## Xen hypervisor options to use with the default Xen boot option # xenhopt= ## Xen Linux kernel options to use with the default Xen boot option # xenkopt=console=tty0 ## altoption boot targets option ## multiple altoptions lines are allowed ## e.g. altoptions=(extra menu suffix) extra boot options ## altoptions=(single-user) single # altoptions=(recovery mode) single ## controls how many kernels should be put into the menu.lst ## only counts the first occurence of a kernel, not the ## alternative kernel options ## e.g. howmany=all ## howmany=7 # howmany=all ## should update-grub create memtest86 boot option ## e.g. memtest86=true ## memtest86=false # memtest86=true ## should update-grub adjust the value of the default booted system ## can be true or false # updatedefaultentry=false ## should update-grub add savedefault to the default options ## can be true or false # savedefault=false ## ## End Default Options ## title Debian GNU/Linux, kernel 2.6.25.6 Default root (hd0,0) kernel /vmlinuz root=/dev/md0 ro console=tty0 initrd /initrd.img title Debian GNU/Linux, kernel 2.6.25.6 Default (recovery mode) root (hd0,0) kernel /vmlinuz root=/dev/md0 ro console=tty0 single initrd /initrd.img title Debian GNU/Linux, kernel 2.6.25.2 Previous root (hd0,0) kernel /vmlinuz.old root=/dev/md0 ro console=tty0 initrd /initrd.img.old title Debian GNU/Linux, kernel 2.6.25.2 Previous (recovery mode) root (hd0,0) kernel /vmlinuz.old root=/dev/md0 ro console=tty0 single initrd /initrd.img.old title Debian GNU/Linux, kernel 2.6.25.6 root (hd0,0) kernel /vmlinuz-2.6.25.6 root=/dev/md0 ro console=tty0 initrd /initrd.img-2.6.25.6 title Debian GNU/Linux, kernel 2.6.25.6 (recovery mode) root (hd0,0) kernel /vmlinuz-2.6.25.6 root=/dev/md0 ro console=tty0 single initrd /initrd.img-2.6.25.6 title Debian GNU/Linux, kernel 2.6.25.2 root (hd0,0) kernel /vmlinuz-2.6.25.2 root=/dev/md0 ro console=tty0 initrd /initrd.img-2.6.25.2 title Debian GNU/Linux, kernel 2.6.25.2 (recovery mode) root (hd0,0) kernel /vmlinuz-2.6.25.2 root=/dev/md0 ro console=tty0 single initrd /initrd.img-2.6.25.2 title Debian GNU/Linux, kernel 2.6.24 root (hd0,0) kernel /vmlinuz-2.6.24 root=/dev/md0 ro console=tty0 initrd /initrd.img-2.6.24 title Debian GNU/Linux, kernel 2.6.24 (recovery mode) root (hd0,0) kernel /vmlinuz-2.6.24 root=/dev/md0 ro console=tty0 single initrd /initrd.img-2.6.24 title Debian GNU/Linux, kernel memtest86+ root (hd0,0) kernel /memtest86+.bin ### END DEBIAN AUTOMAGIC KERNELS LIST *********************** END /boot/grub/menu.lst -- System Information: Debian Release: lenny/sid APT prefers testing APT policy: (500, 'testing') Architecture: amd64 (x86_64) Kernel: Linux 2.6.25.6 (SMP w/2 CPU cores) Locale: LANG=C, LC_CTYPE=fi_FI.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/bash Versions of packages grub depends on: ii grub-common 1.96+20080704-2 GRand Unified Bootloader, version grub recommends no packages. -- no debconf information -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]