• Jon Paul Maloy's avatar
    tipc: avoid inheriting msg_non_seq flag when message is returned · 59a361bc
    Jon Paul Maloy authored
    In the function msg_reverse(), we reverse the header while trying to
    reuse the original buffer whenever possible. Those rejected/returned
    messages are always transmitted as unicast, but the msg_non_seq field
    is not explicitly set to zero as it should be.
    
    We have seen cases where multicast senders set the message type to
    "NOT dest_droppable", meaning that a multicast message shorter than
    one MTU will be returned, e.g., during receive buffer overflow, by
    reusing the original buffer. This has the effect that even the
    'msg_non_seq' field is inadvertently inherited by the rejected message,
    although it is now sent as a unicast message. This again leads the
    receiving unicast link endpoint to steer the packet toward the broadcast
    link receive function, where it is dropped. The affected unicast link is
    thereafter (after 100 failed retransmissions) declared 'stale' and
    reset.
    
    We fix this by unconditionally setting the 'msg_non_seq' flag to zero
    for all rejected/returned messages.
    Reported-by: default avatarCanh Duc Luu <canh.d.luu@dektech.com.au>
    Signed-off-by: default avatarJon Maloy <jon.maloy@ericsson.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    59a361bc
msg.c 17.5 KB