copy_from_user() returns non-zero on faults.. --- 25-akpm/drivers/char/mem.c | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) diff -puN drivers/char/mem.c~write_kmem-fix drivers/char/mem.c --- 25/drivers/char/mem.c~write_kmem-fix 2004-03-26 12:35:04.637516000 -0800 +++ 25-akpm/drivers/char/mem.c 2004-03-26 12:35:04.639515696 -0800 @@ -311,7 +311,7 @@ static ssize_t write_kmem(struct file * len = PAGE_SIZE; if (len) { written = copy_from_user(kbuf, buf, len); - if (written != len) { + if (written) { ssize_t ret; free_page((unsigned long)kbuf); _