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 "[EMAIL PROTECTED]"




--


With best regards.

Hooman Fazaeli <[EMAIL PROTECTED]>
Sepehr S. T. Co. Ltd.

Web: http://www.sepehrs.com
Tel: (9821)88975701-2
Fax: (9821)88983352




_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to