From: Eric Sandeen <sandeen@redhat.com>
To: "Ted Ts'o" <tytso@mit.edu>
Cc: linux-ext4@vger.kernel.org
Subject: Re: [PATCH 21/25] e2fsck: Fix leaks in error paths
Date: Fri, 16 Sep 2011 19:57:02 -0500 [thread overview]
Message-ID: <4E73F05E.2080106@redhat.com> (raw)
In-Reply-To: <20110916234113.GY16246@thunk.org>
On 9/16/11 6:41 PM, Ted Ts'o wrote:
> On Fri, Sep 16, 2011 at 03:49:36PM -0500, Eric Sandeen wrote:
>> fn and/or array was not freed in some error paths.
>>
>> Signed-off-by: Eric Sandeen <sandeen@redhat.com>
>
> Applied, but I did make a two changes.
>
>> @@ -345,6 +346,7 @@ profile_init(const char **files, profile_t *ret_profile)
>> * If all the files were not found, return the appropriate error.
>> */
>> if (!profile->first_file) {
>> + free_list(array);
>> profile_release(profile);
>> return ENOENT;
>> }
>
> I changed this to be:
>
> if (!profile->first_file) {
> retval = ENOENT;
> goto errout;
> }
>
> Which allows us to unify the error cleanup path and avoid duplicating
> code.
Makes sense, now why didn't I do that ... was thinking there was some issue
but sure looks right now!
> Also, I noticed another bug while I was validating your patch. If the
> realloc() in get_dirlist() fails due to a ENOMEM, and we jump to
> errout, the array hasn't been null terminated yet. This could lead to
> lead a kernel oops or worse when free_list(array) tries to free the
> array.
>
> So I added:
>
> errout:
> + if (array)
> + array[num] = 0;
>
> to take care of this problem.
>
> - Ted
>
> commit 04bfa75f42a5adb3510551f4d153526d94be37fb
> Author: Eric Sandeen <sandeen@redhat.com>
> Date: Fri Sep 16 15:49:36 2011 -0500
>
> e2fsck: Fix leaks in error paths
>
> fn and/or array was not freed in some error paths.
>
> [ Also make sure the array is NULL terminated before we free it in
> get_dirlist(). --tytso]
>
> Signed-off-by: Eric Sandeen <sandeen@redhat.com>
> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
>
> diff --git a/e2fsck/profile.c b/e2fsck/profile.c
> index 327bfb4..f4267b1 100644
> --- a/e2fsck/profile.c
> +++ b/e2fsck/profile.c
> @@ -276,6 +276,7 @@ static errcode_t get_dirlist(const char *dirname, char***ret_array)
> new_array = realloc(array, sizeof(char *) * (max+1));
> if (!new_array) {
> retval = ENOMEM;
> + free(fn);
> goto errout;
> }
> array = new_array;
> @@ -290,6 +291,8 @@ static errcode_t get_dirlist(const char *dirname, char***ret_array)
> closedir(dir);
> return 0;
> errout:
> + if (array)
> + array[num] = 0;
> closedir(dir);
> free_list(array);
> return retval;
> @@ -345,8 +348,8 @@ profile_init(const char **files, profile_t *ret_profile)
> * If all the files were not found, return the appropriate error.
> */
> if (!profile->first_file) {
> - profile_release(profile);
> - return ENOENT;
> + retval = ENOENT;
> + goto errout;
> }
> }
>
next prev parent reply other threads:[~2011-09-17 0:57 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-09-16 20:49 [PATCH 00/25] e2fsprogs: Misc cleanups & fixes Eric Sandeen
2011-09-16 20:49 ` [PATCH 01/25] libext2: Fix EXT2_LIB_SOFTSUPP masking Eric Sandeen
2011-09-16 22:52 ` Ted Ts'o
2011-09-16 20:49 ` [PATCH 02/25] e2fsprogs: Remove impossible name_len tests Eric Sandeen
2011-09-16 22:30 ` Andreas Dilger
2011-09-16 22:52 ` Ted Ts'o
2011-09-16 20:49 ` [PATCH 03/25] fsck: fix -C option parsing Eric Sandeen
2011-09-16 22:52 ` Ted Ts'o
2011-09-16 20:49 ` [PATCH 04/25] mke2fs: remove impossible tests for null usage_types Eric Sandeen
2011-09-16 22:52 ` Ted Ts'o
2011-09-16 20:49 ` [PATCH 05/25] libext2: move buf variable completely under ifdef Eric Sandeen
2011-09-16 22:53 ` Ted Ts'o
2011-09-16 20:49 ` [PATCH 06/25] libext2fs: Potential null ptr deref in undo_err_handler_init Eric Sandeen
2011-09-16 22:53 ` Ted Ts'o
2011-09-16 20:49 ` [PATCH 07/25] e2fsck: handle null fs in print_pathname() Eric Sandeen
2011-09-16 22:53 ` Ted Ts'o
2011-09-16 20:49 ` [PATCH 08/25] e2fsprogs: annotate intentional fallthroughs in case statements Eric Sandeen
2011-09-16 22:53 ` Ted Ts'o
2011-09-16 20:49 ` [PATCH 09/25] uuidd: Add missing break to option case statement Eric Sandeen
2011-09-16 22:54 ` Ted Ts'o
2011-09-17 0:47 ` Eric Sandeen
2011-09-16 20:49 ` [PATCH 10/25] freefrag: fix up getopt " Eric Sandeen
2011-09-16 22:54 ` Ted Ts'o
2011-09-16 20:49 ` [PATCH 11/25] libe2p: reach unreachable code Eric Sandeen
2011-09-16 22:54 ` Ted Ts'o
2011-09-16 20:49 ` [PATCH 12/25] e2fsck: Don't store old_op from ehandler_operation if we don't restore it Eric Sandeen
2011-09-16 22:55 ` Ted Ts'o
2011-09-16 20:49 ` [PATCH 13/25] e2fsprogs: Fix some error cleanup path bugs Eric Sandeen
2011-09-16 22:55 ` Ted Ts'o
2011-09-16 20:49 ` [PATCH 14/25] subst: Fix free of uninit pointers Eric Sandeen
2011-09-16 22:56 ` Ted Ts'o
2011-09-16 20:49 ` [PATCH 15/25] filefrag: Fix uninitialized "expected" value Eric Sandeen
2011-09-16 22:56 ` Ted Ts'o
2011-09-16 20:49 ` [PATCH 16/25] e2fsck: remove extraneous memset Eric Sandeen
2011-09-16 22:56 ` Ted Ts'o
2011-09-16 20:49 ` [PATCH 17/25] mke2fs: Do not let -t or -T be specified more than once Eric Sandeen
2011-09-16 22:57 ` Ted Ts'o
2011-09-16 22:57 ` Ted Ts'o
2011-09-17 0:49 ` Eric Sandeen
2011-09-16 20:49 ` [PATCH 18/25] e2initrd_helper: Fix memory leak on error Eric Sandeen
2011-09-16 22:58 ` Ted Ts'o
2011-09-16 20:49 ` [PATCH 19/25] libext2: Fix leaks in write_bitmaps on error returns Eric Sandeen
2011-09-16 22:58 ` Ted Ts'o
2011-09-16 20:49 ` [PATCH 20/25] test_icount: fclose() before exit Eric Sandeen
2011-09-16 22:58 ` Ted Ts'o
2011-09-16 20:49 ` [PATCH 21/25] e2fsck: Fix leaks in error paths Eric Sandeen
2011-09-16 23:41 ` Ted Ts'o
2011-09-17 0:57 ` Eric Sandeen [this message]
2011-09-16 20:49 ` [PATCH 22/25] tune2fs: handle inode and/or block bitmap read failures in resize_inode() Eric Sandeen
2011-09-16 23:57 ` Ted Ts'o
2011-09-16 20:49 ` [PATCH 23/25] e2fsprogs: Don't try to close an fd which is negative Eric Sandeen
2011-09-16 23:57 ` Ted Ts'o
2011-09-16 20:49 ` [PATCH 24/25] e4defrag: Check error return of sysconf() Eric Sandeen
2011-09-16 23:57 ` Ted Ts'o
2011-09-16 20:49 ` [PATCH 25/25] mke2fs: free tdb_dir string if it came from the profile Eric Sandeen
2011-09-16 23:58 ` Ted Ts'o
2011-09-16 21:27 ` [PATCH 00/25] e2fsprogs: Misc cleanups & fixes Eric Sandeen
2011-09-16 22:05 ` Ted Ts'o
2011-09-16 22:27 ` Eric Sandeen
2011-09-16 23:49 ` Ted Ts'o
2011-09-17 0:58 ` Eric Sandeen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4E73F05E.2080106@redhat.com \
--to=sandeen@redhat.com \
--cc=linux-ext4@vger.kernel.org \
--cc=tytso@mit.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.