diff --git a/src/pkgcheck/checks/overlays.py b/src/pkgcheck/checks/overlays.py
index cbe3d5b6e..f44b2aa65 100644
--- a/src/pkgcheck/checks/overlays.py
+++ b/src/pkgcheck/checks/overlays.py
@@ -2,7 +2,7 @@
 from snakeoil.strings import pluralism
 
 from .. import results, sources
-from . import MirrorsCheck, OptionalCheck, OverlayRepoCheck, RepoCheck
+from . import Check, MirrorsCheck, OptionalCheck, OverlayRepoCheck, RepoCheck
 
 
 class UnusedInMastersLicenses(results.VersionResult, results.Warning):
@@ -132,3 +132,37 @@ def feed(self, pkg):
             non_local_use = pkg.iuse_stripped.difference(pkg.local_use.keys())
             if flags := self.unused_master_flags.intersection(non_local_use):
                 yield UnusedInMastersGlobalUse(sorted(flags), pkg=pkg)
+
+
+class MasterPackageClobbered(results.PackageResult, results.Error):
+    """Package in master is clobbered by package in overlay.
+
+    A repository (such as ``::guru``) that is supposed to only provide
+    additional packages to its masters (``::gentoo``), provides a package
+    that is found in its master, therefore potentially clobbering it.
+    """
+
+    def __init__(self, repository: str, **kwarg):
+        super().__init__(**kwarg)
+        self.repository = repository
+
+    @property
+    def desc(self):
+        return f"package from repository ::{self.repository} clobbered"
+
+
+class MasterPackageClobberedCheck(OverlayRepoCheck, OptionalCheck):
+    """Detect clobbering packages from master."""
+
+    _source = sources.PackageRepoSource
+    known_results = frozenset({MasterPackageClobbered})
+
+    def feed(self, pkgset):
+        pkg = pkgset[0]
+        for repo in self.options.target_repo.masters:
+            # Trigger only if at least one non-p.masked package matches,
+            # to cover for packages being moved to subordinate repo.
+            for master_pkg in repo.itermatch(pkg.unversioned_atom):
+                if not repo.masked.match(master_pkg):
+                    yield MasterPackageClobbered(str(repo), pkg=pkg)
+                    break
diff --git a/testdata/data/repos/overlay/MasterPackageClobberedCheck/MasterPackageClobbered/expected.json b/testdata/data/repos/overlay/MasterPackageClobberedCheck/MasterPackageClobbered/expected.json
new file mode 100644
index 000000000..255499968
--- /dev/null
+++ b/testdata/data/repos/overlay/MasterPackageClobberedCheck/MasterPackageClobbered/expected.json
@@ -0,0 +1 @@
+{"__class__": "MasterPackageClobbered", "category": "MasterPackageClobberedCheck", "package": "MasterPackageClobbered", "repository": "overlayed"}
diff --git a/testdata/repos/overlay/MasterPackageClobberedCheck/MasterPackageClobbered/MasterPackageClobbered-1.ebuild b/testdata/repos/overlay/MasterPackageClobberedCheck/MasterPackageClobbered/MasterPackageClobbered-1.ebuild
new file mode 100644
index 000000000..d89cba096
--- /dev/null
+++ b/testdata/repos/overlay/MasterPackageClobberedCheck/MasterPackageClobbered/MasterPackageClobbered-1.ebuild
@@ -0,0 +1,4 @@
+DESCRIPTION="Ebuild clobbered by overlay"
+HOMEPAGE="https://github.com/pkgcore/pkgcheck"
+LICENSE="BSD"
+SLOT="0"
diff --git a/testdata/repos/overlay/MasterPackageClobberedCheck/MasterPackageClobberedMasked/MasterPackageClobberedMasked-1.ebuild b/testdata/repos/overlay/MasterPackageClobberedCheck/MasterPackageClobberedMasked/MasterPackageClobberedMasked-1.ebuild
new file mode 100644
index 000000000..d89cba096
--- /dev/null
+++ b/testdata/repos/overlay/MasterPackageClobberedCheck/MasterPackageClobberedMasked/MasterPackageClobberedMasked-1.ebuild
@@ -0,0 +1,4 @@
+DESCRIPTION="Ebuild clobbered by overlay"
+HOMEPAGE="https://github.com/pkgcore/pkgcheck"
+LICENSE="BSD"
+SLOT="0"
diff --git a/testdata/repos/overlay/profiles/categories b/testdata/repos/overlay/profiles/categories
index 6dbed6010..30c92f403 100644
--- a/testdata/repos/overlay/profiles/categories
+++ b/testdata/repos/overlay/profiles/categories
@@ -1,2 +1,3 @@
+MasterPackageClobberedCheck
 UnusedInMastersCheck
 VisibilityCheck
diff --git a/testdata/repos/overlayed/MasterPackageClobberedCheck/MasterPackageClobbered/MasterPackageClobbered-0.ebuild b/testdata/repos/overlayed/MasterPackageClobberedCheck/MasterPackageClobbered/MasterPackageClobbered-0.ebuild
new file mode 100644
index 000000000..d89cba096
--- /dev/null
+++ b/testdata/repos/overlayed/MasterPackageClobberedCheck/MasterPackageClobbered/MasterPackageClobbered-0.ebuild
@@ -0,0 +1,4 @@
+DESCRIPTION="Ebuild clobbered by overlay"
+HOMEPAGE="https://github.com/pkgcore/pkgcheck"
+LICENSE="BSD"
+SLOT="0"
diff --git a/testdata/repos/overlayed/MasterPackageClobberedCheck/MasterPackageClobberedMasked/MasterPackageClobberedMasked-0.ebuild b/testdata/repos/overlayed/MasterPackageClobberedCheck/MasterPackageClobberedMasked/MasterPackageClobberedMasked-0.ebuild
new file mode 100644
index 000000000..d89cba096
--- /dev/null
+++ b/testdata/repos/overlayed/MasterPackageClobberedCheck/MasterPackageClobberedMasked/MasterPackageClobberedMasked-0.ebuild
@@ -0,0 +1,4 @@
+DESCRIPTION="Ebuild clobbered by overlay"
+HOMEPAGE="https://github.com/pkgcore/pkgcheck"
+LICENSE="BSD"
+SLOT="0"
diff --git a/testdata/repos/overlayed/profiles/categories b/testdata/repos/overlayed/profiles/categories
index 39802f642..84b9f25f0 100644
--- a/testdata/repos/overlayed/profiles/categories
+++ b/testdata/repos/overlayed/profiles/categories
@@ -1 +1,2 @@
+MasterPackageClobberedCheck
 stub
diff --git a/testdata/repos/overlayed/profiles/package.mask b/testdata/repos/overlayed/profiles/package.mask
index e6ebacc15..9c34e3d96 100644
--- a/testdata/repos/overlayed/profiles/package.mask
+++ b/testdata/repos/overlayed/profiles/package.mask
@@ -1 +1,4 @@
 stub/masked
+
+# Package being moved to ::overlay.
+<MasterPackageClobberedCheck/MasterPackageClobberedMasked-1
