CopyOut Size Limits
Alexander Sack
pisymbol at gmail.com
Fri Apr 25 21:00:13 UTC 2008
On Fri, Apr 25, 2008 at 9:59 AM, Adam <adamw at signallake.com> wrote:
> 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
Adam,
I have no idea the context and Joerg hit it on the head but have you
considered using shared memory instead of a system call to achieve
what you want?
shmat(2) and its elk?
Thanks!
-aps
More information about the freebsd-hackers
mailing list