Messages in this thread | | | Date | Tue, 17 Jun 2008 23:11:18 +0100 | From | Al Viro <> | Subject | Re: BUG: mmapfile/writev spurious zero bytes (x86_64/not i386, bisected, reproducable) |
| |
On Tue, Jun 17, 2008 at 11:42:03PM +0200, Andi Kleen wrote:
> What seems also confusing him is that x86-64 copy_from/to_user use a shared > subfunction. The trick that this subfunction uses is to assume that > either the destination faults or the source, but never both. It's legal > because the caller should never pass in a faulting source for copy to > or a faulting destination for copy from. > > Actually they handle it, but the return value is not correct. > > Now he "fixed" copy_to_user to return a kind of correct return value > for source faults, but it'll of course break copy_from_user()'s return value. > > It's still unclear why his patch fixes the test case. The caller should > be using copy_in_user perhaps? Or is it just buggy by passing something > unmapped to copy_to_user?
AFAICS, what happened is that b0rken copy_*FROM*_user() had been discussed with references to copy_*TO*_user(). With proposed patch indeed not affecting any legitimate calls of the latter. Does affect the former and that, from my reading of the code in question, correctly.
IOW, s/copy_to_user/copy_from_user/ in Linus' postings upthread and they make sense.
| |