From: Ian Abbott <abbotti@mev.co.uk>
To: bforce1729 <bforce1729@gmail.com>
Cc: linux-kernel@vger.kernel.org
Subject: Re: Need to know the size of data send from Kernel to USer Ap
Date: Tue, 24 Jul 2012 10:06:31 +0100 [thread overview]
Message-ID: <500E6597.2050402@mev.co.uk> (raw)
In-Reply-To: <500E5808.1070607@gmail.com>
On 2012-07-24 09:08, bforce1729 wrote:
> Hi,
>
> I am new to kernel programming so can anyone point me to the right
> forum/reply for the question below.
>
> I would like to implement a character device and using a node of type
> character read and write data. However I am not sure of the length of
> data from kernel which a user app will receive, so I would like to code
> safely. If the data exceeds the application gets killed.
> Any idea or API to perform the task of knowing the data length when
> passing data to and fro from kernel to user level would be appreciated.
>
> Kernel code:
>
> copy_to_user(buff, kernel_msg, strlen(kernel_msg));
>
> User App:
> fd=open("./my_device",O_RDONLY);
> ret=read(fd,buff,strlen(buf)); //How can I know
> the size of buff, which would be sent/filled from kernel???
I doubt you really want strlen(buf) there. You probably want
sizeof(buf) or something similar. You might need to read up on what
strlen() actually does.
Anyway, the driver's "read" file operation knows the maximum amount the
user is asking for as it is specified in the third parameter. The
function should return the (non-negative) amount it is actually passing
back to the user (which will be returned by the read() function in
userspace), or a negative error value (which will cause read() to return
-1 and set errno appropriately).
Also, copy_to_user() might not succeed if the user passed a bad pointer
or bad length. It returns 0 on success and the length of the uncopied
part on failure. So if copy_to_user() returns a non-zero value you
should either return -EFAULT or work out the partial amount successfully
read (as long as it is greater than zero) and return that.
--
-=( Ian Abbott @ MEV Ltd. E-mail: <abbotti@mev.co.uk> )=-
-=( Tel: +44 (0)161 477 1898 FAX: +44 (0)161 718 3587 )=-
prev parent reply other threads:[~2012-07-24 9:06 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-07-24 8:08 Need to know the size of data send from Kernel to USer Ap bforce1729
2012-07-24 9:06 ` Ian Abbott [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=500E6597.2050402@mev.co.uk \
--to=abbotti@mev.co.uk \
--cc=bforce1729@gmail.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox