summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdrian Salido <salidoa@google.com>2017-04-27 13:32:55 -0400
committerMike Snitzer <snitzer@redhat.com>2017-04-27 13:55:13 -0400
commit4617f564c06117c7d1b611be49521a4430042287 (patch)
treef8005a09d0eb6827fd541e1c15d3fca1ff85c065
parent84ff1bcc2e25f1ddf5b350c4fa718ca01fdd88e9 (diff)
dm ioctl: prevent stack leak in dm ioctl call
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>
-rw-r--r--drivers/md/dm-ioctl.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/md/dm-ioctl.c b/drivers/md/dm-ioctl.c
index 0956b8659360..ddda8107aa7e 100644
--- a/drivers/md/dm-ioctl.c
+++ b/drivers/md/dm-ioctl.c
@@ -1840,7 +1840,7 @@ static int ctl_ioctl(uint command, struct dm_ioctl __user *user)
1840 if (r) 1840 if (r)
1841 goto out; 1841 goto out;
1842 1842
1843 param->data_size = sizeof(*param); 1843 param->data_size = offsetof(struct dm_ioctl, data);
1844 r = fn(param, input_param_size); 1844 r = fn(param, input_param_size);
1845 1845
1846 if (unlikely(param->flags & DM_BUFFER_FULL_FLAG) && 1846 if (unlikely(param->flags & DM_BUFFER_FULL_FLAG) &&