From: JP Abgrall Date: Thu, 19 May 2011 03:26:14 +0000 (-0700) Subject: libxt_quota: make sure uint64 is not truncated X-Git-Tag: v1.4.11~1^2~20 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2305d5fb42fc059f38fc1bdf53411dbeecdb310b;p=thirdparty%2Fiptables.git libxt_quota: make sure uint64 is not truncated The xtables_strtoul() would cram a long long into a long. The parse_int would try to cram a UINT64 into a long. --- diff --git a/include/xtables.h.in b/include/xtables.h.in index f88813f5..90eb1b2b 100644 --- a/include/xtables.h.in +++ b/include/xtables.h.in @@ -408,7 +408,7 @@ extern void xtables_register_matches(struct xtables_match *, unsigned int); extern void xtables_register_target(struct xtables_target *me); extern void xtables_register_targets(struct xtables_target *, unsigned int); -extern bool xtables_strtoul(const char *, char **, unsigned long *, +extern bool xtables_strtoul(const char *, char **, unsigned long long *, unsigned long, unsigned long); extern bool xtables_strtoui(const char *, char **, unsigned int *, unsigned int, unsigned int); diff --git a/xtables.c b/xtables.c index f10cdb70..3c9a13f4 100644 --- a/xtables.c +++ b/xtables.c @@ -426,7 +426,7 @@ int xtables_load_ko(const char *modprobe, bool quiet) * Returns true/false whether number was accepted. On failure, *value has * undefined contents. */ -bool xtables_strtoul(const char *s, char **end, unsigned long *value, +bool xtables_strtoul(const char *s, char **end, unsigned long long *value, unsigned long min, unsigned long max) { unsigned long v; @@ -454,7 +454,7 @@ bool xtables_strtoul(const char *s, char **end, unsigned long *value, bool xtables_strtoui(const char *s, char **end, unsigned int *value, unsigned int min, unsigned int max) { - unsigned long v; + unsigned long long v; bool ret; ret = xtables_strtoul(s, end, &v, min, max); diff --git a/xtoptions.c b/xtoptions.c index 3c3ce5f1..ec2269b2 100644 --- a/xtoptions.c +++ b/xtoptions.c @@ -105,7 +105,7 @@ static void xtopt_parse_int(struct xt_option_call *cb) { const struct xt_option_entry *entry = cb->entry; unsigned long long lmin = 0, lmax = UINT32_MAX; - unsigned int value; + unsigned long long value; if (entry->type == XTTYPE_UINT8) lmax = UINT8_MAX; @@ -118,7 +118,7 @@ static void xtopt_parse_int(struct xt_option_call *cb) if (cb->entry->max != 0) lmax = cb->entry->max; - if (!xtables_strtoui(cb->arg, NULL, &value, lmin, lmax)) + if (!xtables_strtoul(cb->arg, NULL, &value, lmin, lmax)) xt_params->exit_err(PARAMETER_PROBLEM, "%s: bad value for option \"--%s\", " "or out of range (%llu-%llu).\n",