Messages in this thread | ![/](/images/icornerl.gif) | | From | Bjorn Helgaas <> | Subject | Re: [RFC] prevent "dd if=/dev/mem" crash | Date | Fri, 17 Oct 2003 17:25:10 -0600 |
| |
On Friday 17 October 2003 4:50 pm, Andrew Morton wrote: > Bjorn Helgaas <bjorn.helgaas@hp.com> wrote: > > > > Old behavior: > > > > # dd if=/dev/mem of=/dev/null > > <unrecoverable machine check> > > I recently fixed this for ia32 by changing copy_to_user() to not oops if > the source address generated a fault. Similarly copy_from_user() returns > an error if the destination generates a fault. > > In other words: drivers/char/mem.c requires that the architecture's > copy_*_user() functions correctly handle faults on either the source or > dest of the copy.
If we really believe copy_*_user() must correctly handle *all* faults, isn't the "p >= __pa(high_memory)" test superfluous?
I don't know how ia32 handles a read to non-existent physical memory. Are you saying that copy_*_user() can deal with that just like it does a garden-variety TLB fault?
On ia64, a read to non-existent physical memory causes the processor to time out and take a machine check. I'm not sure it's even possible to recover from that.
Bjorn
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| ![\](/images/icornerr.gif) |