From 106b3d16dac3b950dd0a0778dbe6ee3c56b643da Mon Sep 17 00:00:00 2001 From: Georgia Garcia Date: Wed, 11 Jan 2023 21:58:03 +0000 Subject: [PATCH] parser: send key as integer on the dfa of sysv mqueue The key of SYSV message queues is an integer and the kernel uses an integer to store the key. In order to improve performance when travelling the DFA in the kernel, we should use an integer instead of the string. Signed-off-by: Georgia Garcia --- parser/mqueue.cc | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/parser/mqueue.cc b/parser/mqueue.cc index 1ddcf5f4b..1fde03c2a 100644 --- a/parser/mqueue.cc +++ b/parser/mqueue.cc @@ -244,13 +244,19 @@ int mqueue_rule::gen_policy_re(Profile &prof) if (qtype != mqueue_posix) { std::ostringstream buffer; buffer << "\\x" << std::setfill('0') << std::setw(2) << std::hex << AA_CLASS_SYSV_MQUEUE; - buf.assign(buffer.str()); + if (qname) { - if (!convert_entry(buf, qname)) - goto fail; + int key; + sscanf(qname, "%d", &key); + u32 tmp = htobe32((u32) key); + u8 *byte = (u8 *) &tmp; + for (int i = 0; i < 4; i++){ + buffer << "\\x" << std::setfill('0') << std::setw(2) << std::hex << static_cast(byte[i]); + } } else { - buf += default_match_pattern; + buffer << "...."; } + buf.assign(buffer.str()); vec[0] = buf.c_str(); if (label) {