Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 9 Dec 2002 8:12:53 +0100
From:      <hselasky@c2i.net>
To:        FreeBSD-gnats-submit@FreeBSD.org
Subject:   i386/46113: busspace bug
Message-ID:  <20021209071253.NGNL5799.fep03-svc.swip.net@mta-int.swip.net>

next in thread | raw e-mail | index | archive | help

>Number:         46113
>Category:       i386
>Synopsis:       busspace bug
>Confidential:   no
>Severity:       critical
>Priority:       high
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sun Dec 08 23:20:01 PST 2002
>Closed-Date:
>Last-Modified:
>Originator:     -
>Release:        FreeBSD 5.0-CURRENT i386
>Organization:
>Environment:
System: FreeBSD curly.tele2.no 5.0-CURRENT FreeBSD 5.0-CURRENT #458: Sat Dec 7 18:40:33 CET 2002 root@curly.tele2.no:/usr/obj/usr/src/sys/custom i386


	
>Description:
	Some busspace functions lack check for (count == 0). Some busspace functions interpret (count == 0) as (unsigned)(-1) + 1. 
>How-To-Repeat:
	
>Fix:

	

--- bus_at386.h.diff begins here ---
*** /mnt3/src/sys/i386/include/bus_at386.h	Mon Jul 29 12:21:22 2002
--- bus_at386.h	Mon Nov 18 17:42:32 2002
***************
*** 277,282 ****
--- 277,284 ----
  #endif
  	{
  #ifdef __GNUC__
+ 		if(count != 0)
+ 		{
  		__asm __volatile("				\n\
  			cld					\n\
  		1:	movb (%2),%%al				\n\
***************
*** 285,290 ****
--- 287,293 ----
  		    "=D" (addr), "=c" (count)			:
  		    "r" (bsh + offset), "0" (addr), "1" (count)	:
  		    "%eax", "memory");
+ 		}
  #endif
  	}
  #endif
***************
*** 306,311 ****
--- 309,316 ----
  #endif
  	{
  #ifdef __GNUC__
+ 		if(count != 0)
+ 		{
  		__asm __volatile("				\n\
  			cld					\n\
  		1:	movw (%2),%%ax				\n\
***************
*** 314,319 ****
--- 319,325 ----
  		    "=D" (addr), "=c" (count)			:
  		    "r" (bsh + offset), "0" (addr), "1" (count)	:
  		    "%eax", "memory");
+ 		}
  #endif
  	}
  #endif
***************
*** 335,340 ****
--- 341,348 ----
  #endif
  	{
  #ifdef __GNUC__
+ 		if(count != 0)
+ 		{
  		__asm __volatile("				\n\
  			cld					\n\
  		1:	movl (%2),%%eax				\n\
***************
*** 343,348 ****
--- 351,357 ----
  		    "=D" (addr), "=c" (count)			:
  		    "r" (bsh + offset), "0" (addr), "1" (count)	:
  		    "%eax", "memory");
+ 		}
  #endif
  	}
  #endif
***************
*** 384,389 ****
--- 393,400 ----
  	{
  		int _port_ = bsh + offset;
  #ifdef __GNUC__
+ 		if(count != 0)
+ 		{
  		__asm __volatile("				\n\
  			cld					\n\
  		1:	inb %w2,%%al				\n\
***************
*** 393,398 ****
--- 404,410 ----
  		    "=D" (addr), "=c" (count), "=d" (_port_)	:
  		    "0" (addr), "1" (count), "2" (_port_)	:
  		    "%eax", "memory", "cc");
+ 		}
  #endif
  	}
  #endif
***************
*** 426,431 ****
--- 438,445 ----
  	{
  		int _port_ = bsh + offset;
  #ifdef	__GNUC__
+ 		if(count != 0)
+ 		{
  		__asm __volatile("				\n\
  			cld					\n\
  		1:	inw %w2,%%ax				\n\
***************
*** 435,440 ****
--- 449,455 ----
  		    "=D" (addr), "=c" (count), "=d" (_port_)	:
  		    "0" (addr), "1" (count), "2" (_port_)	:
  		    "%eax", "memory", "cc");
+ 		}
  #endif
  	}
  #endif
***************
*** 468,473 ****
--- 483,490 ----
  	{
  		int _port_ = bsh + offset;
  #ifdef	__GNUC__
+ 		if(count != 0)
+ 		{
  		__asm __volatile("				\n\
  			cld					\n\
  		1:	inl %w2,%%eax				\n\
***************
*** 477,482 ****
--- 494,500 ----
  		    "=D" (addr), "=c" (count), "=d" (_port_)	:
  		    "0" (addr), "1" (count), "2" (_port_)	:
  		    "%eax", "memory", "cc");
+ 		}
  #endif
  	}
  #endif
***************
*** 616,621 ****
--- 634,641 ----
  #endif
  	{
  #ifdef	__GNUC__
+ 		if(count != 0)
+ 		{
  		__asm __volatile("				\n\
  			cld					\n\
  		1:	lodsb					\n\
***************
*** 624,629 ****
--- 644,650 ----
  		    "=S" (addr), "=c" (count)			:
  		    "r" (bsh + offset), "0" (addr), "1" (count)	:
  		    "%eax", "memory", "cc");
+ 		}
  #endif
  	}
  #endif
***************
*** 645,650 ****
--- 666,673 ----
  #endif
  	{
  #ifdef	__GNUC__
+ 		if(count != 0)
+ 		{
  		__asm __volatile("				\n\
  			cld					\n\
  		1:	lodsw					\n\
***************
*** 653,658 ****
--- 676,682 ----
  		    "=S" (addr), "=c" (count)			:
  		    "r" (bsh + offset), "0" (addr), "1" (count)	:
  		    "%eax", "memory", "cc");
+ 		}
  #endif
  	}
  #endif
***************
*** 674,679 ****
--- 698,705 ----
  #endif
  	{
  #ifdef	__GNUC__
+ 		if(count != 0)
+ 		{
  		__asm __volatile("				\n\
  			cld					\n\
  		1:	lodsl					\n\
***************
*** 682,687 ****
--- 708,714 ----
  		    "=S" (addr), "=c" (count)			:
  		    "r" (bsh + offset), "0" (addr), "1" (count)	:
  		    "%eax", "memory", "cc");
+ 		}
  #endif
  	}
  #endif
***************
*** 724,729 ****
--- 751,758 ----
  	{
  		int _port_ = bsh + offset;
  #ifdef	__GNUC__
+ 		if(count != 0)
+ 		{
  		__asm __volatile("				\n\
  			cld					\n\
  		1:	lodsb					\n\
***************
*** 733,738 ****
--- 762,768 ----
  		    "=d" (_port_), "=S" (addr), "=c" (count)	:
  		    "0" (_port_), "1" (addr), "2" (count)	:
  		    "%eax", "memory", "cc");
+ 		}
  #endif
  	}
  #endif
***************
*** 766,771 ****
--- 796,803 ----
  	{
  		int _port_ = bsh + offset;
  #ifdef	__GNUC__
+ 		if(count != 0)
+ 		{
  		__asm __volatile("				\n\
  			cld					\n\
  		1:	lodsw					\n\
***************
*** 775,780 ****
--- 807,813 ----
  		    "=d" (_port_), "=S" (addr), "=c" (count)	:
  		    "0" (_port_), "1" (addr), "2" (count)	:
  		    "%eax", "memory", "cc");
+ 		}
  #endif
  	}
  #endif
***************
*** 808,813 ****
--- 841,848 ----
  	{
  		int _port_ = bsh + offset;
  #ifdef	__GNUC__
+ 		if(count != 0)
+ 		{
  		__asm __volatile("				\n\
  			cld					\n\
  		1:	lodsl					\n\
***************
*** 817,822 ****
--- 852,858 ----
  		    "=d" (_port_), "=S" (addr), "=c" (count)	:
  		    "0" (_port_), "1" (addr), "2" (count)	:
  		    "%eax", "memory", "cc");
+ 		}
  #endif
  	}
  #endif
--- bus_at386.h.diff ends here ---





-------------------------------------------------
WebMail fra Tele2 http://www.tele2.no
-------------------------------------------------

>Release-Note:
>Audit-Trail:
>Unformatted:

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20021209071253.NGNL5799.fep03-svc.swip.net>