Re: [PATCH] bonding: enhance the IP address check of arp_ip_target
Hi, Thank you for the comments. >> Why not just use sscanf? Here's a fixed version of the previous patch, that uses sscanf. > > Better yet, use a better interface like netlink rather than module > parameters. Wouldn't that be overkill? best regards, --- Signed-off-by: Tetsuo Takata <[EMAIL PROTECTED]> --- linux-2.6.17.4/drivers/net/bonding/bond_main.c 2006-06-18 10:49:35.0 +0900 +++ linux-2.6.17.4-enhance-ipcheck/drivers/net/bonding/bond_main.c 2006-07-12 17:20:39.0 +0900 @@ -4455,7 +4455,36 @@ static int bond_check_params(struct bond arp_ip_count++) { /* not complete check, but should be good enough to catch mistakes */ - if (!isdigit(arp_ip_target[arp_ip_count][0])) { + int ip1, ip2, ip3, ip4, notip = 0; + char dummy; + + /* notip's number means error code for debug purpose */ + do { + if (sscanf(arp_ip_target[arp_ip_count], "%d.%d.%d.%d%c", + &ip1, &ip2, &ip3, &ip4, &dummy) != 4) { + notip = 1; + break; + } else { + if (ip1 < 0 || ip1 > 255) { + notip = 1; + break; + } + if (ip2 < 0 || ip2 > 255) { + notip = 1; + break; + } + if (ip3 < 0 || ip3 > 255) { + notip = 1; + break; + } + if (ip4 < 0 || ip4 > 255) { + notip = 1; + break; + } + } + } while(0); + + if (notip) { printk(KERN_WARNING DRV_NAME ": Warning: bad arp_ip_target module parameter " "(%s), ARP monitoring will not be performed\n", - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] bonding: enhance the IP address check of arp_ip_target
Stephen Hemminger <[EMAIL PROTECTED]> wrote: > > Why not just use sscanf? Better yet, use a better interface like netlink rather than module parameters. Cheers, -- Visit Openswan at http://www.openswan.org/ Email: Herbert Xu ~{PmV>HI~} <[EMAIL PROTECTED]> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] bonding: enhance the IP address check of arp_ip_target
On Wed, 12 Jul 2006 13:25:52 +0900 Tetsuo Takata <[EMAIL PROTECTED]> wrote: > Hi, > > > I found this in drivers/net/bonding/bond_main.c. > > /* not complete check, but should be good enough to > > catch mistakes */ > > I made a patch which I believe is little bit better than this, > I hope... > > > best regards, > > --- > Signed-off-by: Tetsuo Takata <[EMAIL PROTECTED]> > > --- linux-2.6.17.3/drivers/net/bonding/bond_main.c2006-07-01 > 02:37:38.0 +0900 > +++ linux-2.6.17.3-bonding-ipcheck/drivers/net/bonding/bond_main.c > 2006-07-12 09:51:12.0 +0900 > @@ -4455,7 +4455,113 @@ static int bond_check_params(struct bond >arp_ip_count++) { > /* not complete check, but should be good enough to > catch mistakes */ > - if (!isdigit(arp_ip_target[arp_ip_count][0])) { > + int i, notip = 0; > + char *cp; > + > + cp = arp_ip_target[arp_ip_count]; > + > + /* notip's number is the error code for debug purpose */ > + do { > + if (cp == NULL) { > + notip = 1; > + break; > + } > + > + /* check digit */ > + for (i = 0; isdigit(*cp); i++) { > + if ((i < 0) || (i >= 3)) { > + notip = 2; > + break; > + } > + cp++; > + } > + if (notip) > + break; > + > + if (i == 0) { > + notip = 3; > + break; > + } > + > + /* check delimiter */ > + if (*cp != '.') { > + notip = 4; > + break; > + } > + cp++; > + > + /* check digit */ > + for (i = 0; isdigit(*cp); i++) { > + if ((i < 0) || (i >= 3)) { > + notip = 5; > + break; > + } > + cp++; > + } > + if (notip) > + break; > + > + if (i == 0) { > + notip = 6; > + break; > + } > + > + /* check delimiter */ > + if (*cp != '.') { > + notip = 7; > + break; > + } > + cp++; > + > + /* check digit */ > + for (i = 0; isdigit(*cp); i++) { > + if ((i < 0) || (i >= 3)) { > + notip = 8; > + break; > + } > + cp++; > + } > + if (notip) > + break; > + > + if (i == 0) { > + notip = 9; > + break; > + } > + > + /* check delimiter */ > + if (*cp != '.') { > + notip = 10; > + break; > + } > + cp++; > + > + /* check digit */ > + for (i = 0; isdigit(*cp); i++) { > + if ((i < 0) || (i >= 3)) { > + notip = 11; > + break; > + } > + cp++; > + } > + if (notip) > + break; > + > + if (i == 0) { > + notip = 12; > + break; > + } > + > + > + /* check EOS */ > + if (*cp != '\0') { > + notip = 13; > + break; > + } > + > + } while(0); > + > + if (notip) { > printk(KERN_WARNING DRV_NAME > ": Warning: bad arp_ip_target module parameter " > "(%s), ARP monitoring will not be performed\n", > > - > To unsubscribe from this list: send the line "unsubscribe netdev" in > the body of a message to [EMAIL PROTECTED] > More majordomo info at http://vger.kernel.org/majordomo-info.html Why not just use sscanf? -- If one would give me six lines written by the hand of th