| 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 |
| |