diff --git a/src/platform/Linux/ConfigurationManagerImpl.cpp b/src/platform/Linux/ConfigurationManagerImpl.cpp
index 90d0e78..e371095 100644
--- a/src/platform/Linux/ConfigurationManagerImpl.cpp
+++ b/src/platform/Linux/ConfigurationManagerImpl.cpp
@@ -129,31 +129,46 @@
 CHIP_ERROR ConfigurationManagerImpl::GetPrimaryWiFiMACAddress(uint8_t * buf)
 {
     struct ifaddrs * addresses = nullptr;
+    struct sockaddr_ll * mac   = nullptr;
     CHIP_ERROR error           = CHIP_NO_ERROR;
-    bool found                 = false;
 
     // TODO: ideally the buffer size should have been passed as a span, however
     //       for now use the size that is validated in GenericConfigurationManagerImpl.ipp
     constexpr size_t kExpectedBufMinSize = ConfigurationManager::kPrimaryMACAddressLength;
     memset(buf, 0, kExpectedBufMinSize);
 
+    // Prioritize address for interface matching the WiFi interface name
+    // specified in the config headers. Otherwise, use the address for the
+    // first non-loopback interface.
     VerifyOrExit(getifaddrs(&addresses) == 0, error = CHIP_ERROR_INTERNAL);
     for (auto addr = addresses; addr != nullptr; addr = addr->ifa_next)
     {
-        if ((addr->ifa_addr) && (addr->ifa_addr->sa_family == AF_PACKET) && strncmp(addr->ifa_name, "lo", IFNAMSIZ) != 0)
+        if ((addr->ifa_addr) && (addr->ifa_addr->sa_family == AF_PACKET))
         {
-            struct sockaddr_ll * mac = (struct sockaddr_ll *) addr->ifa_addr;
-            memcpy(buf, mac->sll_addr, std::min<size_t>(mac->sll_halen, kExpectedBufMinSize));
-            found = true;
-            break;
+            if (strncmp(addr->ifa_name, CHIP_DEVICE_CONFIG_WIFI_STATION_IF_NAME, IFNAMSIZ) == 0)
+            {
+                mac = (struct sockaddr_ll *) addr->ifa_addr;
+                break;
+            }
+
+            if (strncmp(addr->ifa_name, "lo", IFNAMSIZ) != 0 && !mac)
+            {
+                mac = (struct sockaddr_ll *) addr->ifa_addr;
+            }
         }
     }
-    freeifaddrs(addresses);
-    if (!found)
+
+    if (mac)
+    {
+        memcpy(buf, mac->sll_addr, std::min<size_t>(mac->sll_halen, kExpectedBufMinSize));
+    }
+    else
     {
         error = CHIP_ERROR_NO_ENDPOINT;
     }
 
+    freeifaddrs(addresses);
+
 exit:
     return error;
 }
