Skip to content

Commit 1174bdc

Browse files
Fix initialization-order-fiasco (#32854)
* Fix initialization-order-fiasco * Restyled by clang-format * Fix pointer declaration * Restyled by clang-format * Do not set mLocalMRPConfig in PairingSession constructor * Revert "Restyled by clang-format" This reverts commit 7b9c3a7. * Revert "Fix pointer declaration" This reverts commit d5282f6. * Revert "Restyled by clang-format" This reverts commit d73e6e1. * Revert "Fix initialization-order-fiasco" This reverts commit e9510a2. * Add missing MakeOptional --------- Co-authored-by: Restyled.io <commits@restyled.io>
1 parent 2495011 commit 1174bdc

File tree

3 files changed

+16
-10
lines changed

3 files changed

+16
-10
lines changed

src/protocols/secure_channel/CASESession.cpp

+8-5
Original file line numberDiff line numberDiff line change
@@ -477,7 +477,7 @@ CASESession::PrepareForSessionEstablishment(SessionManager & sessionManager, Fab
477477
mFabricsTable = fabricTable;
478478
mRole = CryptoContext::SessionRole::kResponder;
479479
mSessionResumptionStorage = sessionResumptionStorage;
480-
mLocalMRPConfig = mrpLocalConfig.ValueOr(GetDefaultMRPConfig());
480+
mLocalMRPConfig = MakeOptional(mrpLocalConfig.ValueOr(GetDefaultMRPConfig()));
481481

482482
ChipLogDetail(SecureChannel, "Allocated SecureSession (%p) - waiting for Sigma1 msg",
483483
mSecureSessionHolder.Get().Value()->AsSecureSession());
@@ -525,7 +525,7 @@ CHIP_ERROR CASESession::EstablishSession(SessionManager & sessionManager, Fabric
525525
mFabricsTable = fabricTable;
526526
mFabricIndex = fabricInfo->GetFabricIndex();
527527
mSessionResumptionStorage = sessionResumptionStorage;
528-
mLocalMRPConfig = mrpLocalConfig.ValueOr(GetDefaultMRPConfig());
528+
mLocalMRPConfig = MakeOptional(mrpLocalConfig.ValueOr(GetDefaultMRPConfig()));
529529

530530
mExchangeCtxt.Value()->UseSuggestedResponseTimeout(kExpectedSigma1ProcessingTime);
531531
mPeerNodeId = peerScopedNodeId.GetNodeId();
@@ -708,7 +708,8 @@ CHIP_ERROR CASESession::SendSigma1()
708708
ReturnErrorOnFailure(
709709
tlvWriter.PutBytes(TLV::ContextTag(4), mEphemeralKey->Pubkey(), static_cast<uint32_t>(mEphemeralKey->Pubkey().Length())));
710710

711-
ReturnErrorOnFailure(EncodeSessionParameters(TLV::ContextTag(5), mLocalMRPConfig, tlvWriter));
711+
VerifyOrReturnError(mLocalMRPConfig.HasValue(), CHIP_ERROR_INCORRECT_STATE);
712+
ReturnErrorOnFailure(EncodeSessionParameters(TLV::ContextTag(5), mLocalMRPConfig.Value(), tlvWriter));
712713

713714
// Try to find persistent session, and resume it.
714715
bool resuming = false;
@@ -955,7 +956,8 @@ CHIP_ERROR CASESession::SendSigma2Resume()
955956

956957
ReturnErrorOnFailure(tlvWriter.Put(TLV::ContextTag(3), GetLocalSessionId().Value()));
957958

958-
ReturnErrorOnFailure(EncodeSessionParameters(TLV::ContextTag(4), mLocalMRPConfig, tlvWriter));
959+
VerifyOrReturnError(mLocalMRPConfig.HasValue(), CHIP_ERROR_INCORRECT_STATE);
960+
ReturnErrorOnFailure(EncodeSessionParameters(TLV::ContextTag(4), mLocalMRPConfig.Value(), tlvWriter));
959961

960962
ReturnErrorOnFailure(tlvWriter.EndContainer(outerContainerType));
961963
ReturnErrorOnFailure(tlvWriter.Finalize(&msg_R2_resume));
@@ -1091,7 +1093,8 @@ CHIP_ERROR CASESession::SendSigma2()
10911093
ReturnErrorOnFailure(tlvWriterMsg2.PutBytes(TLV::ContextTag(4), msg_R2_Encrypted.Get(),
10921094
static_cast<uint32_t>(msg_r2_signed_enc_len + CHIP_CRYPTO_AEAD_MIC_LENGTH_BYTES)));
10931095

1094-
ReturnErrorOnFailure(EncodeSessionParameters(TLV::ContextTag(5), mLocalMRPConfig, tlvWriterMsg2));
1096+
VerifyOrReturnError(mLocalMRPConfig.HasValue(), CHIP_ERROR_INCORRECT_STATE);
1097+
ReturnErrorOnFailure(EncodeSessionParameters(TLV::ContextTag(5), mLocalMRPConfig.Value(), tlvWriterMsg2));
10951098

10961099
ReturnErrorOnFailure(tlvWriterMsg2.EndContainer(outerContainerType));
10971100
ReturnErrorOnFailure(tlvWriterMsg2.Finalize(&msg_R2));

src/protocols/secure_channel/PASESession.cpp

+6-4
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ CHIP_ERROR PASESession::WaitForPairing(SessionManager & sessionManager, const Sp
195195
mIterationCount = pbkdf2IterCount;
196196
mNextExpectedMsg.SetValue(MsgType::PBKDFParamRequest);
197197
mPairingComplete = false;
198-
mLocalMRPConfig = mrpLocalConfig.ValueOr(GetDefaultMRPConfig());
198+
mLocalMRPConfig = MakeOptional(mrpLocalConfig.ValueOr(GetDefaultMRPConfig()));
199199

200200
ChipLogDetail(SecureChannel, "Waiting for PBKDF param request");
201201

@@ -225,7 +225,7 @@ CHIP_ERROR PASESession::Pair(SessionManager & sessionManager, uint32_t peerSetUp
225225

226226
mExchangeCtxt.Value()->UseSuggestedResponseTimeout(kExpectedLowProcessingTime);
227227

228-
mLocalMRPConfig = mrpLocalConfig.ValueOr(GetDefaultMRPConfig());
228+
mLocalMRPConfig = MakeOptional(mrpLocalConfig.ValueOr(GetDefaultMRPConfig()));
229229

230230
err = SendPBKDFParamRequest();
231231
SuccessOrExit(err);
@@ -300,7 +300,8 @@ CHIP_ERROR PASESession::SendPBKDFParamRequest()
300300
ReturnErrorOnFailure(tlvWriter.Put(TLV::ContextTag(3), kDefaultCommissioningPasscodeId));
301301
ReturnErrorOnFailure(tlvWriter.PutBoolean(TLV::ContextTag(4), mHavePBKDFParameters));
302302

303-
ReturnErrorOnFailure(EncodeSessionParameters(TLV::ContextTag(5), mLocalMRPConfig, tlvWriter));
303+
VerifyOrReturnError(mLocalMRPConfig.HasValue(), CHIP_ERROR_INCORRECT_STATE);
304+
ReturnErrorOnFailure(EncodeSessionParameters(TLV::ContextTag(5), mLocalMRPConfig.Value(), tlvWriter));
304305

305306
ReturnErrorOnFailure(tlvWriter.EndContainer(outerContainerType));
306307
ReturnErrorOnFailure(tlvWriter.Finalize(&req));
@@ -420,7 +421,8 @@ CHIP_ERROR PASESession::SendPBKDFParamResponse(ByteSpan initiatorRandom, bool in
420421
ReturnErrorOnFailure(tlvWriter.EndContainer(pbkdfParamContainer));
421422
}
422423

423-
ReturnErrorOnFailure(EncodeSessionParameters(TLV::ContextTag(5), mLocalMRPConfig, tlvWriter));
424+
VerifyOrReturnError(mLocalMRPConfig.HasValue(), CHIP_ERROR_INCORRECT_STATE);
425+
ReturnErrorOnFailure(EncodeSessionParameters(TLV::ContextTag(5), mLocalMRPConfig.Value(), tlvWriter));
424426

425427
ReturnErrorOnFailure(tlvWriter.EndContainer(outerContainerType));
426428
ReturnErrorOnFailure(tlvWriter.Finalize(&resp));

src/protocols/secure_channel/PairingSession.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,8 @@ class DLL_EXPORT PairingSession : public SessionDelegate
244244

245245
// mLocalMRPConfig is our config which is sent to the other end and used by the peer session.
246246
// mRemoteSessionParams is received from other end and set to our session.
247-
ReliableMessageProtocolConfig mLocalMRPConfig = GetLocalMRPConfig().ValueOr(GetDefaultMRPConfig());
247+
// It is set the first time that session establishment is initiated.
248+
Optional<ReliableMessageProtocolConfig> mLocalMRPConfig;
248249
SessionParameters mRemoteSessionParams;
249250

250251
private:

0 commit comments

Comments
 (0)