diff options
Diffstat (limited to 'net/tipc/link.c')
| -rw-r--r-- | net/tipc/link.c | 9 | 
1 files changed, 6 insertions, 3 deletions
diff --git a/net/tipc/link.c b/net/tipc/link.c index b3ce24823f50..2eff1c7949cb 100644 --- a/net/tipc/link.c +++ b/net/tipc/link.c @@ -2200,7 +2200,7 @@ static int tipc_link_proto_rcv(struct tipc_link *l, struct sk_buff *skb,  	struct tipc_msg *hdr = buf_msg(skb);  	struct tipc_gap_ack_blks *ga = NULL;  	bool reply = msg_probe(hdr), retransmitted = false; -	u32 dlen = msg_data_sz(hdr), glen = 0; +	u32 dlen = msg_data_sz(hdr), glen = 0, msg_max;  	u16 peers_snd_nxt =  msg_next_sent(hdr);  	u16 peers_tol = msg_link_tolerance(hdr);  	u16 peers_prio = msg_linkprio(hdr); @@ -2239,6 +2239,9 @@ static int tipc_link_proto_rcv(struct tipc_link *l, struct sk_buff *skb,  	switch (mtyp) {  	case RESET_MSG:  	case ACTIVATE_MSG: +		msg_max = msg_max_pkt(hdr); +		if (msg_max < tipc_bearer_min_mtu(l->net, l->bearer_id)) +			break;  		/* Complete own link name with peer's interface name */  		if_name =  strrchr(l->name, ':') + 1;  		if (sizeof(l->name) - (if_name - l->name) <= TIPC_MAX_IF_NAME) @@ -2283,8 +2286,8 @@ static int tipc_link_proto_rcv(struct tipc_link *l, struct sk_buff *skb,  		l->peer_session = msg_session(hdr);  		l->in_session = true;  		l->peer_bearer_id = msg_bearer_id(hdr); -		if (l->mtu > msg_max_pkt(hdr)) -			l->mtu = msg_max_pkt(hdr); +		if (l->mtu > msg_max) +			l->mtu = msg_max;  		break;  	case STATE_MSG:  | 
