svn commit: r183944 - user/netchild/misc/src/sys/dev/hptmv

Alexander Leidinger netchild at FreeBSD.org
Thu Oct 16 10:42:10 UTC 2008


Author: netchild
Date: Thu Oct 16 10:42:10 2008
New Revision: 183944
URL: http://svn.freebsd.org/changeset/base/183944

Log:
  Error handling of copyin/copyout.

Modified:
  user/netchild/misc/src/sys/dev/hptmv/hptproc.c

Modified: user/netchild/misc/src/sys/dev/hptmv/hptproc.c
==============================================================================
--- user/netchild/misc/src/sys/dev/hptmv/hptproc.c	Thu Oct 16 10:41:02 2008	(r183943)
+++ user/netchild/misc/src/sys/dev/hptmv/hptproc.c	Thu Oct 16 10:42:10 2008	(r183944)
@@ -261,7 +261,7 @@ hpt_set_info(int length)
 
 #ifdef SUPPORT_IOCTL
 	PUCHAR ke_area;
-	int err;
+	int err = 0;
 	DWORD dwRet;
 	PHPT_IOCTL_PARAM piop;
 #endif
@@ -301,21 +301,26 @@ hpt_set_info(int length)
 				}
 
 			if (piop->nInBufferSize)
-				copyin((void*)(ULONG_PTR)piop->lpInBuffer, ke_area, piop->nInBufferSize);
+				err = copyin((void*)(ULONG_PTR)piop->lpInBuffer, ke_area, piop->nInBufferSize);
 
 			/*
 			  * call kernel handler.
 			  */    
-			err = Kernel_DeviceIoControl(&gIal_Adapter->VBus,
-				piop->dwIoControlCode, ke_area, piop->nInBufferSize,
-				ke_area + piop->nInBufferSize, piop->nOutBufferSize, &dwRet);    
+			if (err==0)
+				err = Kernel_DeviceIoControl(&gIal_Adapter->VBus,
+					piop->dwIoControlCode, ke_area, piop->nInBufferSize,
+					ke_area + piop->nInBufferSize, piop->nOutBufferSize, &dwRet);    
 			
 			if (err==0) {
-				if (piop->nOutBufferSize)
-					copyout(ke_area + piop->nInBufferSize, (void*)(ULONG_PTR)piop->lpOutBuffer, piop->nOutBufferSize);
+				if (piop->nOutBufferSize) {
+					err = copyout(ke_area + piop->nInBufferSize, (void*)(ULONG_PTR)piop->lpOutBuffer, piop->nOutBufferSize);
+					if (err) KdPrintW(("Kernel_ioctl(): copyout (1) return %d\n", err));
+				}
 				
-				if (piop->lpBytesReturned)
-					copyout(&dwRet, (void*)(ULONG_PTR)piop->lpBytesReturned, sizeof(DWORD));
+				if (piop->lpBytesReturned) {
+					err = copyout(&dwRet, (void*)(ULONG_PTR)piop->lpBytesReturned, sizeof(DWORD));
+					if (err) KdPrintW(("Kernel_ioctl(): copyout (2) return %d\n", err));
+				}
 			
 				free(ke_area, M_DEVBUF);
 				return length;


More information about the svn-src-user mailing list