diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2014-05-20 14:54:06 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2014-05-20 14:54:06 +0000 |
commit | 59ce289027e9d4c60d753daed22689c1bb01957c (patch) | |
tree | 5a1dba62f7d4b7b466847468103f69fa176f1004 | |
parent | f027b7883c9adca3868ae667167b3b35220cb46d (diff) | |
download | cygnal-59ce289027e9d4c60d753daed22689c1bb01957c.tar.gz cygnal-59ce289027e9d4c60d753daed22689c1bb01957c.tar.bz2 cygnal-59ce289027e9d4c60d753daed22689c1bb01957c.zip |
* flock.cc (delete_lock_in_parent): Use LIST_FOREACH_SAFE to avoid
dereferencing freed pointer (CID 60224).
-rw-r--r-- | winsup/cygwin/ChangeLog | 5 | ||||
-rw-r--r-- | winsup/cygwin/flock.cc | 6 |
2 files changed, 8 insertions, 3 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index e89b60d21..d1253916d 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,5 +1,10 @@ 2014-05-20 Corinna Vinschen <corinna@vinschen.de> + * flock.cc (delete_lock_in_parent): Use LIST_FOREACH_SAFE to avoid + dereferencing freed pointer (CID 60224). + +2014-05-20 Corinna Vinschen <corinna@vinschen.de> + * fhandler_procsysvipc.cc (format_procsysvipc_msg): Rearrange code to avoid resource leakage (CID 60002). Don't use tmp_pathbuf, explain why. Fix indentation. diff --git a/winsup/cygwin/flock.cc b/winsup/cygwin/flock.cc index 5ea3e067d..4250aba3f 100644 --- a/winsup/cygwin/flock.cc +++ b/winsup/cygwin/flock.cc @@ -1,6 +1,6 @@ /* flock.cc. NT specific implementation of advisory file locking. - Copyright 2003, 2008, 2009, 2010, 2011, 2012, 2013 Red Hat, Inc. + Copyright 2003, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc. This file is part of Cygwin. @@ -724,13 +724,13 @@ err: DWORD WINAPI delete_lock_in_parent (PVOID param) { - inode_t *node; + inode_t *node, *next_node; lockf_t *lock, **prev; /* Scan list of all inodes, and reap stale BSD lock if lf_id matches. Remove inode if empty. */ INODE_LIST_LOCK (); - LIST_FOREACH (node, &cygheap->inode_list, i_next) + LIST_FOREACH_SAFE (node, &cygheap->inode_list, i_next, next_node) if (!node->inuse ()) { for (prev = &node->i_lockf, lock = *prev; lock; lock = *prev) |