]> git.baikalelectronics.ru Git - kernel.git/commit
tipc: fix bug in broadcast retransmit code
authorJon Paul Maloy <jon.maloy@ericsson.com>
Thu, 8 Jan 2015 17:27:27 +0000 (12:27 -0500)
committerDavid S. Miller <davem@davemloft.net>
Mon, 12 Jan 2015 21:01:59 +0000 (16:01 -0500)
commit33832ebcd538703e6d61841039f944f724609ad7
tree70fc9769b1af13d6e604d02d442c58bd57a3a483
parent213f6f1fe25e2e8f72691e7ab5122cad13cc4601
tipc: fix bug in broadcast retransmit code

In commit 917934664739cc3a3e7510e5bd7176202c797c51 ("tipc: use generic
SKB list APIs to manage link transmission queue") we replace all list
traversal loops with the macros skb_queue_walk() or
skb_queue_walk_safe(). While the previous loops were based on the
assumption that the list was NULL-terminated, the standard macros
stop when the iterator reaches the list head, which is non-NULL.

In the function bclink_retransmit_pkt() this macro replacement has
lead to a bug. When we receive a BCAST STATE_MSG we unconditionally
call the function bclink_retransmit_pkt(), whether there really is
anything to retransmit or not, assuming that the sequence number
comparisons will lead to the correct behavior. However, if the
transmission queue is empty, or if there are no eligible buffers in
the transmission queue, we will by mistake pass the list head pointer
to the function tipc_link_retransmit(). Since the list head is not a
valid sk_buff, this leads to a crash.

In this commit we fix this by only calling tipc_link_retransmit()
if we actually found eligible buffers in the transmission queue.

Reviewed-by: Ying Xue <ying.xue@windriver.com>
Signed-off-by: Jon Maloy <jon.maloy@ericsson.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/tipc/bcast.c