Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 25 Apr 2008 09:59:55 -0400
From:      Adam <adamw@signallake.com>
To:        freebsd-hackers@freebsd.org
Subject:   CopyOut Size Limits
Message-ID:  <DAB770F2-C987-4AEB-BD02-BD1AEF099702@signallake.com>

next in thread | raw e-mail | index | archive | help
Hi, I am writing a custom system call that needs to transfer 16kb of  
data from the kernel to userspace. I am transferring the data out of  
the kernel by using copyout.  This seems to work for a small struct of  
data < 4k.

int my_system_call(struct thread *td, struct my_system_call_args *uap)
{
	my_structtype_t my_type;

	copyout(&my_type,uap->my_type,sizeof(my_type) ))!=0)
	{
		printf("\n copyout failed ret%d\n",error);
		return error;
	}

	printf("exiting kernel %d\n",error);
	return (0);
}

However once I expand my struct size beyond around 4k that I get a  
"Fatal Double Fault."  It seems like I am overrunning the kernel  
stack.  Does copyout use memory from the kernel stack?  What is the  
limit for copyout?  Is there some way to allocate additional space?   
Alternatively what is the appropriate method for transferring kbs of  
data from kernel to userspace?

Thanks,
Adam







Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?DAB770F2-C987-4AEB-BD02-BD1AEF099702>