Fix up some unchecked copy_to_user()s fs/readdir.c | 15 ++++++++++----- 1 files changed, 10 insertions(+), 5 deletions(-) diff -puN fs/readdir.c~readdir-usercopy-check fs/readdir.c --- linux-mnm/fs/readdir.c~readdir-usercopy-check 2003-03-06 02:01:46.000000000 -0800 +++ linux-mnm-akpm/fs/readdir.c 2003-03-06 02:03:50.000000000 -0800 @@ -72,11 +72,16 @@ static int fillonedir(void * __buf, cons return -EINVAL; buf->count++; dirent = buf->dirent; - put_user(ino, &dirent->d_ino); - put_user(offset, &dirent->d_offset); - put_user(namlen, &dirent->d_namlen); - copy_to_user(dirent->d_name, name, namlen); - put_user(0, dirent->d_name + namlen); + if (!access_ok(VERIFY_WRITE, (unsigned long)dirent, + (unsigned long)(dirent->d_name + namlen + 1) - + (unsigned long)dirent)) + return -EFAULT; + if ( __put_user(ino, &dirent->d_ino) || + __put_user(offset, &dirent->d_offset) || + __put_user(namlen, &dirent->d_namlen) || + __copy_to_user(dirent->d_name, name, namlen) || + __put_user(0, dirent->d_name + namlen)) + return -EFAULT; return 0; } _