Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1715018 > unrolled thread

[PATCH 3.16 086/134] dm ioctl: prevent stack leak in dm ioctl call

Started byBen Hutchings <ben@decadent.org.uk>
First post2017-08-18 15:40 +0200
Last post2017-08-18 15:40 +0200
Articles 1 — 1 participant

Back to article view | Back to linux.kernel

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  [PATCH 3.16 086/134] dm ioctl: prevent stack leak in dm ioctl call Ben Hutchings <ben@decadent.org.uk> - 2017-08-18 15:40 +0200

#1715018 — [PATCH 3.16 086/134] dm ioctl: prevent stack leak in dm ioctl call

FromBen Hutchings <ben@decadent.org.uk>
Date2017-08-18 15:40 +0200
Subject[PATCH 3.16 086/134] dm ioctl: prevent stack leak in dm ioctl call
Message-ID<ufPFj-4ln-81@gated-at.bofh.it>
3.16.47-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Adrian Salido <salidoa@google.com>

commit 4617f564c06117c7d1b611be49521a4430042287 upstream.

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.

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: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/md/dm-ioctl.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/md/dm-ioctl.c
+++ b/drivers/md/dm-ioctl.c
@@ -1839,7 +1839,7 @@ static int ctl_ioctl(uint command, struc
 	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) &&

[toc] | [standalone]


Back to top | Article view | linux.kernel


csiph-web