[prev in list] [next in list] [prev in thread] [next in thread] 

List:       linux-ha-dev
Subject:    [Linux-ha-dev] [patch 4/5] Handle scanf failures in scan_if()
From:       Horms <horms () verge ! net ! au>
Date:       2007-04-19 8:19:27
Message-ID: 20070419082924.052177513 () verge ! net ! au
[Download RAW message or body]

If for some reason the file being scanned is malformed, or
overflows one of the feilds for some reason, scanf will neither
return EOF nor fill in all of its parameters correctly. In the
case that I observed this resulted in an endless loop.

This simple fix just bails out in this case.

Index: lha-STABLE_1_2-ipv6addr/heartbeat/resource.d/IPv6addr.c
===================================================================
--- lha-STABLE_1_2-ipv6addr.orig/heartbeat/resource.d/IPv6addr.c	2007-04-19 12:43:15.000000000 +0900
+++ lha-STABLE_1_2-ipv6addr/heartbeat/resource.d/IPv6addr.c	2007-04-19 13:31:58.000000000 +0900
@@ -378,16 +378,26 @@ find_if(struct in6_addr* addr_target, in
 	}
 
 	/* Loop for each entry */
-	while ( fscanf(f,"%4s%4s%4s%4s%4s%4s%4s%4s %02x %02x %02x %02x %20s\n",
-			addr6p[0], addr6p[1], addr6p[2], addr6p[3],
-			addr6p[4], addr6p[5], addr6p[6], addr6p[7],
-			&if_idx, &plen, &scope, &dad_status, devname) != EOF){
-
+	while (1) {
 		int		i;
 		int		n;
 		int		s;
 		gboolean	same = TRUE;
 
+		i = fscanf(f,
+		       "%4s%4s%4s%4s%4s%4s%4s%4s %02x %02x %02x %02x %20s\n",
+	       	       addr6p[0], addr6p[1], addr6p[2], addr6p[3],
+       		       addr6p[4], addr6p[5], addr6p[6], addr6p[7],
+		       &if_idx, &plen, &scope, &dad_status, devname);
+		if (i == EOF) {
+			break;
+		}
+		else if (i != 13) {
+			cl_log(LOG_INFO, "Error parsing %s, "
+			       "perhaps the format has changed\n", IF_INET6);
+			break;
+		}
+
 		sprintf(addr6, "%s:%s:%s:%s:%s:%s:%s:%s",
 			addr6p[0], addr6p[1], addr6p[2], addr6p[3],
 			addr6p[4], addr6p[5], addr6p[6], addr6p[7]);

-- 

-- 
Horms
  H: http://www.vergenet.net/~horms/
  W: http://www.valinux.co.jp/en/

_______________________________________________________
Linux-HA-Dev: Linux-HA-Dev@lists.linux-ha.org
http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
Home Page: http://linux-ha.org/
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic