Text   |  XML   |  ReML   |   Visible Warnings:

Use After Free  at ssl-proxy-openssl.c:644

No properties have been set. | edit properties
Jump to warning location ↓ warning details...
Show Events | Options

ssl_handle_error

(/home/sate/Testcases/c/cve/dovecot-1.2.0/src/login-common/ssl-proxy-openssl.c)expand/collapse
Show more  
 347  static void ssl_handle_error(struct ssl_proxy *proxy, int ret,
 348                               const char *func_name)
 349  {
 350          const char *errstr = NULL;
 351          int err;
 352   
 353          proxy->refcount++;
 354   
 355          i_free_and_null(proxy->last_error);
 356          err = SSL_get_error(proxy->ssl, ret);
 357   
 358          switch (err) {
 359          case SSL_ERROR_WANT_READ:
 360                  ssl_set_io(proxy, SSL_ADD_INPUT);
 361                  break;
 362          case SSL_ERROR_WANT_WRITE:
 363                  ssl_set_io(proxy, SSL_ADD_OUTPUT);
 364                  break;
 365          case SSL_ERROR_SYSCALL:
 366                  /* eat up the error queue */
 367                  if (ERR_peek_error() != 0)
 368                          errstr = ssl_last_error();
 369                  else if (ret != 0)
 370                          errstr = strerror(errno);
 371                  else {
 372                          /* EOF. */
 373                          errstr = "Disconnected";
 374                          break;
 375                  }
 376                  errstr = t_strdup_printf("%s syscall failed: %s",
 377                                           func_name, errstr);
 378                  break;
 379          case SSL_ERROR_ZERO_RETURN:
 380                  /* clean connection closing */
 381[+]                 ssl_proxy_destroy(proxy);
 382                  break;
 383          case SSL_ERROR_SSL:
 384                  errstr = t_strdup_printf("%s failed: %s",
 385                                           func_name, ssl_last_error());
 386                  break;
 387          default:
 388                  errstr = t_strdup_printf("%s failed: unknown failure %d (%s)",
 389                                           func_name, err, ssl_last_error());
 390                  break;
 391          }
 392   
 393          if (errstr != NULL) {
 394                  proxy->last_error = i_strdup(errstr);
 395                  ssl_proxy_destroy(proxy);
 396          }
 397[+]         ssl_proxy_unref(proxy);
expand/collapse

ssl_proxy_unref

(/home/sate/Testcases/c/cve/dovecot-1.2.0/src/login-common/ssl-proxy-openssl.c)expand/collapse
Show more  
 642  static void ssl_proxy_unref(struct ssl_proxy *proxy)
 643  {
 644          if (--proxy->refcount > 0)
Show more  
Show more  




Change Warning 11807.25563 : Use After Free

Priority:
State:
Finding:
Owner:
Note: