summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2015-10-21 12:46:32 +0200
committerCorinna Vinschen <corinna@vinschen.de>2015-10-21 12:46:32 +0200
commitc0345822e502f45b412ab595e14c51dfdae5aaef (patch)
treec3d1bb4366a154b3f914943db4d3c96a916b7fb6 /winsup/cygwin
parent713161b28b85b7ce05c27a46c52b0780b96047ce (diff)
downloadcygnal-c0345822e502f45b412ab595e14c51dfdae5aaef.tar.gz
cygnal-c0345822e502f45b412ab595e14c51dfdae5aaef.tar.bz2
cygnal-c0345822e502f45b412ab595e14c51dfdae5aaef.zip
Fix memory leak in pthread_getattr_np
* thread.cc (pthread_getattr_np): Fix memory leak, remove usage of malloc for small local buffer. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
Diffstat (limited to 'winsup/cygwin')
-rw-r--r--winsup/cygwin/ChangeLog5
-rw-r--r--winsup/cygwin/release/2.3.02
-rw-r--r--winsup/cygwin/thread.cc8
3 files changed, 10 insertions, 5 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 5d2675d6d..4cbbd0b10 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,5 +1,10 @@
2015-10-21 Corinna Vinschen <corinna@vinschen.de>
+ * thread.cc (pthread_getattr_np): Fix memory leak, remove usage of
+ malloc for small local buffer.
+
+2015-10-21 Corinna Vinschen <corinna@vinschen.de>
+
* path.cc (symlink_info::check_reparse_point): Don't generate an EIO
error if NtFsControlFile returns STATUS_NOT_A_REPARSE_POINT.
diff --git a/winsup/cygwin/release/2.3.0 b/winsup/cygwin/release/2.3.0
index f2391a966..d6fda3b82 100644
--- a/winsup/cygwin/release/2.3.0
+++ b/winsup/cygwin/release/2.3.0
@@ -39,3 +39,5 @@ Bug Fixes
- Fix EIO error accessing certain (OS X SMB?) drives
Addresses: https://cygwin.com/ml/cygwin/2015-09/msg00229.html
+
+- Fix memory leak in calls to pthread_getattr_np.
diff --git a/winsup/cygwin/thread.cc b/winsup/cygwin/thread.cc
index b92a80620..d9b62111f 100644
--- a/winsup/cygwin/thread.cc
+++ b/winsup/cygwin/thread.cc
@@ -2485,8 +2485,7 @@ pthread::resume (pthread_t *thread)
extern "C" int
pthread_getattr_np (pthread_t thread, pthread_attr_t *attr)
{
- const size_t sizeof_tbi = sizeof (THREAD_BASIC_INFORMATION);
- PTHREAD_BASIC_INFORMATION tbi;
+ THREAD_BASIC_INFORMATION tbi;
NTSTATUS status;
if (!pthread::is_good_object (&thread))
@@ -2506,13 +2505,12 @@ pthread_getattr_np (pthread_t thread, pthread_attr_t *attr)
(*attr)->schedparam = thread->attr.schedparam;
(*attr)->guardsize = thread->attr.guardsize;
- tbi = (PTHREAD_BASIC_INFORMATION) malloc (sizeof_tbi);
status = NtQueryInformationThread (thread->win32_obj_id,
ThreadBasicInformation,
- tbi, sizeof_tbi, NULL);
+ &tbi, sizeof (tbi), NULL);
if (NT_SUCCESS (status))
{
- PTEB teb = (PTEB) tbi->TebBaseAddress;
+ PTEB teb = (PTEB) tbi.TebBaseAddress;
/* stackaddr holds the uppermost stack address. See the comments
in pthread_attr_setstack and pthread_attr_setstackaddr for a
description. */