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
This commit is contained in:
Neels Hofmeyr 2016-12-12 13:49:03 +01:00
parent a4842afc83
commit 886d6fdec6
2 changed files with 3 additions and 1 deletions

View File

@ -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;
}

View File

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