diff --git a/src/connectivity/network/netstack/fuchsia_net_stack.go b/src/connectivity/network/netstack/fuchsia_net_stack.go
index 4e19d12..dba43d0 100644
--- a/src/connectivity/network/netstack/fuchsia_net_stack.go
+++ b/src/connectivity/network/netstack/fuchsia_net_stack.go
@@ -130,13 +130,14 @@
 func (ns *Netstack) getInterface(id uint64) (*stack.InterfaceInfo, *stack.Error) {
 	ns.mu.Lock()
 	ifs, ok := ns.mu.ifStates[tcpip.NICID(id)]
+	if !ok {
+		ns.mu.Unlock()
+		return nil, &stack.Error{Type: stack.ErrorTypeNotFound}
+	}
 	addresses, subnets := ns.getAddressesLocked(ifs.nicid)
 	ns.mu.Unlock()
 
-	if ok {
-		return getInterfaceInfo(ifs, addresses, subnets), nil
-	}
-	return nil, &stack.Error{Type: stack.ErrorTypeNotFound}
+	return getInterfaceInfo(ifs, addresses, subnets), nil
 }
 
 func (ns *Netstack) setInterfaceState(id uint64, enabled bool) *stack.Error {
diff --git a/src/connectivity/network/tests/src/lib.rs b/src/connectivity/network/tests/src/lib.rs
index cd807cf..a8808ea 100644
--- a/src/connectivity/network/tests/src/lib.rs
+++ b/src/connectivity/network/tests/src/lib.rs
@@ -158,7 +158,7 @@
                 interface.features & fidl_fuchsia_hardware_ethernet::INFO_FEATURE_LOOPBACK,
                 0
             );
-            assert_eq!(interface.flags & fidl_fuchsia_netstack::NET_INTERFACE_FLAG_UP, 0,);
+            assert_eq!(interface.flags & fidl_fuchsia_netstack::NET_INTERFACE_FLAG_UP, 0);
             Ok(())
         },
     ))
@@ -213,9 +213,34 @@
         }),
         prefix_len: 0,
     };
-    let error = await!(stack.add_interface_address(max_id + 1, &mut interface_address,))
-        .context("failed to add interface address")?
-        .ok_or(failure::err_msg("failed to get add interface address response"))?;
+    let error = await!(stack.add_interface_address(max_id + 1, &mut interface_address))
+        .context("failed to call add interface address")?
+        .ok_or(failure::err_msg("failed to get add interface address error"))?;
+    assert_eq!(
+        error.as_ref(),
+        &fidl_fuchsia_net_stack::Error { type_: fidl_fuchsia_net_stack::ErrorType::NotFound }
+    );
+    Ok(())
+}
+
+#[fuchsia_async::run_singlethreaded(test)]
+async fn get_interface_info_not_found() -> Result {
+    let name = stringify!(get_interface_info_not_found);
+
+    let sandbox = fuchsia_component::client::connect_to_service::<
+        fidl_fuchsia_netemul_sandbox::SandboxMarker,
+    >()
+    .context("failed to connect to sandbox")?;
+    let managed_environment = create_netstack_environment(&sandbox, name.to_string())
+        .context("failed to create netstack environment")?;
+    let stack = connect_to_service::<fidl_fuchsia_net_stack::StackMarker>(&managed_environment)
+        .context("failed to connect to netstack")?;
+    let interfaces = await!(stack.list_interfaces()).context("failed to list interfaces")?;
+    let max_id = interfaces.iter().map(|interface| interface.id).max().unwrap_or(0);
+    let (info, error) = await!(stack.get_interface_info(max_id + 1))
+        .context("failed to call get interface info")?;
+    assert_eq!(info, None);
+    let error = error.ok_or(failure::err_msg("failed to get get interface info error"))?;
     assert_eq!(
         error.as_ref(),
         &fidl_fuchsia_net_stack::Error { type_: fidl_fuchsia_net_stack::ErrorType::NotFound }
