aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSasha Levin <sasha.levin@oracle.com>2014-04-08 16:04:11 -0700
committerZefan Li <lizefan@huawei.com>2015-06-19 11:40:33 +0800
commita5822a0847e8d2980ee1d04f96ef78b9597928c8 (patch)
tree3141c620c5c76bf44f559a470cc31ac043d035f6
parent4dd86a6aea75dba2284caa49817897582a0fe684 (diff)
autofs4: check dev ioctl size before allocating
commit e53d77eb8bb616e903e34cc7a918401bee3b5149 upstream. There wasn't any check of the size passed from userspace before trying to allocate the memory required. This meant that userspace might request more space than allowed, triggering an OOM. Signed-off-by: Sasha Levin <sasha.levin@oracle.com> Signed-off-by: Ian Kent <raven@themaw.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> [lizf: Backported to 3.4: adjust context] Signed-off-by: Zefan Li <lizefan@huawei.com>
-rw-r--r--fs/autofs4/dev-ioctl.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/fs/autofs4/dev-ioctl.c b/fs/autofs4/dev-ioctl.c
index fbaa42817389..ace3eea163f0 100644
--- a/fs/autofs4/dev-ioctl.c
+++ b/fs/autofs4/dev-ioctl.c
@@ -103,6 +103,9 @@ static struct autofs_dev_ioctl *copy_dev_ioctl(struct autofs_dev_ioctl __user *i
if (tmp.size < sizeof(tmp))
return ERR_PTR(-EINVAL);
+ if (tmp.size > (PATH_MAX + sizeof(tmp)))
+ return ERR_PTR(-ENAMETOOLONG);
+
res = memdup_user(in, tmp.size);
if (!IS_ERR(res))
res->size = tmp.size;