diff --git a/system/gd/rust/linux/stack/src/socket_manager.rs b/system/gd/rust/linux/stack/src/socket_manager.rs
index f1ccf72f08b97166b24ca71b87c8eaeb111e26ac..d41fc13a953a0f6d7cc766ed313d457c6f591d09 100644
--- a/system/gd/rust/linux/stack/src/socket_manager.rs
+++ b/system/gd/rust/linux/stack/src/socket_manager.rs
@@ -575,6 +575,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