pgpool-II 4.7.0 Documentation
Prev | Up | Appendix A. Release Notes | Next

# A.40. Release 4.3.13

> Release Date: 2024-11-28

## A.40.1. Bug fixes

- Abort SSL negotiation if backend sends an error message. (Tatsuo Ishii)

  In the client side implementation of SSL negotiation (pool_ssl_negotiate_clientserver()), it was possible for a man-in-the-middle attacker to send a long error message to confuse Pgpool-II or client while in the SSL negotiation phase. This commit rejects the negotiation immediately (issue a FATAL error) and exits the session to prevent such an attack.

  This resembles PostgreSQL's CVE-2024-10977.

- Fix the watchdog process not reloading configurations. (Bo Peng)

  The `reload_config()` function in Pgpool-II should send a SIGHUP signal to the watchdog process.

- Fix bug in `do_query`. (Tatsuo Ishii)

  Fix `do_query` to use ntohs/ntohl instead of htons/htonl.

- Fix authentication failure after updating `pool_passwd` and reload. (Tatsuo Ishii)

  If `pool_hba.conf` is disabled, updating pool_passwd was not recognized by Pgpool-II child process even if Pgpool-II reload was performed. The reload processing function check_config_reload() mistakenly assumed that reopening pool_passwd was only necessary when enable_pool_hba is on.

  Discussion: https://www.pgpool.net/pipermail/pgpool-general/2024-November/001944.html"

- Fix `COPY` hangs. (#79) (Tatsuo Ishii)

  During COPY IN state (i.e. COPY FROM STDIN), frontend can send Flush or Sync messages. According to the F/B protocol specification, they should be ignored but Pgpool-II treated as an invalid message and this causes COPY hung.

  Also a regression test is added for this issue.

- Fix Pgpool-II child process crash during shutdown. (Tatsuo Ishii)

  The actual crash was in `close_all_backend_connections()`. `close_all_backend_connections()` was called because on_system_exit registers `child_will_go_down()`. At the moment it seems pgpool child had just started up and doing `pool_init_cp()`. The connection pool object had not been completely initialized, that's cause of the crash.

  Problem reported and analyzed by Emond Papegaaij.

  Discussion: https://www.pgpool.net/pipermail/pgpool-general/2024-November/001938.html

- Fix sporadic health check failures due to authentication failure. (Tatsuo Ishii)

  When health_check_password is empty string, health check process looks for the password from pool_passwd file. Problem is, the file descriptor for the file is inherited from parent pgpool process. This means that pgpool main and health check process (possibly multiple process) share the same descriptor, which causes various problem including the issue reported here. To fix the problem, re-open the file when health check process starts so that each health check process owns its own file descriptor.

  Note that pgpool child process (responsible for frontend sessions) already re-opens the file descriptor and they are not related to the issue.

  Problem reported and analyzed by Emond Papegaaij.

  Discussion: https://www.pgpool.net/pipermail/pgpool-general/2024-October/001913.html

- Optimize query cache invalidation for `ALTER ROLE`. (Tatsuo Ishii)

  Commit 6b7d585eb1c693e4ffb5b8e6ed9aa0f067fa1b89 invalidates query cache if any `ALTER ROLE/USER` statement is used. Actually this is an overkill. Because following queries do not affect the privilege of the role.

      ALTER ROLE user WITH [ENCRYPTED] PASSWORD
      ALTER ROLE user WITH CONNECTION LIMIT

  So do not invalidate query cache if those commands are used.

  Discussion: https://www.pgpool.net/pipermail/pgpool-hackers/2024-October/004532.html

- Fix Pgpool-II crash when pgpool child process exits. (Tatsuo Ishii)

  When a pgpool child process exits, `close_all_backend_connections()` is called, which is responsible for closing all connections to backend in the connection pool. It used mistakenly MAIN_CONNECTION macro, which is fine for current active connections but is not good for pooled connections because a main node could be different at the time when the connection pool was created. Fix is using `in_use_backend()` instead.

  Reported-by: Emond Papegaaij

- Fix bug in replication/snapshot isolation mode. (#69) (Tatsuo Ishii)

  When `INSERT` command is received, pgpool automatically issues table LOCK command to the target table but it forgot to send the command to other than main nodes. This only happened in extended query mode.

- Fix another bug in native replication/snapshot isolation mode. (Tatsuo Ishii)

  insert_lock() forgot to send row lock command (lock_kind == 3 case) to other than main node.

- Fix resource leaks in `pool_memqcache.c`. (Tatsuo Ishii)

  These leaks were brought in by commit 6fdba5c33.

## A.40.2. Documents

- Fix typos in the documentation and sample configuration files. (Bo Peng)

## A.40.3. Regression Tests

- Adapt 024.cert_auth test to OpenSSL 3.2. (Tatsuo Ishii)

Prev | Home | Next
Release 4.3.14 | Up | Release 4.3.12