From 886d6fdec605e47ec19a3e37dd9596c525178a54 Mon Sep 17 00:00:00 2001 From: Neels Hofmeyr Date: Mon, 12 Dec 2016 13:49:03 +0100 Subject: fix logging: log_set_category_filter() for internal DL* logging cats In log_set_category_filter(), passing a negative index lead to memory corruption. Particularly dangerous since the internal logging categories have negative values. Fix: apply map_subsys() to interpret negative values as internal logging categories. As a side effect, out-of-bounds logging categories will be mapped to DLGLOBAL instead of being dropped. Fix the expectations in logging_test to match the fixed bug. While at it also guard against a NULL logging target. Change-Id: Ib0725b22bc39498c6b3970a61eb3339cf56d19f1 --- src/logging.c | 3 ++- tests/logging/logging_test.err | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/logging.c b/src/logging.c index d32ca43a..b0bca549 100644 --- a/src/logging.c +++ b/src/logging.c @@ -577,8 +577,9 @@ void log_set_log_level(struct log_target *target, int log_level) void log_set_category_filter(struct log_target *target, int category, int enable, int level) { - if (category >= osmo_log_info->num_cat) + if (!target) return; + category = map_subsys(category); target->categories[category].enabled = !!enable; target->categories[category].loglevel = level; } diff --git a/tests/logging/logging_test.err b/tests/logging/logging_test.err index 4527d835..17b3cad0 100644 --- a/tests/logging/logging_test.err +++ b/tests/logging/logging_test.err @@ -6,3 +6,4 @@ DLGLOBAL You should see this on DLGLOBAL (b) DLGLOBAL You should see this on DLGLOBAL (c) DLGLOBAL You should see this on DLGLOBAL (d) DLGLOBAL You should see this on DLGLOBAL (e) +DLGLOBAL You should see this (DLGLOBAL on DEBUG) -- cgit v1.2.3