From dfe6f41c81d974bd9fbe301e63218ea149973bbc Mon Sep 17 00:00:00 2001 From: Neels Hofmeyr Date: Mon, 4 May 2020 17:31:15 +0200 Subject: [PATCH] osmo_gsup_req_new(): require from_peer != NULL In practice, from_peer is always non-NULL, yet some conditions checked against NULL, looking like a possible NULL deref. Require non-NULL. Related: coverity CID#210172 Change-Id: I3cb73ec0d31f84d4b613ecb026169c944d240e4c --- src/gsupclient/gsup_req.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/gsupclient/gsup_req.c b/src/gsupclient/gsup_req.c index a8a66d5a..2e7caf1e 100644 --- a/src/gsupclient/gsup_req.c +++ b/src/gsupclient/gsup_req.c @@ -107,6 +107,12 @@ struct osmo_gsup_req *osmo_gsup_req_new(void *ctx, const struct osmo_cni_peer_id struct osmo_gsup_req *req; int rc; + if (!from_peer) { + LOGP(DLGSUP, LOGL_ERROR, "Rx GSUP from NULL peer is not allowed\n"); + msgb_free(msg); + return NULL; + } + if (!msgb_l2(msg) || !msgb_l2len(msg)) { LOGP(DLGSUP, LOGL_ERROR, "Rx GSUP from %s: missing or empty L2 data\n", osmo_cni_peer_id_to_str(from_peer)); @@ -121,8 +127,7 @@ struct osmo_gsup_req *osmo_gsup_req_new(void *ctx, const struct osmo_cni_peer_id req->msg = msg; req->send_response_cb = send_response_cb; req->cb_data = cb_data; - if (from_peer) - req->source_name = *from_peer; + req->source_name = *from_peer; rc = osmo_gsup_decode(msgb_l2(req->msg), msgb_l2len(req->msg), (struct osmo_gsup_message*)&req->gsup); if (rc < 0) { LOGP(DLGSUP, LOGL_ERROR, "Rx GSUP from %s: cannot decode (rc=%d)\n", osmo_cni_peer_id_to_str(from_peer), rc);