diff options
author | Mathias Krause <minipli@googlemail.com> | 2015-06-17 15:39:37 +0200 |
---|---|---|
committer | Paul Moore <pmoore@redhat.com> | 2015-07-06 11:29:05 -0400 |
commit | ccaf7d240c2fe034a323af2783ddec6297ae37e6 (patch) | |
tree | bbd2e018425dd7cb936b6d6c379a6b358ebfec85 /src | |
parent | 62f1e7e2fa6163964322d232bde89e37478772e9 (diff) | |
download | libseccomp-ccaf7d240c2fe034a323af2783ddec6297ae37e6.tar.gz |
db: fix braino in _db_node_mask_fixup()
If the mask is 0 and we do a masked compare we shouldn't "optimize" this
case to a compare against zero. "(arg & 0) eq 0" != "(arg & ~0) eq 0".
The former is a tautology while the latter depends on the value of "arg".
Just mask "datum" instead to fix this bug. We'll do an unnecessary runtime
test for the tautology in this case but follow up patches will take care
of this.
This fixes the failing test cases of 12-sim-basic_masked_ops with 64 bit
argument values.
Signed-off-by: Mathias Krause <minipli@googlemail.com>
Signed-off-by: Paul Moore <pmoore@redhat.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/db.c | 9 |
1 files changed, 2 insertions, 7 deletions
@@ -828,17 +828,12 @@ int db_syscall_priority(struct db_filter *db, * Fixup the node based on the op/mask * @param node the chain node * - * Apply some simplifications based on the comparison op and mask value. + * Ensure the datum is masked as well. * */ static void _db_node_mask_fixup(struct db_arg_chain_tree *node) { - if (node->op == SCMP_CMP_MASKED_EQ && node->mask == 0) { - node->op = SCMP_CMP_EQ; - node->mask = ARG_MASK_MAX; - node->datum = 0; - } else - node->datum &= node->mask; + node->datum &= node->mask; } /** |