linma / rpms / iproute

Forked from rpms/iproute 4 years ago
Clone

Blame SOURCES/0050-iproute-Abort-if-nexthop-cannot-be-parsed.patch

318a74
From d80837df37cb8897769f87f7a2034a9653168221 Mon Sep 17 00:00:00 2001
318a74
From: Phil Sutter <psutter@redhat.com>
318a74
Date: Thu, 21 Feb 2019 14:38:57 +0100
318a74
Subject: [PATCH] iproute: Abort if nexthop cannot be parsed
318a74
318a74
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1624656
318a74
Upstream Status: iproute2.git commit ee53b42fd8b0b
318a74
318a74
commit ee53b42fd8b0b0cdb857d0f5bf7467e22a3457d9
318a74
Author: Jakub Sitnicki <jkbs@redhat.com>
318a74
Date:   Wed Apr 11 11:43:11 2018 +0200
318a74
318a74
    iproute: Abort if nexthop cannot be parsed
318a74
318a74
    Attempt to add a multipath route where a nexthop definition refers to a
318a74
    non-existent device causes 'ip' to crash and burn due to stack buffer
318a74
    overflow:
318a74
318a74
      # ip -6 route add fd00::1/64 nexthop dev fake1
318a74
      Cannot find device "fake1"
318a74
      Cannot find device "fake1"
318a74
      Cannot find device "fake1"
318a74
      ...
318a74
      Segmentation fault (core dumped)
318a74
318a74
    Don't ignore errors from the helper routine that parses the nexthop
318a74
    definition, and abort immediately if parsing fails.
318a74
318a74
    Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
318a74
---
318a74
 ip/iproute.c | 5 ++++-
318a74
 1 file changed, 4 insertions(+), 1 deletion(-)
318a74
318a74
diff --git a/ip/iproute.c b/ip/iproute.c
318a74
index 35fdce8..759032d 100644
318a74
--- a/ip/iproute.c
318a74
+++ b/ip/iproute.c
318a74
@@ -817,7 +817,10 @@ static int parse_nexthops(struct nlmsghdr *n, struct rtmsg *r,
318a74
 		memset(rtnh, 0, sizeof(*rtnh));
318a74
 		rtnh->rtnh_len = sizeof(*rtnh);
318a74
 		rta->rta_len += rtnh->rtnh_len;
318a74
-		parse_one_nh(n, r, rta, rtnh, &argc, &argv);
318a74
+		if (parse_one_nh(n, r, rta, rtnh, &argc, &argv)) {
318a74
+			fprintf(stderr, "Error: cannot parse nexthop\n");
318a74
+			exit(-1);
318a74
+		}
318a74
 		rtnh = RTNH_NEXT(rtnh);
318a74
 	}
318a74
 
318a74
-- 
318a74
1.8.3.1
318a74