net: ne2000: fix bounds check in ioport operations
While doing ioport r/w operations, ne2000 device emulation suffers from OOB r/w errors. Update respective array bounds check to avoid OOB access. Reported-by: Ling Liu <liuling-it@360.cn> Cc: qemu-stable@nongnu.org Signed-off-by: Prasad J Pandit <pjp@fedoraproject.org> Signed-off-by: Jason Wang <jasowang@redhat.com>
This commit is contained in:
		
							parent
							
								
									007cd223de
								
							
						
					
					
						commit
						aa7f9966df
					
				| 
						 | 
				
			
			@ -467,8 +467,9 @@ static inline void ne2000_mem_writel(NE2000State *s, uint32_t addr,
 | 
			
		|||
                                     uint32_t val)
 | 
			
		||||
{
 | 
			
		||||
    addr &= ~1; /* XXX: check exact behaviour if not even */
 | 
			
		||||
    if (addr < 32 ||
 | 
			
		||||
        (addr >= NE2000_PMEM_START && addr < NE2000_MEM_SIZE)) {
 | 
			
		||||
    if (addr < 32
 | 
			
		||||
        || (addr >= NE2000_PMEM_START
 | 
			
		||||
            && addr + sizeof(uint32_t) <= NE2000_MEM_SIZE)) {
 | 
			
		||||
        stl_le_p(s->mem + addr, val);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -497,8 +498,9 @@ static inline uint32_t ne2000_mem_readw(NE2000State *s, uint32_t addr)
 | 
			
		|||
static inline uint32_t ne2000_mem_readl(NE2000State *s, uint32_t addr)
 | 
			
		||||
{
 | 
			
		||||
    addr &= ~1; /* XXX: check exact behaviour if not even */
 | 
			
		||||
    if (addr < 32 ||
 | 
			
		||||
        (addr >= NE2000_PMEM_START && addr < NE2000_MEM_SIZE)) {
 | 
			
		||||
    if (addr < 32
 | 
			
		||||
        || (addr >= NE2000_PMEM_START
 | 
			
		||||
            && addr + sizeof(uint32_t) <= NE2000_MEM_SIZE)) {
 | 
			
		||||
        return ldl_le_p(s->mem + addr);
 | 
			
		||||
    } else {
 | 
			
		||||
        return 0xffffffff;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue