aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvh249@airwolf.cl.cam.ac.uk <vh249@airwolf.cl.cam.ac.uk>2005-03-08 09:39:04 +0000
committervh249@airwolf.cl.cam.ac.uk <vh249@airwolf.cl.cam.ac.uk>2005-03-08 09:39:04 +0000
commit39b6d495a8198d758004156c7f5933d84286bb45 (patch)
treec380ca272f76780e63f3bf14c042307848040f99
parentb7c8087832883f882029465053493f232cfcb0cc (diff)
downloadxen-39b6d495a8198d758004156c7f5933d84286bb45.tar.gz
xen-39b6d495a8198d758004156c7f5933d84286bb45.tar.bz2
xen-39b6d495a8198d758004156c7f5933d84286bb45.zip
bitkeeper revision 1.1159.258.23 (422d72b8gvbXrWsyznqgyF7shPiduw)
Fix error path handling not calling iounmap() after ioremap() Signed-off-by: Yann Droneaud <ydroneaud@mandrakesoft.com> Signed-off-by: Vincent Hanquez <vincent@xensource.com>
-rw-r--r--linux-2.6.10-xen-sparse/arch/xen/kernel/devmem.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/linux-2.6.10-xen-sparse/arch/xen/kernel/devmem.c b/linux-2.6.10-xen-sparse/arch/xen/kernel/devmem.c
index ffda098851..456091775b 100644
--- a/linux-2.6.10-xen-sparse/arch/xen/kernel/devmem.c
+++ b/linux-2.6.10-xen-sparse/arch/xen/kernel/devmem.c
@@ -43,7 +43,7 @@ static ssize_t read_mem(struct file * file, char __user * buf,
size_t count, loff_t *ppos)
{
unsigned long i, p = *ppos;
- ssize_t read = 0;
+ ssize_t read = -EFAULT;
void *v;
if ((v = ioremap(p, count)) == NULL) {
@@ -60,12 +60,12 @@ static ssize_t read_mem(struct file * file, char __user * buf,
return count;
}
if (copy_to_user(buf, v, count))
- return -EFAULT;
- iounmap(v);
+ goto out;
- read += count;
+ read = count;
*ppos += read;
-
+out:
+ iounmap(v);
return read;
}
@@ -73,18 +73,18 @@ static ssize_t write_mem(struct file * file, const char __user * buf,
size_t count, loff_t *ppos)
{
unsigned long p = *ppos;
- ssize_t written = 0;
+ ssize_t written = -EFAULT;
void *v;
if ((v = ioremap(p, count)) == NULL)
return -EFAULT;
if (copy_to_user(v, buf, count))
- return -EFAULT;
- iounmap(v);
+ goto out;
- written += count;
+ written = count;
*ppos += written;
-
+out:
+ iounmap(v);
return written;
}