Re: [PATCH v2 1/3] x86/mce: Avoid infinite loop for copy from user recovery
From: Al Viro <viro@zeniv.linux.org.uk>
Date: 2021-08-21 21:51:44
Also in:
linux-mm, lkml
From: Al Viro <viro@zeniv.linux.org.uk>
Date: 2021-08-21 21:51:44
Also in:
linux-mm, lkml
On Fri, Aug 20, 2021 at 09:51:41PM -0700, Tony Luck wrote:
On Fri, Aug 20, 2021 at 1:25 PM Luck, Tony [off-list ref] wrote:quoted
Probably the same for the two different addresses case ... though I'm not 100% confident about that. There could be some ioctl() that peeks at two parts of a passed in structure, and the user might pass in a structure that spans across a page boundary with both pages poisoned. But that would only hit if the driver code ignored the failure of the first get_user() and blindly tried the second. So I'd count that as a critically bad driver bug.Or maybe driver writers are just evil :-( for (i = 0; i < len; i++) { tx_wait(10); get_user(dsp56k_host_interface.data.b[1], bin++); get_user(dsp56k_host_interface.data.b[2], bin++); get_user(dsp56k_host_interface.data.b[3], bin++); }
Almost any unchecked get_user()/put_user() is a bug. Fortunately, there's not a lot of them <greps> 93 for put_user() and 73 for get_user(). _Some_ of the former variety might be legitimate, but most should be taken out and shot. And dsp56k should be taken out and shot, period ;-/ This is far from the worst in there...