Messages in this thread |  | | | From | Stephane Eranian <> | | Subject | copy_from_user() and block_write question | | Date | Thu, 27 Jan 2000 00:07:12 -0800 (PST) |
| |
Hi,
Could someone explain to me what was the intent of the following piece of code (extracted from linux-2.3.35 in fs/buffer.c) ?
int block_write_zero_range(struct inode *inode, struct page *page, unsigned zerofrom, unsigned from, unsigned to, const char * buf) { ....
/* * Now we can copy the data. */ if (zerofrom < from) memset(kaddr+zerofrom, 0, from-zerofrom); if (from < to) >>>> err = copy_from_user(kaddr+from, buf, to-from); if (to < zeroto) memset(kaddr+to, 0, zeroto-to); else zeroto = to; >>>>> if (err < 0) goto out;
copy_from_user() always returns something that is >= 0 so the test err < 0 is never taken. In this case, isn't the use of err for copy_from_user() kind of confusing ?
I understand that POSIX does not define the behavior of write when you have a wild pointer. That's the behavior that you get here: write never fails because buf is invalid. I have seen systems where the behavior is to return EFAULT though.
Any comments ?
+--------------------------------------------------------------------+ | Ste'phane ERANIAN | Email eranian@hpl.hp.com | | Hewlett-Packard Laboratories | | | 1501, Page Mill Road MS 1U-15 | | | Palo Alto, CA 94303-096 | | | USA | | | Tel : (650) 857-7174 | | | Fax : (650) 857-5548 | | +--------------------------------------------------------------------+ - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/
|  |