Skip to content

Commit d876a4d

Browse files
Jon Paul Maloydavem330
authored andcommitted
tipc: improve sanity check for received domain records
In commit 35c55c9 ("tipc: add neighbor monitoring framework") we added a data area to the link monitor STATE messages under the assumption that previous versions did not use any such data area. For versions older than Linux 4.3 this assumption is not correct. In those version, all STATE messages sent out from a node inadvertently contain a 16 byte data area containing a string; -a leftover from previous RESET messages which were using this during the setup phase. This string serves no purpose in STATE messages, and should no be there. Unfortunately, this data area is delivered to the link monitor framework, where a sanity check catches that it is not a correct domain record, and drops it. It also issues a rate limited warning about the event. Since such events occur much more frequently than anticipated, we now choose to remove the warning in order to not fill the kernel log with useless contents. We also make the sanity check stricter, to further reduce the risk that such data is inavertently admitted. Signed-off-by: Jon Maloy <jon.maloy@ericsson.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent f796755 commit d876a4d

1 file changed

Lines changed: 5 additions & 5 deletions

File tree

net/tipc/monitor.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -455,14 +455,14 @@ void tipc_mon_rcv(struct net *net, void *data, u16 dlen, u32 addr,
455455
int i, applied_bef;
456456

457457
state->probing = false;
458-
if (!dlen)
459-
return;
460458

461459
/* Sanity check received domain record */
462-
if ((dlen < new_dlen) || ntohs(arrv_dom->len) != new_dlen) {
463-
pr_warn_ratelimited("Received illegal domain record\n");
460+
if (dlen < dom_rec_len(arrv_dom, 0))
461+
return;
462+
if (dlen != dom_rec_len(arrv_dom, new_member_cnt))
463+
return;
464+
if ((dlen < new_dlen) || ntohs(arrv_dom->len) != new_dlen)
464465
return;
465-
}
466466

467467
/* Synch generation numbers with peer if link just came up */
468468
if (!state->synched) {

0 commit comments

Comments
 (0)