mike-jumper commented on a change in pull request #321:
URL: https://github.com/apache/guacamole-server/pull/321#discussion_r561319738



##########
File path: src/common-ssh/ssh.c
##########
@@ -140,11 +140,26 @@ static void guac_common_ssh_openssl_free_locks(int count) 
{
 int guac_common_ssh_init(guac_client* client) {
 
 #ifdef LIBSSH2_USES_GCRYPT
-    /* Init threadsafety in libgcrypt */
-    gcry_control(GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread);
-    if (!gcry_check_version(GCRYPT_VERSION)) {
-        guac_client_log(client, GUAC_LOG_ERROR, "libgcrypt version mismatch.");
-        return 1;
+    
+    if (!gcry_control(GCRYCTL_INITIALIZATION_FINISHED_P)) {
+    
+        /* Init threadsafety in libgcrypt */
+        gcry_control(GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread);
+        
+        /* Initialize GCrypt */
+        if (!gcry_check_version(GCRYPT_VERSION)) {
+            guac_client_log(client, GUAC_LOG_ERROR, "libgcrypt version 
mismatch.");
+            return 1;
+        }
+        
+        /* Initialize secure memory space. */
+        gcry_control(GCRYCTL_SUSPEND_SECMEM_WARN);
+        gcry_control(GCRYCTL_INIT_SECMEM, 16384, 0);
+        gcry_control(GCRYCTL_RESUME_SECMEM_WARN);

Review comment:
       I'm somewhat concerned about allocating secure memory unless we expect 
that it will be used, as it is apparently a finite resource. From my read of 
the initialization docs for gcrypt, this will not affect usage of memory in 
general, but rather only explicit attempts to allocate secure memory using 
gcrypt's functions for doing so. Looking through the libvncclient (and libssh2) 
code, I'm so far not seeing any usage of secure memory.

##########
File path: src/protocols/vnc/vnc.c
##########
@@ -133,6 +141,27 @@ rfbClient* guac_vnc_get_client(guac_client* client) {
     /* TLS Locking and Unlocking */
     rfb_client->LockWriteToTLS = guac_vnc_lock_write_to_tls;
     rfb_client->UnlockWriteToTLS = guac_vnc_unlock_write_to_tls;
+#endif
+    
+#ifdef LIBVNCSERVER_WITH_CLIENT_GCRYPT

Review comment:
       Where is this (conditionally) defined?

##########
File path: src/protocols/vnc/vnc.c
##########
@@ -133,6 +141,27 @@ rfbClient* guac_vnc_get_client(guac_client* client) {
     /* TLS Locking and Unlocking */
     rfb_client->LockWriteToTLS = guac_vnc_lock_write_to_tls;
     rfb_client->UnlockWriteToTLS = guac_vnc_unlock_write_to_tls;
+#endif
+    
+#ifdef LIBVNCSERVER_WITH_CLIENT_GCRYPT

Review comment:
       Sure - that's a great idea.
   
   I was initially just looking for where the macro was coming from, as there 
were no changes to `configure.ac` and my quick grep of libvncclient code didn't 
reveal anything, but this sounds excellent. It avoids any potential for what we 
saw with the accidental omission of our own `config.h` in handling of FreeRDP 
behavior.




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to