Commit 2279c8b9 authored by Adrian Salido's avatar Adrian Salido Committed by Sasha Levin

dm ioctl: prevent stack leak in dm ioctl call

[ Upstream commit 4617f564 ]

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: default avatarAdrian Salido <salidoa@google.com>
Reviewed-by: default avatarAlasdair G Kergon <agk@redhat.com>
Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
Signed-off-by: default avatarSasha Levin <alexander.levin@verizon.com>
parent 5afff19d
...@@ -1843,7 +1843,7 @@ static int ctl_ioctl(uint command, struct dm_ioctl __user *user) ...@@ -1843,7 +1843,7 @@ static int ctl_ioctl(uint command, struct dm_ioctl __user *user)
if (r) if (r)
goto out; goto out;
param->data_size = sizeof(*param); param->data_size = offsetof(struct dm_ioctl, data);
r = fn(param, input_param_size); r = fn(param, input_param_size);
if (unlikely(param->flags & DM_BUFFER_FULL_FLAG) && if (unlikely(param->flags & DM_BUFFER_FULL_FLAG) &&
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment