Skip to contentSkip to conversation

cgroup: fix possible memory leak

PATCH In review Li Zefan 3 participants 3 messages Jul 28, 2008 – Jul 30, 2008 1 message not in the archive

lore
Share & tools
lore

Li Zefan

author
#0 lore raw

PATCH 1/1 cgroup: fix possible memory leak

There's a leak if copy_from_user() returns failure.

---
 kernel/cgroup.c |    7 +++++--
 1 files changed, 5 insertions(+), 2 deletions(-)
kernel/cgroup.c +5 -2
index 657f8f8..28debe4 100644
@@ -1424,14 +1424,17 @@ static ssize_t cgroup_write_string(struct cgroup *cgrp, struct cftype *cft,
 		if (buffer == NULL)
 			return -ENOMEM;
 	}
-	if (nbytes && copy_from_user(buffer, userbuf, nbytes))
-		return -EFAULT;
+	if (nbytes && copy_from_user(buffer, userbuf, nbytes)) {
+		retval = -EFAULT;
+		goto out;
+	}
 
 	buffer[nbytes] = 0;     /* nul-terminate */
 	strstrip(buffer);
 	retval = cft->write_string(cgrp, cft, buffer);
 	if (!retval)
 		retval = nbytes;
+out:
 	if (buffer != local_buffer)
 		kfree(buffer);
 	return retval;
Signature · 1 line
1.5.4.rc3

A message that is not in the archive (sent off-list or not yet received): [email protected]

Acked-by
#2 lore raw
Quoted 3 lines · Li Zefan

There's a leak if copy_from_user() returns failure.

Thanks, good catch.

Quoted 31 lines
---
 kernel/cgroup.c |    7 +++++--
 1 files changed, 5 insertions(+), 2 deletions(-)
kernel/cgroup.c +5 -3
index 657f8f8..28debe4 100644
@@ -1424,14 +1424,17 @@ static ssize_t cgroup_write_string(struct cgroup *cgrp, struct cftype *cft,
               if (buffer == NULL)
                       return -ENOMEM;
       }
-       if (nbytes && copy_from_user(buffer, userbuf, nbytes))
-               return -EFAULT;
+       if (nbytes && copy_from_user(buffer, userbuf, nbytes)) {
+               retval = -EFAULT;
+               goto out;
+       }
 
       buffer[nbytes] = 0;     /* nul-terminate */
       strstrip(buffer);
       retval = cft->write_string(cgrp, cft, buffer);
       if (!retval)
               retval = nbytes;
+out:
       if (buffer != local_buffer)
               kfree(buffer);
       return retval;
--

1.5.4.rc3

Acked-by on v1 1/1
#3 lore raw
In reply to Li Zefan
Quoted 3 lines · Li Zefan

There's a leak if copy_from_user() returns failure.

Thanks, good catch.

Quoted 31 lines
---
 kernel/cgroup.c |    7 +++++--
 1 files changed, 5 insertions(+), 2 deletions(-)
kernel/cgroup.c +5 -3
index 657f8f8..28debe4 100644
@@ -1424,14 +1424,17 @@ static ssize_t cgroup_write_string(struct cgroup *cgrp, struct cftype *cft,
               if (buffer == NULL)
                       return -ENOMEM;
       }
-       if (nbytes && copy_from_user(buffer, userbuf, nbytes))
-               return -EFAULT;
+       if (nbytes && copy_from_user(buffer, userbuf, nbytes)) {
+               retval = -EFAULT;
+               goto out;
+       }
 
       buffer[nbytes] = 0;     /* nul-terminate */
       strstrip(buffer);
       retval = cft->write_string(cgrp, cft, buffer);
       if (!retval)
               retval = nbytes;
+out:
       if (buffer != local_buffer)
               kfree(buffer);
       return retval;
--

1.5.4.rc3