Messages in this thread | | | Date | Sat, 17 Apr 2021 20:35:18 +0000 | From | Al Viro <> | Subject | Re: [PATCH] x86/uaccess: small optimization in unsafe_copy_to_user() |
| |
On Sat, Apr 17, 2021 at 08:30:42PM +0000, Al Viro wrote:
> and that thing is still there. However, it does *NOT* do what it might > appear to be doing; it ends up with getdents() returning -EINVAL instead. > What we need is > buf->error = -EINTR; > in addition to that return (in all 3 such places). Do you have any problems with > the following delta?
No, wait - we have non-NULL buf->prev_reclen, so we'll hit if (buf.prev_reclen) { struct compat_linux_dirent __user * lastdirent; lastdirent = (void __user *)buf.current_dir - buf.prev_reclen;
if (put_user(buf.ctx.pos, &lastdirent->d_off)) error = -EFAULT; else error = count - buf.count; } with buf->error completely ignored. Nevermind.
| |