]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
datatype: avoid crash in debug mode when printing integers
authorFlorian Westphal <fw@strlen.de>
Fri, 26 Jun 2015 08:50:44 +0000 (10:50 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Tue, 30 Jun 2015 00:06:36 +0000 (02:06 +0200)
nft -i --debug=all
nft> add rule ip filter foo mark 42

dies with sigfpe; seems mpz doesn't like len 0:
#1  0x0805f2ee in mpz_export_data (data=0xbfeda588, op=0x9d9fb08, byteorder=BYTEORDER_HOST_ENDIAN, len=0) at gmputil.c:115

After patch this prints 0x0000002a.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
src/datatype.c

index f42e3dfb877d9eb02a003254e691753db73fe41d..f79f5d2db30818667986b20502b0e394614d99ba 100644 (file)
@@ -156,13 +156,14 @@ out:
 void symbolic_constant_print(const struct symbol_table *tbl,
                             const struct expr *expr)
 {
+       unsigned int len = div_round_up(expr->len, BITS_PER_BYTE);
        const struct symbolic_constant *s;
        uint64_t val = 0;
 
        /* Export the data in the correct byteorder for comparison */
        assert(expr->len / BITS_PER_BYTE <= sizeof(val));
        mpz_export_data(constant_data_ptr(val, expr->len), expr->value,
-                       expr->byteorder, expr->len / BITS_PER_BYTE);
+                       expr->byteorder, len);
 
        for (s = tbl->symbols; s->identifier != NULL; s++) {
                if (val == s->value)