aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390/char/vmcp.c
diff options
context:
space:
mode:
authorChristian Borntraeger <cborntra@de.ibm.com>2005-11-07 03:59:12 -0500
committerLinus Torvalds <torvalds@g5.osdl.org>2005-11-07 10:53:34 -0500
commita5da866fe0272db6b664d4c790ad98320bf2feb6 (patch)
treecdb6baee87de4f2ff8034c6fbdb0aa9da02b0ab6 /drivers/s390/char/vmcp.c
parent1047aa7723997620ba03a21429d2c5d923ebf48f (diff)
[PATCH] s390: fix memory leak in vmcp
If vmcp is interrupted by a signal the vmcp command buffer is not freed. Found by Pete Zaitcev. Signed-off-by: Christian Borntraeger <cborntra@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/s390/char/vmcp.c')
-rw-r--r--drivers/s390/char/vmcp.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/s390/char/vmcp.c b/drivers/s390/char/vmcp.c
index 8990d8076e7d..19762f3476aa 100644
--- a/drivers/s390/char/vmcp.c
+++ b/drivers/s390/char/vmcp.c
@@ -103,8 +103,10 @@ vmcp_write(struct file *file, const char __user * buff, size_t count,
103 } 103 }
104 cmd[count] = '\0'; 104 cmd[count] = '\0';
105 session = (struct vmcp_session *)file->private_data; 105 session = (struct vmcp_session *)file->private_data;
106 if (down_interruptible(&session->mutex)) 106 if (down_interruptible(&session->mutex)) {
107 kfree(cmd);
107 return -ERESTARTSYS; 108 return -ERESTARTSYS;
109 }
108 if (!session->response) 110 if (!session->response)
109 session->response = (char *)__get_free_pages(GFP_KERNEL 111 session->response = (char *)__get_free_pages(GFP_KERNEL
110 | __GFP_REPEAT | GFP_DMA, 112 | __GFP_REPEAT | GFP_DMA,