From 1350f8d1c19c6010b3b531f6203b2016aa71ce33 Mon Sep 17 00:00:00 2001 From: David Lamparter Date: Wed, 16 Oct 2024 12:52:48 +0200 Subject: [PATCH] zebra: don't try to read past EOF `FILE *` objects are theoretically in an invalid state if you try to use them past their reporting EOF. Adjust the code to make it correct. Signed-off-by: David Lamparter --- zebra/ipforward_proc.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/zebra/ipforward_proc.c b/zebra/ipforward_proc.c index 08fbfede42..0eae221e1e 100644 --- a/zebra/ipforward_proc.c +++ b/zebra/ipforward_proc.c @@ -17,10 +17,15 @@ extern struct zebra_privs_t zserv_privs; static const char proc_net_snmp[] = "/proc/net/snmp"; -static void dropline(FILE *fp) +static bool dropline(FILE *fp) { - while (getc(fp) != '\n') - ; + int ch; + + do { + ch = getc(fp); + } while (ch != EOF && ch != '\n'); + + return ch != EOF; } int ipforward(void) @@ -36,7 +41,10 @@ int ipforward(void) return -1; /* We don't care about the first line. */ - dropline(fp); + if (!dropline(fp)) { + fclose(fp); + return 0; + } /* Get ip_statistics.IpForwarding : 1 => ip forwarding enabled