diff --git a/system/gd/rust/linux/stack/src/socket_manager.rs b/system/gd/rust/linux/stack/src/socket_manager.rs
index b047e27f4211fa043900036d417f97209967612f..7916aa1d7fa12a09a66ba822c90eabe74064fdd0 100644
--- a/system/gd/rust/linux/stack/src/socket_manager.rs
+++ b/system/gd/rust/linux/stack/src/socket_manager.rs
@@ -578,6 +578,14 @@ impl BluetoothSocketManager {
                 log::debug!("service {} is blocked by admin policy", uuid);
                 return SocketResult::new(BtStatus::AuthRejected, INVALID_SOCKET_ID);
             }
+            if self
+                .listening
+                .iter()
+                .any(|(_, v)| v.iter().any(|s| s.uuid.map_or(false, |u| u == uuid)))
+            {
+                log::warn!("Service {} already exists", uuid);
+                return SocketResult::new(BtStatus::Fail, INVALID_SOCKET_ID);
+            }
         }
 
         // Create listener socket pair