qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] sh4: r2d fix no ide/net case


From: Aurelien Jarno
Subject: Re: [Qemu-devel] [PATCH] sh4: r2d fix no ide/net case
Date: Tue, 3 Mar 2009 07:23:31 +0100
User-agent: Mutt/1.5.18 (2008-05-17)

On Thu, Feb 12, 2009 at 12:45:37AM +0900, address@hidden wrote:
> Fix invalid access/crash when there is no IDE device or NET device.
> 
> Signed-off-by: Takashi YOSHII <address@hidden>

Thanks, applied.

> ---
> Current code doesn't check if IDE and NIC is present.
> When no IDE is enabled, it accesses invalid adddress (drives_table[-1]).
> When no NIC is enabled, it accesses NULL pointer and is killed by SEGV.
> 
> SEGV case is easily be seen like below (by -net none)
>  $ sh4-softmmu/qemu-system-sh4 -M r2d -kernel kernel.kawa -net none
>  Segmentation fault
> 
> This changes default model of 2nd NIC from ne2k-pci to rtl8139.
> 2nd NIC on-board really was rtl8139.
> 
> If you depends on old behavior use -net option, for example
>   -net nic -net nic,model=ne2k_pci
> makes 2nd NIC to be ne2k_pci.
> /yoshii
> 
> ---
>  hw/r2d.c |   10 +++++-----
>  1 files changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/hw/r2d.c b/hw/r2d.c
> index 7dcb723..5360b4b 100644
> --- a/hw/r2d.c
> +++ b/hw/r2d.c
> @@ -224,13 +224,13 @@ static void r2d_init(ram_addr_t ram_size, int 
> vga_ram_size,
>              serial_hds[2]);
>  
>      /* onboard CF (True IDE mode, Master only). */
> -    mmio_ide_init(0x14001000, 0x1400080c, irq[CF_IDE], 1,
> -        drives_table[drive_get_index(IF_IDE, 0, 0)].bdrv, NULL);
> +    if ((i = drive_get_index(IF_IDE, 0, 0)) != -1)
> +     mmio_ide_init(0x14001000, 0x1400080c, irq[CF_IDE], 1,
> +                   drives_table[i].bdrv, NULL);
>  
>      /* NIC: rtl8139 on-board, and 2 slots. */
> -    pci_nic_init(pci, &nd_table[0], 2 << 3, "rtl8139");
> -    for (i = 1; i < nb_nics; i++)
> -        pci_nic_init(pci, &nd_table[i], -1, "ne2k_pci");
> +    for (i = 0; i < nb_nics; i++)
> +        pci_nic_init(pci, &nd_table[i], (i==0)? 2<<3: -1, "rtl8139");
>  
>      /* Todo: register on board registers */
>      if (kernel_filename) {
> -- 
> 1.5.6.3
> 
> 
> 
> -- 
> /yoshii
> 
> 
> 

-- 
Aurelien Jarno                          GPG: 1024D/F1BCDB73
address@hidden                 http://www.aurel32.net




reply via email to

[Prev in Thread] Current Thread [Next in Thread]