From 614a0f861301788f0743ef6ad1c720b8e59d53ba Mon Sep 17 00:00:00 2001 From: Emanuele Di Pascale Date: Tue, 18 Jun 2019 15:47:02 +0200 Subject: [PATCH] zebra: fix label manager EAGAIN error when receiving an EAGAIN while trying to read the header of a ZAPI message, we were erroneously continuing as if everything was fine, which could crash zebra. Fix this by returning and letting the re-armed read task deal with this Signed-off-by: Emanuele Di Pascale --- zebra/label_manager.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/zebra/label_manager.c b/zebra/label_manager.c index 16d45836e0..8295e461cc 100644 --- a/zebra/label_manager.c +++ b/zebra/label_manager.c @@ -75,6 +75,10 @@ static int relay_response_back(void) unsigned short instance; struct zserv *zserv; + /* sanity */ + if (!zclient || zclient->sock < 0) + return -1; + /* input buffer with msg from label manager */ src = zclient->ibuf; @@ -83,10 +87,11 @@ static int relay_response_back(void) /* parse header */ ret = zclient_read_header(src, zclient->sock, &size, &marker, &version, &vrf_id, &resp_cmd); - if (ret < 0 && errno != EAGAIN) { - flog_err(EC_ZEBRA_LM_RESPONSE, - "Error reading Label Manager response: %s", - strerror(errno)); + if (ret < 0) { + if (errno != EAGAIN) + flog_err(EC_ZEBRA_LM_RESPONSE, + "Error reading Label Manager response: %s", + strerror(errno)); return -1; }