From 4d5806989828b8d67ee6cec0e99e19c9a05b6fdd Mon Sep 17 00:00:00 2001 From: Andrew Morton Date: Sat, 8 Mar 2003 03:26:21 -0800 Subject: [PATCH] [PATCH] usercopy checks in old_readdir() Fix up some unchecked copy_to_user()s --- fs/readdir.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/fs/readdir.c b/fs/readdir.c index 8510916373107..2ee6de9550f73 100644 --- a/fs/readdir.c +++ b/fs/readdir.c @@ -72,11 +72,16 @@ static int fillonedir(void * __buf, const char * name, int namlen, loff_t offset 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; } -- 2.53.0