MXS-1519 Prevent "inheritance" of fw rules

By using an the value of a global incremented integer as the
initial version number of a Dbfw instance it is ensured that every
such instance does not "inherit" any rules from a previous instance
that happened to exist in the same place as the new instance to be
created.
This commit is contained in:
Johan Wikman
2017-11-17 10:26:02 +02:00
parent 07e58444f6
commit 204fa17322

View File

@ -1147,12 +1147,27 @@ static bool update_rules(Dbfw* my_instance)
return rval; return rval;
} }
namespace
{
/**
* Global rule version. Every time a Dbfw instance is created, its rule version will
* be the value of this variable, which is then incremented by one.
*
* This is to ensure that each created Dbfw instance will have a unique set of rules,
* irrespective of whether a new instance is created in exactly the same memory location
* where an earlier, now deleted instance existed.
*/
int global_version = 1;
};
Dbfw::Dbfw(MXS_CONFIG_PARAMETER* params): Dbfw::Dbfw(MXS_CONFIG_PARAMETER* params):
m_action((enum fw_actions)config_get_enum(params, "action", action_values)), m_action((enum fw_actions)config_get_enum(params, "action", action_values)),
m_log_match(0), m_log_match(0),
m_lock(SPINLOCK_INIT), m_lock(SPINLOCK_INIT),
m_filename(config_get_string(params, "rules")), m_filename(config_get_string(params, "rules")),
m_version(1) m_version(atomic_add(&global_version, 1))
{ {
if (config_get_bool(params, "log_match")) if (config_get_bool(params, "log_match"))
{ {