]> git.hungrycats.org Git - linux/commitdiff
dm ioctl: prevent stack leak in dm ioctl call
authorAdrian Salido <salidoa@google.com>
Thu, 27 Apr 2017 17:32:55 +0000 (10:32 -0700)
committerSasha Levin <alexander.levin@verizon.com>
Wed, 17 May 2017 19:08:24 +0000 (15:08 -0400)
[ Upstream commit 4617f564c06117c7d1b611be49521a4430042287 ]

When calling a dm ioctl that doesn't process any data
(IOCTL_FLAGS_NO_PARAMS), the contents of the data field in struct
dm_ioctl are left initialized.  Current code is incorrectly extending
the size of data copied back to user, causing the contents of kernel
stack to be leaked to user.  Fix by only copying contents before data
and allow the functions processing the ioctl to override.

Cc: stable@vger.kernel.org
Signed-off-by: Adrian Salido <salidoa@google.com>
Reviewed-by: Alasdair G Kergon <agk@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
drivers/md/dm-ioctl.c

index 720ceeb7fa9b29118bea02dcb59e82a9f2638ee6..df060fd016f63aefd4634dc5ad6fb07417cd80c4 100644 (file)
@@ -1843,7 +1843,7 @@ static int ctl_ioctl(uint command, struct dm_ioctl __user *user)
        if (r)
                goto out;
 
-       param->data_size = sizeof(*param);
+       param->data_size = offsetof(struct dm_ioctl, data);
        r = fn(param, input_param_size);
 
        if (unlikely(param->flags & DM_BUFFER_FULL_FLAG) &&