In message <[EMAIL PROTECTED]> on Thu, 07 Aug 2003 08:54:19 +0100, Martin Kochanski
<[EMAIL PROTECTED]> said:
openssl> 1. Minor bug:
openssl>
openssl> Line 443 of rand_win.c reads (reformatted)
openssl>
openssl> && (handle = snap(TH32CS_SNAPALL,0))!= NULL
openssl>
openssl> ["snap" is a variable that holds the address of
openssl> CreateToolhelp32Snapshot].
openssl>
openssl> Microsoft's documentation states that -1
openssl> (INVALID_HANDLE_VALUE), not NULL, is returned on failure.
openssl>
openssl> 2. Memory leak under Windows CE:
openssl>
openssl> RAND_poll() calls CloseHandle(handle) to close the handle
openssl> opened by CreateToolhelp32Snapshot. This is what we should be
openssl> doing under Windows, but under Windows CE, Microsoft's
openssl> documentation states: "To close a snapshot call the
openssl> CloseToolhelp32Snapshot function. Do not call the CloseHandle
openssl> function to close the snapshot call. Calling CloseHandle to
openssl> close the snapshot call generates a memory leak."
openssl>
openssl> I'm not sure whether OpenSSL counts Windows CE as a supported
openssl> platform, but if it does, this needs to be accounted for.
For those two errors, I propose the following change:
Index: crypto/rand/rand_win.c
===================================================================
RCS file: /e/openssl/cvs/openssl/crypto/rand/rand_win.c,v
retrieving revision 1.32
diff -u -r1.32 rand_win.c
--- crypto/rand/rand_win.c 3 Dec 2002 14:20:31 -0000 1.32
+++ crypto/rand/rand_win.c 7 Aug 2003 09:42:55 -0000
@@ -162,6 +162,7 @@
typedef DWORD (WINAPI *GETQUEUESTATUS)(UINT);
typedef HANDLE (WINAPI *CREATETOOLHELP32SNAPSHOT)(DWORD, DWORD);
+typedef BOOL (WINAPI *CLOSETOOLHELP32SNAPSHOT)(HANDLE);
typedef BOOL (WINAPI *HEAP32FIRST)(LPHEAPENTRY32, DWORD, DWORD);
typedef BOOL (WINAPI *HEAP32NEXT)(LPHEAPENTRY32);
typedef BOOL (WINAPI *HEAP32LIST)(HANDLE, LPHEAPLIST32);
@@ -431,7 +432,7 @@
* This seeding method was proposed in Peter Gutmann, Software
* Generation of Practically Strong Random Numbers,
* http://www.usenix.org/publications/library/proceedings/sec98/gutmann.html
- * revised version at http://www.cryptoengines.com/~peter/06_random.pdf
+ * revised version at http://www.cryptoengines.com/~peter/06_random.pdf
* (The assignment of entropy estimates below is arbitrary, but based
* on Peter's analysis the full poll appears to be safe. Additional
* interactive seeding is encouraged.)
@@ -440,6 +441,7 @@
if (kernel)
{
CREATETOOLHELP32SNAPSHOT snap;
+ CLOSETOOLHELP32SNAPSHOT snap_close;
HANDLE handle;
HEAP32FIRST heap_first;
@@ -457,6 +459,8 @@
snap = (CREATETOOLHELP32SNAPSHOT)
GetProcAddress(kernel, TEXT("CreateToolhelp32Snapshot"));
+ snap_close = (CLOSETOOLHELP32SNAPSHOT)
+ GetProcAddress(kernel, TEXT("CloseToolhelp32Snapshot"));
heap_first = (HEAP32FIRST) GetProcAddress(kernel, TEXT("Heap32First"));
heap_next = (HEAP32NEXT) GetProcAddress(kernel, TEXT("Heap32Next"));
heaplist_first = (HEAP32LIST) GetProcAddress(kernel,
TEXT("Heap32ListFirst"));
@@ -472,7 +476,7 @@
heaplist_next && process_first && process_next &&
thread_first && thread_next && module_first &&
module_next && (handle = snap(TH32CS_SNAPALL,0))
- != NULL)
+ != INVALID_HANDLE_VALUE)
{
/* heap list and heap walking */
/* HEAPLIST32 contains 3 fields that will change with
@@ -534,8 +538,10 @@
do
RAND_add(&m, m.dwSize, 9);
while (module_next(handle, &m));
-
- CloseHandle(handle);
+ if (close_snap)
+ close_snap(handle);
+ else
+ CloseHandle(handle);
}
FreeLibrary(kernel);
--
Richard Levitte \ Tunnlandsv�gen 3 \ [EMAIL PROTECTED]
[EMAIL PROTECTED] \ S-168 36 BROMMA \ T: +46-8-26 52 47
\ SWEDEN \ or +46-708-26 53 44
Procurator Odiosus Ex Infernis -- [EMAIL PROTECTED]
Member of the OpenSSL development team: http://www.openssl.org/
Unsolicited commercial email is subject to an archival fee of $400.
See <http://www.stacken.kth.se/~levitte/mail/> for more info.
______________________________________________________________________
OpenSSL Project http://www.openssl.org
Development Mailing List [EMAIL PROTECTED]
Automated List Manager [EMAIL PROTECTED]