Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 7 Feb 2012 13:57:39 -0500
From:      John Baldwin <jhb@freebsd.org>
To:        freebsd-hackers@freebsd.org
Cc:        PRATIK MOHANTY <pmohanty.cdac@gmail.com>
Subject:   Re: ioctl, copy structure from user
Message-ID:  <201202071357.39645.jhb@freebsd.org>
In-Reply-To: <CAD-7EriuvnNt5qayXKjWqgc7egDoubhmnDT_y0%2BRfRMS13skew@mail.gmail.com>
References:  <CAD-7EriuvnNt5qayXKjWqgc7egDoubhmnDT_y0%2BRfRMS13skew@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Monday, February 06, 2012 2:44:23 pm PRATIK MOHANTY wrote:
> Hello sir,
>  I need some example for ioctl to copy structure from user space to kernel
> space

In BSD the kernel copies the immediate ioctl argument into and out of userland
for you.  Thus, you can do something like this:

struct foo {
    ...
};

#define MY_IOCTL	_IOWR('M', 1, struct foo)

And in your kernel code:

int
foo_ioctl(..., u_long cmd, caddr_t data)
{
	struct foo *f;

	switch (cmd) {
	case MY_IOCTL:
		f = (struct foo *)data;
		/* 
         * 'f' is now a pointer to an in-kernel copy of
         * the structure.  Any changes made to it will
         * be copied back out to userland after your
         * routine returns.
         */
        break;
    }
}

-- 
John Baldwin



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201202071357.39645.jhb>