From dc668d296f9f05aeab6315d44cff3208641e3096 Mon Sep 17 00:00:00 2001
From: Michal Vasko <mvasko@cesnet.cz>
Date: Mon, 13 Feb 2023 10:23:13 +0100
Subject: [PATCH] schema compile UPDATE do not implement 2 same modules

CVE: CVE-2023-26916
Upstream-Status: Backport [https://github.com/CESNET/libyang/commit/dc668d296f9f05aeab6315d44cff3208641e3096]

Refs #1979
---
 src/schema_compile.c | 20 +++++++-------------
 1 file changed, 7 insertions(+), 13 deletions(-)

diff --git a/src/schema_compile.c b/src/schema_compile.c
index ed768ba0..68c0d681 100644
--- a/src/schema_compile.c
+++ b/src/schema_compile.c
@@ -1748,7 +1748,7 @@ lys_has_compiled_import_r(struct lys_module *mod)
 LY_ERR
 lys_implement(struct lys_module *mod, const char **features, struct lys_glob_unres *unres)
 {
-    LY_ERR ret;
+    LY_ERR r;
     struct lys_module *m;
 
     assert(!mod->implemented);
@@ -1757,21 +1757,15 @@ lys_implement(struct lys_module *mod, const char **features, struct lys_glob_unr
     m = ly_ctx_get_module_implemented(mod->ctx, mod->name);
     if (m) {
         assert(m != mod);
-        if (!strcmp(mod->name, "yang") && (strcmp(m->revision, mod->revision) > 0)) {
-            /* special case for newer internal module, continue */
-            LOGVRB("Internal module \"%s@%s\" is already implemented in revision \"%s\", using it instead.",
-                    mod->name, mod->revision ? mod->revision : "<none>", m->revision ? m->revision : "<none>");
-        } else {
-            LOGERR(mod->ctx, LY_EDENIED, "Module \"%s@%s\" is already implemented in revision \"%s\".",
-                    mod->name, mod->revision ? mod->revision : "<none>", m->revision ? m->revision : "<none>");
-            return LY_EDENIED;
-        }
+        LOGERR(mod->ctx, LY_EDENIED, "Module \"%s@%s\" is already implemented in revision \"%s\".",
+                mod->name, mod->revision ? mod->revision : "<none>", m->revision ? m->revision : "<none>");
+        return LY_EDENIED;
     }
 
     /* set features */
-    ret = lys_set_features(mod->parsed, features);
-    if (ret && (ret != LY_EEXIST)) {
-        return ret;
+    r = lys_set_features(mod->parsed, features);
+    if (r && (r != LY_EEXIST)) {
+        return r;
     }
 
     /*
-- 
2.34.1

