]> granicus.if.org Git - ipset/commitdiff
ipset: fix timeout data type size
authorNikolay Martynov <mar.kolya@gmail.com>
Thu, 31 Oct 2013 04:34:31 +0000 (00:34 -0400)
committerJozsef Kadlecsik <kadlec@blackhole.kfki.hu>
Mon, 11 Nov 2013 20:51:13 +0000 (21:51 +0100)
Currently it is impossible to set timeout on some architectures
(MIPS ar71xx at least) because timeout is parsed into long long data
type but used as uint32 without proper conversion. This patch fixes
this issue. Tested on ar71xx router.

Signed-off-by: Nikolay Martynov <mar.kolya@gmail.com>
Signed-off-by: Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
lib/parse.c

index 8ea8542a1a7090ea2481809e85329f62cc6888f8..440ef8f939e7121b1c977f43a8a8cb8a5e8b0b14 100644 (file)
@@ -1292,15 +1292,20 @@ ipset_parse_timeout(struct ipset_session *session,
                    enum ipset_opt opt, const char *str)
 {
        int err;
-       unsigned long long num = 0;
+       unsigned long long llnum = 0;
+       uint32_t num = 0;
 
        assert(session);
        assert(opt == IPSET_OPT_TIMEOUT);
        assert(str);
 
-       err = string_to_number_ll(session, str, 0, UINT_MAX/1000, &num);
-       if (err == 0)
+       err = string_to_number_ll(session, str, 0, UINT_MAX/1000, &llnum);
+       if (err == 0) {
+               /* Timeout is expected to be 32bits wide, so we have
+                  to convert it here */
+               num = llnum;
                return ipset_session_data_set(session, opt, &num);
+       }
 
        return err;
 }