On Tue, Dec 25, 2018 at 9:37 PM Kangjie Lu <kjlu@xxxxxxx> wrote: > > buf->length is first copied in from user space and security-checked. The > second copy issued by copy_from_user copies it again. The data in user > space may have been modified by malicious users. So, we already did a check and copied not more than we would expect. > filter_callback() > further uses the potentially modified data. How? > The fix avoids the > double-fetch that overwrites buf->length. NAK. > Signed-off-by: Kangjie Lu <kjlu@xxxxxxx> > --- > drivers/platform/x86/wmi.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/platform/x86/wmi.c b/drivers/platform/x86/wmi.c > index bea35be68706..93cab9a70ad7 100644 > --- a/drivers/platform/x86/wmi.c > +++ b/drivers/platform/x86/wmi.c > @@ -850,7 +850,8 @@ static long wmi_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) > buf->length, wblock->req_buf_size); > > /* copy the structure from userspace */ > - if (copy_from_user(buf, input, wblock->req_buf_size)) { > + if (copy_from_user(buf->data, input->data, > + wblock->req_buf_size - sizeof(buf->length))) { > dev_dbg(&wblock->dev.dev, "Copy %llu from user failed\n", > wblock->req_buf_size); > ret = -EFAULT; > -- > 2.17.2 (Apple Git-113) > -- With Best Regards, Andy Shevchenko