From: Jesper Juhl akpm: really, reads are supposed to return the number-of-bytes-read on faults, or -EFAULT of no bytes were read. This patch returns either zero or -EFAULT, ignoring any successfully transferred data. But the user interface (whcih is an ioctl()) was never set up to do that. Signed-off-by: Jesper Juhl Signed-off-by: Andrew Morton --- 25-akpm/drivers/cdrom/cdrom.c | 5 ++++- 1 files changed, 4 insertions(+), 1 deletion(-) diff -puN drivers/cdrom/cdrom.c~remember-to-check-return-value-from-__copy_to_user-in drivers/cdrom/cdrom.c --- 25/drivers/cdrom/cdrom.c~remember-to-check-return-value-from-__copy_to_user-in 2004-09-06 22:29:48.216507024 -0700 +++ 25-akpm/drivers/cdrom/cdrom.c 2004-09-06 22:29:48.221506264 -0700 @@ -2053,7 +2053,10 @@ static int cdrom_read_cdda_old(struct cd ret = cdrom_read_block(cdi, &cgc, lba, nr, 1, CD_FRAMESIZE_RAW); if (ret) break; - __copy_to_user(ubuf, cgc.buffer, CD_FRAMESIZE_RAW * nr); + if (__copy_to_user(ubuf, cgc.buffer, CD_FRAMESIZE_RAW * nr)) { + kfree(cgc.buffer); + return -EFAULT; + } ubuf += CD_FRAMESIZE_RAW * nr; nframes -= nr; lba += nr; _