diff --git a/src/npf/npf_pack.c b/src/npf/npf_pack.c index 9de5c0ca..f8e524ea 100644 --- a/src/npf/npf_pack.c +++ b/src/npf/npf_pack.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2020, AT&T Intellectual Property. All rights reserved. + * Copyright (c) 2019-2021, AT&T Intellectual Property. All rights reserved. * * SPDX-License-Identifier: LGPL-2.1-only */ @@ -298,6 +298,7 @@ static int npf_pack_session_pack_new(struct session *s, struct npf_pack_session_new *csn_peer; struct session *s_peer = NULL; struct npf_session *se_peer = NULL; + struct sentry *sen; npf_session_t *se; int rc; @@ -306,7 +307,11 @@ static int npf_pack_session_pack_new(struct session *s, if (!s || !csn) return -EINVAL; - se = session_feature_get(s, s->se_sen->sen_ifindex, + sen = rcu_dereference(s->se_sen); + if (!sen) + return -ENOENT; + + se = session_feature_get(s, sen->sen_ifindex, SESSION_FEATURE_NPF); if (!se) return -ENOENT; diff --git a/src/npf/npf_unpack.c b/src/npf/npf_unpack.c index 62a21627..4933758b 100644 --- a/src/npf/npf_unpack.c +++ b/src/npf/npf_unpack.c @@ -25,6 +25,7 @@ static int npf_pack_get_session_from_init_sentry(struct sentry_packet *sp, { struct npf_session *se; struct session *s; + struct sentry *sen; bool forw; int rc; @@ -35,8 +36,11 @@ static int npf_pack_get_session_from_init_sentry(struct sentry_packet *sp, if (rc) return rc; - se = session_feature_get(s, s->se_sen->sen_ifindex, - SESSION_FEATURE_NPF); + sen = rcu_dereference(s->se_sen); + if (!sen) + return -ENOENT; + + se = session_feature_get(s, sen->sen_ifindex, SESSION_FEATURE_NPF); if (!se) return -ENOENT;