Date: Sat, 26 Apr 2008 10:53:10 +0430 From: "H.fazaeli" <fazaeli@sepehrs.com> Cc: freebsd-hackers@freebsd.org Subject: Re: CopyOut Size Limits Message-ID: <4812CA4E.8030004@sepehrs.com> In-Reply-To: <DAB770F2-C987-4AEB-BD02-BD1AEF099702@signallake.com> References: <DAB770F2-C987-4AEB-BD02-BD1AEF099702@signallake.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Do not allocate my_type (in general, big data structures)
on kernel stack (e.g, use malloc(9)).
Adam 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
>
>
>
>
> _______________________________________________
> freebsd-hackers@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> To unsubscribe, send any mail to
> "freebsd-hackers-unsubscribe@freebsd.org"
>
>
>
--
With best regards.
Hooman Fazaeli <fazaeli@sepehrs.com>
Sepehr S. T. Co. Ltd.
Web: http://www.sepehrs.com
Tel: (9821)88975701-2
Fax: (9821)88983352
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4812CA4E.8030004>
