diff options
| author | KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> | 2009-10-26 19:49:59 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-10-29 10:39:29 -0400 |
| commit | b05ca7385a2848abdc72051f832722641daed8b0 (patch) | |
| tree | ce0463be127434f25f23025142f2313d2dae21ab /mm | |
| parent | ab8a3e14e6f8e567560f664bbd29aefb306a274e (diff) | |
do_mbind(): fix memory leak
If migrate_prep is failed, new variable is leaked. This patch fixes it.
Signed-off-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Acked-by: Christoph Lameter <cl@linux-foundation.org>
Cc: <stable@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm')
| -rw-r--r-- | mm/mempolicy.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/mm/mempolicy.c b/mm/mempolicy.c index d49956d3025..4545d594424 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c | |||
| @@ -1024,7 +1024,7 @@ static long do_mbind(unsigned long start, unsigned long len, | |||
| 1024 | 1024 | ||
| 1025 | err = migrate_prep(); | 1025 | err = migrate_prep(); |
| 1026 | if (err) | 1026 | if (err) |
| 1027 | return err; | 1027 | goto mpol_out; |
| 1028 | } | 1028 | } |
| 1029 | { | 1029 | { |
| 1030 | NODEMASK_SCRATCH(scratch); | 1030 | NODEMASK_SCRATCH(scratch); |
| @@ -1039,10 +1039,9 @@ static long do_mbind(unsigned long start, unsigned long len, | |||
| 1039 | err = -ENOMEM; | 1039 | err = -ENOMEM; |
| 1040 | NODEMASK_SCRATCH_FREE(scratch); | 1040 | NODEMASK_SCRATCH_FREE(scratch); |
| 1041 | } | 1041 | } |
| 1042 | if (err) { | 1042 | if (err) |
| 1043 | mpol_put(new); | 1043 | goto mpol_out; |
| 1044 | return err; | 1044 | |
| 1045 | } | ||
| 1046 | vma = check_range(mm, start, end, nmask, | 1045 | vma = check_range(mm, start, end, nmask, |
| 1047 | flags | MPOL_MF_INVERT, &pagelist); | 1046 | flags | MPOL_MF_INVERT, &pagelist); |
| 1048 | 1047 | ||
| @@ -1062,6 +1061,7 @@ static long do_mbind(unsigned long start, unsigned long len, | |||
| 1062 | putback_lru_pages(&pagelist); | 1061 | putback_lru_pages(&pagelist); |
| 1063 | 1062 | ||
| 1064 | up_write(&mm->mmap_sem); | 1063 | up_write(&mm->mmap_sem); |
| 1064 | mpol_out: | ||
| 1065 | mpol_put(new); | 1065 | mpol_put(new); |
| 1066 | return err; | 1066 | return err; |
| 1067 | } | 1067 | } |
