Bug 1183904

Summary: OVMF raise exception when grub2-efi starting load kernel after assigned IP to virtio-net(using oprom)
Product: Red Hat Enterprise Linux 7 Reporter: Xiaoqing Wei <xwei>
Component: ipxeAssignee: Virtualization Maintenance <virt-maint>
Status: CLOSED DUPLICATE QA Contact: Virtualization Bugs <virt-bugs>
Severity: medium Docs Contact:
Priority: medium    
Version: 7.1CC: hhuang, juzhang, lersek, xwei
Target Milestone: rc   
Target Release: ---   
Hardware: x86_64   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2015-01-26 07:56:25 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Attachments:
Description Flags
grub2 stand alone image none

Description Xiaoqing Wei 2015-01-20 07:13:29 UTC
Description of problem:

OVMF raise exception when grub2-efi starting load kernel after assigned IP to virtio-net(using oprom)

Version-Release number of selected component (if applicable):
qemu-kvm-rhev-2.1.2-18.el7.x86_64
ipxe-roms-qemu-20130517-6.gitc4bce43.el7.noarch
ipxe-bootimgs-20130517-6.gitc4bce43.el7.noarch
ipxe-roms-20130517-6.gitc4bce43.el7.noarch
OVMF-20140822-7.git9ece15a.el7.x86_64
kernel-3.10.0-221.el7.x86_64

How reproducible:
only once, and never happen again(50+ re-test)

Steps to Reproduce:
1. boot a ovmf virtio-net guest(non-secboot), from network, using oprom
/usr/libexec/qemu-kvm -name uefi-rhel66 -S -machine pc-i440fx-rhel7.1.0,accel=kvm,usb=off -drive file=/usr/share/OVMF/OVMF_CODE.fd,if=pflash,format=raw,unit=0,readonly=on -drive file=/var/lib/libvirt/qemu/nvram/uefi-rhel6_VARS.fd,if=pflash,format=raw,unit=1 -m 2048 -realtime mlock=off -smp 4,sockets=4,cores=1,threads=1 -uuid a4c10d00-ac50-400f-b05e-c629ffa7a020 -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/uefi-rhel66.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc -no-shutdown -boot menu=on,strict=on -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 -device virtio-scsi-pci,id=scsi0,bus=pci.0,addr=0x5 -device virtio-scsi-pci,id=scsi1,bus=pci.0,addr=0x9 -device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x4 -drive file=/var/lib/libvirt/images/uefi-rhel6.img,if=none,id=drive-virtio-disk0,format=qcow2,cache=none,aio=native -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x7,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=3 -drive file=/usr/share/OVMF/UefiShell.iso,if=none,id=drive-ide0-1-0,readonly=on,format=raw,cache=none,aio=native -device ide-cd,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0,bootindex=2 \
\
\
-netdev tap,fd=23,id=hostnet0,vhost=on,vhostfd=25 \
-device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:96:79:19,bus=pci.0,addr=0x3,bootindex=1 \
\
\
-chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -chardev spicevmc,id=charchannel0,name=vdagent -device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,id=channel0,name=com.redhat.spice.0 -spice port=5901,addr=0.0.0.0,disable-ticketing,seamless-migration=on -device cirrus-vga,id=video0,bus=pci.0,addr=0x2 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x6 -msg timestamp=on
2.
3.

Actual results:
-------- exception info from console
Network status: 
efinet0 52:54:00:96:79:19
eno0 52:54:00:96:79:19 192.168.0.9
eno0:local 192.168.0.0/24 eno0
Loading Red Hat Enterprise Linux Server release 6.6 GA kernel ...
!!!! X64 Exception Type - 000000000000000E     CPU Apic ID - 00000000 !!!!
RIP  - 000000007E5FAD16, CS  - 0000000000000028, RFLAGS - 0000000000210202
ExceptionData - 0000000000000000
RAX  - FFFFFFFFFFFFFFF0, RCX - 000000007E613070, RDX - 0000000000000000
RBX  - FFFFFFFFFFFFFFF0, RSP - 000000007FF66E10, RBP - 000000007E60FC50
RSI  - 0000000000000000, RDI - 000000007E60FC50
R8   - 000000007FF67030, R9  - 000000007E49E69E, R10 - 0000000000000064
R11  - 000000007E619000, R12 - 0000000000003420, R13 - FFFFFFFF819F03A0
R14  - 000000007E612630, R15 - 000000007FF67028
DS   - 0000000000000008, ES  - 0000000000000008, FS  - 0000000000000008
GS   - 0000000000000008, SS  - 0000000000000008
CR0  - 0000000080000033, CR2 - FFFFFFFFFFFFFFF0, CR3 - 000000007FF07000
CR4  - 0000000000000668, CR8 - 0000000000000000
DR0  - 0000000000000000, DR1 - 0000000000000000, DR2 - 0000000000000000
DR3  - 0000000000000000, DR6 - 00000000FFFF0FF0, DR7 - 0000000000000400
GDTR - 000000007FEF0D98 000000000000003F, LDTR - 0000000000000000
IDTR - 000000007F32B018 0000000000000FFF,   TR - 0000000000000000
FXSAVE_STATE - 000000007FF66A70
!!!! Find PE image 1af41000.efidrv (ImageBase=000000007E5F9000, EntryPoint=000000007E5FA3EF) !!!!
--------------
Expected results:
guest able to load and execute kernel

Additional info:

1)
cat grub.cfg

set timeout=5
menuentry 'Red Hat Enterprise Linux Server release 6.6 GA' --class os {
     insmod net 
     insmod efinet
     insmod tftp
     insmod gzio
     insmod part_gpt
     insmod efi_gop
     insmod efi_uga

     # dhcp, tftp server in my network
     set net_default_server=192.168.0.1
     # configure IP addr by using DHCP
     #net_bootp
     # in case DHCP wont work for grub2
     net_add_addr eno0 efinet0 192.168.0.9

     echo 'Network status: '
     net_ls_cards
     net_ls_addr
     net_ls_routes

     echo 'Loading Red Hat Enterprise Linux Server release 6.6 GA kernel ...'
     linux (tftp)/rhel66ga/vmlinuz ip=dhcp \
     repo=nfs:192.168.0.1:/home/rhel66 \
     console=ttyS0,115200 console=tty

     echo 'Loading Red Hat Enterprise Linux Server release 6.6 GA initial ramdisk ...'
     initrd (tftp)/rhel66ga/initrd.img
}




2)
dhcpd.conf on dhcp+tftp server
grep -v "#" /etc/dhcp/dhcpd.conf 
option space PXE;
option PXE.mtftp-ip    code 1 = ip-address;
option PXE.mtftp-cport code 2 = unsigned integer 16;
option PXE.mtftp-sport code 3 = unsigned integer 16;
option PXE.mtftp-tmout code 4 = unsigned integer 8;
option PXE.mtftp-delay code 5 = unsigned integer 8;

subnet 192.168.0.0 netmask 255.255.255.0 {
  range 192.168.0.2 192.168.0.250;

  class "pxeclients" {
    match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
    next-server 192.168.0.1;
    if option arch = 00:07 {
      filename "grub2-efi-2.02-0.16.el7.x86_64-with-cfg.efi";
      } else if option arch = 00:09 {
      filename "grub2-efi-2.02-0.16.el7.x86_64-with-cfg.efi";
      }
    }
  }

3) as the rhel6 kernel is too old to work with shim.efi(and it's not signed)
so I am using a customized grub2 image by extracting grub2-efi and grub2-efi-modules with embed cfg in 1):

grub2-mkstandalone -d /root/cpio-grub2-efi/usr/lib/grub/x86_64-efi/ -O x86_64-efi --fonts=unicode -o grub2-efi-2.02-0.16.el7.x86_64-with-cfg.efi /boot/grub/grub.cfg=./grub.cfg

binary file would be upload later

Comment 1 Xiaoqing Wei 2015-01-20 07:15:42 UTC
Created attachment 981752 [details]
grub2 stand alone image

Comment 3 Laszlo Ersek 2015-01-20 08:06:26 UTC
I'm very sorry, but the binary image "1af41000.efidrv", fingered in comment 0, makes this yet another iPXE bug:

> !!!! Find PE image 1af41000.efidrv (ImageBase=000000007E5F9000,
> EntryPoint=000000007E5FA3EF) !!!!

The exception handler (that prints the registers) belongs to edk2 alright, but the binary image causing the exception comes from iPXE.

Comment 4 Laszlo Ersek 2015-01-24 09:22:25 UTC
Please retest this scenario with the build in bug 1181980 comment 28. This BZ is a potential duplicate. Thanks.

Comment 5 Xiaoqing Wei 2015-01-26 06:19:55 UTC
with ipxe-roms-qemu-20130517-6.gitc4bce43.el7.efi_fixes_2.noarch

using virtio-net-pci(oprom), 20 pxe, doesn't happen
/usr/libexec/qemu-kvm -name uefi-rhel66 -S -machine pc-i440fx-rhel7.1.0,accel=kvm,usb=off -drive file=/usr/share/OVMF/OVMF_CODE.fd,if=pflash,format=raw,unit=0,readonly=on -drive file=/var/lib/libvirt/qemu/nvram/uefi-rhel6_VARS.fd,if=pflash,format=raw,unit=1 -m 2048 -realtime mlock=off -smp 4,sockets=4,cores=1,threads=1 -uuid a4c10d00-ac50-400f-b05e-c629ffa7a020 -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/uefi-rhel66.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc -no-shutdown -boot menu=on,strict=on -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 -device virtio-scsi-pci,id=scsi0,bus=pci.0,addr=0x5 -device virtio-scsi-pci,id=scsi1,bus=pci.0,addr=0x9 -device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x4 -drive file=/var/lib/libvirt/images/uefi-rhel6.img,if=none,id=drive-virtio-disk0,format=qcow2,cache=none,aio=native -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x7,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=3 -drive file=/usr/share/OVMF/UefiShell.iso,if=none,id=drive-ide0-1-0,readonly=on,format=raw,cache=none,aio=native -device ide-cd,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0,bootindex=2 \
\
\
-netdev tap,fd=23,id=hostnet0,vhost=on,vhostfd=25 \
\
-device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:96:79:19,bus=pci.0,addr=0x3,bootindex=1 \
\
\
-chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -chardev spicevmc,id=charchannel0,name=vdagent -device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,id=channel0,name=com.redhat.spice.0 -spice port=5901,addr=0.0.0.0,disable-ticketing,seamless-migration=on -device cirrus-vga,id=video0,bus=pci.0,addr=0x2 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x6 -msg timestamp=on

Comment 6 Laszlo Ersek 2015-01-26 07:56:25 UTC
(In reply to Xiaoqing Wei from comment #5)
> with ipxe-roms-qemu-20130517-6.gitc4bce43.el7.efi_fixes_2.noarch
> 
> using virtio-net-pci(oprom), 20 pxe, doesn't happen

Thank you for retesting!

*** This bug has been marked as a duplicate of bug 1181980 ***