mirror of
https://github.com/openvswitch/ovs
synced 2025-08-31 06:15:47 +00:00
ofp-parse: Check ranges on string to uint32_t conversion.
An unnecessarily overflow would occurs when the 'value' is longer than 4294967295. So it's required to check ranges to avoid uint32_t overflow. Reported-by: Nan Zhou <zhounan14@huawei.com> Acked-by: Eelco Chaudron <echaudro@redhat.com> Reviewed-by: Simon Horman <simon.horman@corigine.com> Signed-off-by: Yunjian Wang <wangyunjian@huawei.com> Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
This commit is contained in:
committed by
Ilya Maximets
parent
3fa0fc5824
commit
8d59ab31d2
@@ -71,16 +71,13 @@ str_to_u16(const char *str, const char *name, uint16_t *valuep)
|
||||
char * OVS_WARN_UNUSED_RESULT
|
||||
str_to_u32(const char *str, uint32_t *valuep)
|
||||
{
|
||||
char *tail;
|
||||
uint32_t value;
|
||||
unsigned long long value;
|
||||
|
||||
if (!str[0]) {
|
||||
return xstrdup("missing required numeric argument");
|
||||
}
|
||||
|
||||
errno = 0;
|
||||
value = strtoul(str, &tail, 0);
|
||||
if (errno == EINVAL || errno == ERANGE || *tail) {
|
||||
if (!str_to_ullong(str, 0, &value) || value > UINT32_MAX) {
|
||||
return xasprintf("invalid numeric format %s", str);
|
||||
}
|
||||
*valuep = value;
|
||||
|
Reference in New Issue
Block a user