Thread (23 messages) 23 messages, 5 authors, 2014-01-12

Re: [PATCH 2/4] Input: introduce ABS_MAX2/CNT2 and friends

flat view

From: Peter Hutterer <hidden>
Date: 2013-12-19 00:23:06
Also in: lkml

On Wed, Dec 18, 2013 at 04:05:37PM -0800, Dmitry Torokhov wrote:
On Thu, Dec 19, 2013 at 09:55:04AM +1000, Peter Hutterer wrote:
quoted
On Wed, Dec 18, 2013 at 03:48:37PM -0800, Dmitry Torokhov wrote:
quoted
On Thursday, December 19, 2013 09:40:09 AM Peter Hutterer wrote:
quoted
quoted
+     memset(&abs, 0, sizeof(abs));
+     for (i = valid_cnt; i < cnt; ++i)
+             if (copy_to_user(&pinfo->info[i], &abs, sizeof(abs)))
+                     return -EFAULT;
+
+     return 0;
why don't you return the number of valid copied axes to the user?
that seems better even than forcing the remainder to 0.
Well, if your program messed up buffers that it faulted we do not know
for sure if data that did not cause fault ended up where it should have
or if it smashed something else. This condition I think should be
signaled early.
not 100% sure I understand but I wasn't proposing to remove the -EFAULT, i
was proposing to replace "return 0" with "return valid_cnt".
I understand what you were saying. Now consider: your program supplied
buffer that is actually smaller than what it said to the kernel.
Depending on the exact placement we may or may not fault when we get
pass the buffer boundary, most likely not. We are likely to fault when
we go way past the buffer boundary and wracked process' memory. If we
return -EFAULT the program will at least notice that something wrong. If
we return count it will try to resubmit the remainder of operation and
not even know that there was something very bad happening.

IOW we should not treat fault condition as other partial read/write
conditions.
I'm still not sure we're talking about the same thing :)
let me rephrase: why can't we use the behaviour bits_to_user() provides?
it limits the output to maxlen and returns that value (or -EFAULT), it's
only a small step from that to limit the output to min(maxbit, ABS_CNT2).

Cheers,
   Peter

 
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help