Commit 2eb1e1e7 authored by Dave Cridland's avatar Dave Cridland

OF-984 Avoid using interned domains as sync keys

A few places all use the domain.intern() as the key for a synchronized block.

This can lead to clashes when multiple semantics conflict, and this can in turn
lead to a deadlock, as witnessed in OF-984.

This changes two cases to use a prefixed string to namespace the locking.
parent bdc69ab5
...@@ -592,7 +592,7 @@ public class LocalOutgoingServerSession extends LocalServerSession implements Ou ...@@ -592,7 +592,7 @@ public class LocalOutgoingServerSession extends LocalServerSession implements Ou
String senderDomain = packet.getFrom().getDomain(); String senderDomain = packet.getFrom().getDomain();
boolean processed = true; boolean processed = true;
if (!getAuthenticatedDomains().contains(senderDomain)) { if (!getAuthenticatedDomains().contains(senderDomain)) {
synchronized (senderDomain.intern()) { synchronized (("Auth::" + senderDomain).intern()) {
if (!getAuthenticatedDomains().contains(senderDomain) && if (!getAuthenticatedDomains().contains(senderDomain) &&
!authenticateSubdomain(senderDomain, packet.getTo().getDomain())) { !authenticateSubdomain(senderDomain, packet.getTo().getDomain())) {
// Return error since sender domain was not validated by remote server // Return error since sender domain was not validated by remote server
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment