Fix use of uninitialized values, as gilles-chanteperdrix mentionned in https://github.com/gilles-chanteperdrix/uvrrpd/commit/adf9352
This commit is contained in:
parent
f62f405f58
commit
4737ff78cc
12
common.h
12
common.h
|
@ -143,7 +143,7 @@ static inline int split_ip_netmask(int family,
|
|||
char *tmp;
|
||||
unsigned long ul;
|
||||
|
||||
int netmask_length;
|
||||
int netmask_length, err;
|
||||
|
||||
/* IPv4 */
|
||||
if (family == AF_INET)
|
||||
|
@ -159,10 +159,16 @@ static inline int split_ip_netmask(int family,
|
|||
if (tmp != NULL) {
|
||||
*tmp = '\0';
|
||||
++tmp;
|
||||
if (mystrtoul(&ul, tmp, netmask_length) == -ERANGE) {
|
||||
err = mystrtoul(&ul, tmp, netmask_length);
|
||||
if (err == -ERANGE) {
|
||||
log_error("%s", "CIDR netmask out of range");
|
||||
return -ERANGE;
|
||||
return err;
|
||||
}
|
||||
if (err == -EINVAL) {
|
||||
log_error("Error parsing %s as a number", tmp);
|
||||
return err;
|
||||
}
|
||||
|
||||
if (netmask != NULL)
|
||||
*netmask = (uint8_t) ul;
|
||||
}
|
||||
|
|
|
@ -70,7 +70,7 @@ static void vrrp_usage(void)
|
|||
int vrrp_options(struct vrrp *vrrp, struct vrrp_net *vnet, int argc,
|
||||
char *argv[])
|
||||
{
|
||||
int optc;
|
||||
int optc, err;
|
||||
unsigned long opt; /* strtoul */
|
||||
|
||||
static struct option const opts[] = {
|
||||
|
@ -97,12 +97,20 @@ int vrrp_options(struct vrrp *vrrp, struct vrrp_net *vnet, int argc,
|
|||
|
||||
/* vrid */
|
||||
case 'v':
|
||||
if ((mystrtoul(&opt, optarg, VRID_MAX) == -ERANGE)
|
||||
|| (opt == 0)) {
|
||||
err = mystrtoul(&opt, optarg, VRID_MAX);
|
||||
if (err == -ERANGE || (err == 0 && opt == 0)) {
|
||||
fprintf(stderr, "1 < vrid < 255\n");
|
||||
vrrp_usage();
|
||||
return -1;
|
||||
return err;
|
||||
}
|
||||
if (err == -EINVAL) {
|
||||
fprintf(stderr,
|
||||
"Error parsing \"%s\" as a number\n",
|
||||
optarg);
|
||||
vrrp_usage();
|
||||
return err;
|
||||
}
|
||||
|
||||
vrrp->vrid = vnet->vrid = (uint8_t) opt;
|
||||
break;
|
||||
|
||||
|
@ -117,20 +125,38 @@ int vrrp_options(struct vrrp *vrrp, struct vrrp_net *vnet, int argc,
|
|||
|
||||
/* priority */
|
||||
case 'p':
|
||||
if (mystrtoul(&opt, optarg, VRRP_PRIO_MAX) == -ERANGE) {
|
||||
err = mystrtoul(&opt, optarg, VRRP_PRIO_MAX);
|
||||
if (err == -ERANGE) {
|
||||
fprintf(stderr, "0 < priority < 255\n");
|
||||
vrrp_usage();
|
||||
return -1;
|
||||
}
|
||||
if (err == -EINVAL) {
|
||||
fprintf(stderr,
|
||||
"Error parsing \"%s\" as a number\n",
|
||||
optarg);
|
||||
vrrp_usage();
|
||||
return err;
|
||||
}
|
||||
|
||||
vrrp->priority = (uint8_t) opt;
|
||||
break;
|
||||
|
||||
/* delay */
|
||||
case 't':
|
||||
if (mystrtoul(&opt, optarg, ADVINT_MAX) == -ERANGE) {
|
||||
err = mystrtoul(&opt, optarg, ADVINT_MAX);
|
||||
if (err == -ERANGE) {
|
||||
vrrp_usage();
|
||||
return -1;
|
||||
}
|
||||
if (err == -EINVAL) {
|
||||
fprintf(stderr,
|
||||
"Error parsing \"%s\" as a number\n",
|
||||
optarg);
|
||||
vrrp_usage();
|
||||
return err;
|
||||
}
|
||||
|
||||
vrrp->adv_int = (uint16_t) opt;
|
||||
break;
|
||||
|
||||
|
@ -150,12 +176,20 @@ int vrrp_options(struct vrrp *vrrp, struct vrrp_net *vnet, int argc,
|
|||
|
||||
/* RFC - version */
|
||||
case 'r':
|
||||
if ((mystrtoul(&opt, optarg, RFC5798) == -ERANGE)
|
||||
|| (opt < RFC3768)) {
|
||||
fprintf(stderr, "Version 2 or 3 : %ld\n", opt);
|
||||
err = mystrtoul(&opt, optarg, RFC5798);
|
||||
if (err == -ERANGE || (err == 0 && opt < RFC3768)) {
|
||||
fprintf(stderr, "Version 2 or 3 : %s\n", optarg);
|
||||
vrrp_usage();
|
||||
return -1;
|
||||
}
|
||||
if (err == -EINVAL) {
|
||||
fprintf(stderr,
|
||||
"Error parsing \"%s\" as a number\n",
|
||||
optarg);
|
||||
vrrp_usage();
|
||||
return err;
|
||||
}
|
||||
|
||||
vrrp->version = (uint8_t) opt;
|
||||
break;
|
||||
|
||||
|
|
Loading…
Reference in a new issue