diff options
author | Neels Hofmeyr <nhofmeyr@sysmocom.de> | 2016-12-12 13:49:03 +0100 |
---|---|---|
committer | Neels Hofmeyr <nhofmeyr@sysmocom.de> | 2016-12-12 16:56:54 +0100 |
commit | 886d6fdec605e47ec19a3e37dd9596c525178a54 (patch) | |
tree | 8a4d3be8401fa25a31be75f91b6418d7c75b3a90 /src/logging.c | |
parent | a4842afc83334f97653e6cca6220b19f53696509 (diff) |
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
Diffstat (limited to 'src/logging.c')
-rw-r--r-- | src/logging.c | 3 |
1 files changed, 2 insertions, 1 deletions
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; } |