Add checks for fgets() when reading proc

If expected proc headers are missing, catch and print error.
This commit is contained in:
Stephen Hemminger 2011-03-09 10:41:09 -08:00 committed by Stephen Hemminger
parent 46dc73a57d
commit 38c867d2a8
4 changed files with 17 additions and 7 deletions

View File

@ -262,8 +262,11 @@ static int do_tunnels_list(struct ip6_tnl_parm *p)
}
/* skip two lines at the begenning of the file */
fgets(buf, sizeof(buf), fp);
fgets(buf, sizeof(buf), fp);
if (!fgets(buf, sizeof(buf), fp) ||
!fgets(buf, sizeof(buf), fp)) {
fprintf(stderr, "/proc/net/dev read error\n");
return -1;
}
while (fgets(buf, sizeof(buf), fp) != NULL) {
char name[IFNAMSIZ];

View File

@ -128,7 +128,8 @@ void read_igmp(struct ma_info **result_p)
if (!fp)
return;
memset(&m, 0, sizeof(m));
fgets(buf, sizeof(buf), fp);
if (!fgets(buf, sizeof(buf), fp))
return;
m.addr.family = AF_INET;
m.addr.bitlen = 32;

View File

@ -58,7 +58,8 @@ static void read_viftable(void)
if (!fp)
return;
fgets(buf, sizeof(buf), fp);
if (!fgets(buf, sizeof(buf), fp))
return;
while (fgets(buf, sizeof(buf), fp)) {
int vifi;
@ -83,7 +84,8 @@ static void read_mroute_list(FILE *ofp)
if (!fp)
return;
fgets(buf, sizeof(buf), fp);
if (!fgets(buf, sizeof(buf), fp))
return;
while (fgets(buf, sizeof(buf), fp)) {
inet_prefix maddr, msrc;

View File

@ -407,8 +407,12 @@ static int do_tunnels_list(struct ip_tunnel_parm *p)
return -1;
}
fgets(buf, sizeof(buf), fp);
fgets(buf, sizeof(buf), fp);
/* skip header lines */
if (!fgets(buf, sizeof(buf), fp) ||
!fgets(buf, sizeof(buf), fp)) {
fprintf(stderr, "/proc/net/dev read error\n");
return -1;
}
while (fgets(buf, sizeof(buf), fp) != NULL) {
int index, type;