lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Tue, 12 Apr 2011 09:56:49 +0200 From: Thomas Graf <tgraf@...hat.com> To: Stephen Hemminger <shemminger@...tta.com> Cc: netdev@...r.kernel.org Subject: Re: [RFC] iproute2: Fix meta match u32 with 0xffffffff On Mon, 2011-04-11 at 11:52 -0700, Stephen Hemminger wrote: > The value 0xffffffff is a valid mask and bstrtoul() would return > ULONG_MAX which was the error value. Resolve the problem by separating > return value and error indication. > > -unsigned long bstrtoul(const struct bstr *b) > +int bstrtoul(const struct bstr *b, unsigned long *lp) > { > char *inv = NULL; > - unsigned long l; > char buf[b->len+1]; > > + if (b->len == 0) > + return -EINVAL; > + > memcpy(buf, b->data, b->len); > buf[b->len] = '\0'; > > - l = strtoul(buf, &inv, 0); > - if (l == ULONG_MAX || inv == buf) > - return ULONG_MAX; > + *lp = strtoul(buf, &inv, 0); > + if (inv == buf) > + return -EINVAL; > + > + if (*lp == ULONG_MAX || errno == ERANGE) > + return -ERANGE; > > - return l; > + return 0; > } This is definitely much better but we still can't parse ULONG_MAX as string representative. Checking glibc docs, the only way to do it is to ignore the return value for error checking and look errno. So I guess we should do something like this: errno = 0; *lp = strtoul(buf, &inv, 0); if (*inv != '\0') return -EINVAL; else if (errno) return errno; return 0; -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists