Matter fix session not being removed from memory (#19081)

* Matter fix session not being removed from memory

* Fix
This commit is contained in:
s-hadinger 2023-07-09 19:36:36 +02:00 committed by GitHub
parent b7c9182c14
commit fcfc3ecb37
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 36 additions and 27 deletions

View File

@ -130,7 +130,7 @@ class Matter_Commisioning_Context
# record the initiator_session_id # record the initiator_session_id
session.__future_initiator_session_id = pbkdfparamreq.initiator_session_id session.__future_initiator_session_id = pbkdfparamreq.initiator_session_id
session.__future_local_session_id = self.device.sessions.gen_local_session_id() session.__future_local_session_id = self.device.sessions.gen_local_session_id()
tasmota.log(format("MTR: New_Session(%6i) from '[%s]:%i'", session.__future_local_session_id, msg.remote_ip, msg.remote_port), 3) tasmota.log(format("MTR: +Session (%6i) from '[%s]:%i'", session.__future_local_session_id, msg.remote_ip, msg.remote_port), 3)
# prepare response # prepare response
var pbkdfparamresp = matter.PBKDFParamResponse() var pbkdfparamresp = matter.PBKDFParamResponse()
@ -370,7 +370,7 @@ class Matter_Commisioning_Context
session.set_mode_CASE() session.set_mode_CASE()
session.__future_initiator_session_id = sigma1.initiator_session_id # update initiator_session_id session.__future_initiator_session_id = sigma1.initiator_session_id # update initiator_session_id
session.__future_local_session_id = self.device.sessions.gen_local_session_id() session.__future_local_session_id = self.device.sessions.gen_local_session_id()
tasmota.log(format("MTR: New_Session(%6i) from '[%s]:%i'", session.__future_local_session_id, msg.remote_ip, msg.remote_port), 3) tasmota.log(format("MTR: +Session (%6i) from '[%s]:%i'", session.__future_local_session_id, msg.remote_ip, msg.remote_port), 3)
# Generate and Send Sigma2_Resume # Generate and Send Sigma2_Resume
session.shared_secret = session_resumption.shared_secret session.shared_secret = session_resumption.shared_secret
@ -458,7 +458,7 @@ class Matter_Commisioning_Context
session.__future_initiator_session_id = sigma1.initiator_session_id # update initiator_session_id session.__future_initiator_session_id = sigma1.initiator_session_id # update initiator_session_id
session.__future_local_session_id = self.device.sessions.gen_local_session_id() session.__future_local_session_id = self.device.sessions.gen_local_session_id()
tasmota.log(format("MTR: New_Session(%6i) from '[%s]:%i'", session.__future_local_session_id, msg.remote_ip, msg.remote_port), 3) tasmota.log(format("MTR: +Session (%6i) from '[%s]:%i'", session.__future_local_session_id, msg.remote_ip, msg.remote_port), 3)
# tasmota.log("MTR: fabric="+matter.inspect(session._fabric), 4) # tasmota.log("MTR: fabric="+matter.inspect(session._fabric), 4)
# tasmota.log("MTR: no_private_key="+session.get_pk().tohex(), 4) # tasmota.log("MTR: no_private_key="+session.get_pk().tohex(), 4)

View File

@ -247,7 +247,9 @@ class Matter_Fabric : Matter_Expirable
def add_session(s) def add_session(s)
if self._sessions.find(s) == nil if self._sessions.find(s) == nil
while size(self._sessions) >= self._MAX_CASE while size(self._sessions) >= self._MAX_CASE
self._sessions.remove(self._sessions.find(self.get_oldest_session())) var session_deleted = self.get_oldest_session()
self._sessions.remove(self._sessions.find(session_deleted))
self._store.remove_session(session_deleted)
end end
self._sessions.push(s) self._sessions.push(s)
end end

View File

@ -286,7 +286,7 @@ be_local_closure(Matter_Commisioning_Context_parse_PBKDFParamRequest, /* name
/* K27 */ be_nested_str_weak(device), /* K27 */ be_nested_str_weak(device),
/* K28 */ be_nested_str_weak(sessions), /* K28 */ be_nested_str_weak(sessions),
/* K29 */ be_nested_str_weak(gen_local_session_id), /* K29 */ be_nested_str_weak(gen_local_session_id),
/* K30 */ be_nested_str_weak(MTR_X3A_X20New_Session_X28_X256i_X29_X20from_X20_X27_X5B_X25s_X5D_X3A_X25i_X27), /* K30 */ be_nested_str_weak(MTR_X3A_X20_X2BSession_X20_X20_X20_X28_X256i_X29_X20from_X20_X27_X5B_X25s_X5D_X3A_X25i_X27),
/* K31 */ be_nested_str_weak(remote_ip), /* K31 */ be_nested_str_weak(remote_ip),
/* K32 */ be_nested_str_weak(remote_port), /* K32 */ be_nested_str_weak(remote_port),
/* K33 */ be_nested_str_weak(PBKDFParamResponse), /* K33 */ be_nested_str_weak(PBKDFParamResponse),
@ -1436,7 +1436,7 @@ be_local_closure(Matter_Commisioning_Context_parse_Sigma1, /* name */
/* K41 */ be_nested_str_weak(initiator_session_id), /* K41 */ be_nested_str_weak(initiator_session_id),
/* K42 */ be_nested_str_weak(__future_local_session_id), /* K42 */ be_nested_str_weak(__future_local_session_id),
/* K43 */ be_nested_str_weak(gen_local_session_id), /* K43 */ be_nested_str_weak(gen_local_session_id),
/* K44 */ be_nested_str_weak(MTR_X3A_X20New_Session_X28_X256i_X29_X20from_X20_X27_X5B_X25s_X5D_X3A_X25i_X27), /* K44 */ be_nested_str_weak(MTR_X3A_X20_X2BSession_X20_X20_X20_X28_X256i_X29_X20from_X20_X27_X5B_X25s_X5D_X3A_X25i_X27),
/* K45 */ be_nested_str_weak(remote_ip), /* K45 */ be_nested_str_weak(remote_ip),
/* K46 */ be_nested_str_weak(remote_port), /* K46 */ be_nested_str_weak(remote_port),
/* K47 */ be_nested_str_weak(resumption_id), /* K47 */ be_nested_str_weak(resumption_id),

View File

@ -151,44 +151,51 @@ be_local_closure(Matter_Fabric_add_session, /* name */
0, /* has sup protos */ 0, /* has sup protos */
NULL, /* no sub protos */ NULL, /* no sub protos */
1, /* has constants */ 1, /* has constants */
( &(const bvalue[ 6]) { /* constants */ ( &(const bvalue[ 8]) { /* constants */
/* K0 */ be_nested_str_weak(_sessions), /* K0 */ be_nested_str_weak(_sessions),
/* K1 */ be_nested_str_weak(find), /* K1 */ be_nested_str_weak(find),
/* K2 */ be_nested_str_weak(_MAX_CASE), /* K2 */ be_nested_str_weak(_MAX_CASE),
/* K3 */ be_nested_str_weak(remove), /* K3 */ be_nested_str_weak(get_oldest_session),
/* K4 */ be_nested_str_weak(get_oldest_session), /* K4 */ be_nested_str_weak(remove),
/* K5 */ be_nested_str_weak(push), /* K5 */ be_nested_str_weak(_store),
/* K6 */ be_nested_str_weak(remove_session),
/* K7 */ be_nested_str_weak(push),
}), }),
be_str_weak(add_session), be_str_weak(add_session),
&be_const_str_solidified, &be_const_str_solidified,
( &(const binstruction[27]) { /* code */ ( &(const binstruction[32]) { /* code */
0x88080100, // 0000 GETMBR R2 R0 K0 0x88080100, // 0000 GETMBR R2 R0 K0
0x8C080501, // 0001 GETMET R2 R2 K1 0x8C080501, // 0001 GETMET R2 R2 K1
0x5C100200, // 0002 MOVE R4 R1 0x5C100200, // 0002 MOVE R4 R1
0x7C080400, // 0003 CALL R2 2 0x7C080400, // 0003 CALL R2 2
0x4C0C0000, // 0004 LDNIL R3 0x4C0C0000, // 0004 LDNIL R3
0x1C080403, // 0005 EQ R2 R2 R3 0x1C080403, // 0005 EQ R2 R2 R3
0x780A0012, // 0006 JMPF R2 #001A 0x780A0017, // 0006 JMPF R2 #001F
0x6008000C, // 0007 GETGBL R2 G12 0x6008000C, // 0007 GETGBL R2 G12
0x880C0100, // 0008 GETMBR R3 R0 K0 0x880C0100, // 0008 GETMBR R3 R0 K0
0x7C080200, // 0009 CALL R2 1 0x7C080200, // 0009 CALL R2 1
0x880C0102, // 000A GETMBR R3 R0 K2 0x880C0102, // 000A GETMBR R3 R0 K2
0x28080403, // 000B GE R2 R2 R3 0x28080403, // 000B GE R2 R2 R3
0x780A0008, // 000C JMPF R2 #0016 0x780A000D, // 000C JMPF R2 #001B
0x88080100, // 000D GETMBR R2 R0 K0 0x8C080103, // 000D GETMET R2 R0 K3
0x8C080503, // 000E GETMET R2 R2 K3 0x7C080200, // 000E CALL R2 1
0x88100100, // 000F GETMBR R4 R0 K0 0x880C0100, // 000F GETMBR R3 R0 K0
0x8C100901, // 0010 GETMET R4 R4 K1 0x8C0C0704, // 0010 GETMET R3 R3 K4
0x8C180104, // 0011 GETMET R6 R0 K4 0x88140100, // 0011 GETMBR R5 R0 K0
0x7C180200, // 0012 CALL R6 1 0x8C140B01, // 0012 GETMET R5 R5 K1
0x7C100400, // 0013 CALL R4 2 0x5C1C0400, // 0013 MOVE R7 R2
0x7C080400, // 0014 CALL R2 2 0x7C140400, // 0014 CALL R5 2
0x7001FFF0, // 0015 JMP #0007 0x7C0C0400, // 0015 CALL R3 2
0x88080100, // 0016 GETMBR R2 R0 K0 0x880C0105, // 0016 GETMBR R3 R0 K5
0x8C080505, // 0017 GETMET R2 R2 K5 0x8C0C0706, // 0017 GETMET R3 R3 K6
0x5C100200, // 0018 MOVE R4 R1 0x5C140400, // 0018 MOVE R5 R2
0x7C080400, // 0019 CALL R2 2 0x7C0C0400, // 0019 CALL R3 2
0x80000000, // 001A RET 0 0x7001FFEB, // 001A JMP #0007
0x88080100, // 001B GETMBR R2 R0 K0
0x8C080507, // 001C GETMET R2 R2 K7
0x5C100200, // 001D MOVE R4 R1
0x7C080400, // 001E CALL R2 2
0x80000000, // 001F RET 0
}) })
) )
); );