cgroup: fix possible memory leak
PATCH 1/1 cgroup: fix possible memory leak
There's a leak if copy_from_user() returns failure.
Signed-off-by Li Zefan <[email protected]>
--- kernel/cgroup.c | 7 +++++-- 1 files changed, 5 insertions(+), 2 deletions(-)
kernel/cgroup.c +5 -2
@@ -1424,14 +1424,17 @@ static ssize_t cgroup_write_string(struct cgroup *cgrp, struct cftype *cft,if (buffer ==NULL )return -ENOMEM ; } -if (nbytes &©_from_user (buffer, userbuf, nbytes)) -return -EFAULT ; +if (nbytes &©_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]
Paul Menage
Acked-byQuoted 3 lines · Li Zefan
There's a leak if
copy_from_user()returns failure.Signed-off-by Li Zefan <[email protected]>
Acked-by Paul Menage <[email protected]>
Thanks, good catch.
Quoted 31 lines
--- kernel/cgroup.c | 7 +++++-- 1 files changed, 5 insertions(+), 2 deletions(-)kernel/cgroup.c +5
-3@@ -1424,14 +1424,17 @@ static ssize_t cgroup_write_string(struct cgroup *cgrp, struct cftype *cft,if (buffer ==NULL )return -ENOMEM ; } -if (nbytes &©_from_user (buffer, userbuf, nbytes)) -return -EFAULT ; +if (nbytes &©_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
Quoted 3 lines · Li Zefan
There's a leak if
copy_from_user()returns failure.Signed-off-by Li Zefan <[email protected]>
Acked-by Paul Menage <[email protected]>
Thanks, good catch.
Quoted 31 lines
--- kernel/cgroup.c | 7 +++++-- 1 files changed, 5 insertions(+), 2 deletions(-)kernel/cgroup.c +5
-3@@ -1424,14 +1424,17 @@ static ssize_t cgroup_write_string(struct cgroup *cgrp, struct cftype *cft,if (buffer ==NULL )return -ENOMEM ; } -if (nbytes &©_from_user (buffer, userbuf, nbytes)) -return -EFAULT ; +if (nbytes &©_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