On Wed, 28 Feb 2024 at 13:21, Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> wrote: > > Hmm. If the copy doesn't succeed and make any progress at all, then > the code in generic_perform_write() after the "goto again" > > //[4] > if (unlikely(fault_in_iov_iter_readable(i, bytes) == > bytes)) { > > should break out of the loop. Ahh. I see the problem. Or at least part of it. The iter is an ITER_BVEC. And fault_in_iov_iter_readable() "knows" that an ITER_BVEC cannot fail. Because obviously it's a kernel address, so no user page fault. But for the machine check case, ITER_BVEC very much can fail. This should never have worked in the first place. What a crock. Do we need to make iterate_bvec() always succeed fully, and make copy_mc_to_kernel() zero out the end? Linus