aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAllan Stephens <allan.stephens@windriver.com>2008-06-04 20:36:58 -0400
committerDavid S. Miller <davem@davemloft.net>2008-06-04 20:36:58 -0400
commit9c396a7bfb4fe74e444be09069651280da520944 (patch)
treee0cffbc27f334c928221aef12279045149173546
parent1265a02108c508b508112cdeac922aad03e0146a (diff)
tipc: Prevent access of non-existent field in short message header
This patch eliminates a case where TIPC's link code could try reading a field that is not present in a short message header. (The random value obtained was not being used, but the read operation could result in an invalid memory access exception in extremely rare circumstances.) Signed-off-by: Allan Stephens <allan.stephens@windriver.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--net/tipc/link.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/net/tipc/link.c b/net/tipc/link.c
index c62ebfea9304..022cb2f107ac 100644
--- a/net/tipc/link.c
+++ b/net/tipc/link.c
@@ -2674,10 +2674,12 @@ int tipc_link_send_long_buf(struct link *l_ptr, struct sk_buff *buf)
2674 u32 pack_sz = link_max_pkt(l_ptr); 2674 u32 pack_sz = link_max_pkt(l_ptr);
2675 u32 fragm_sz = pack_sz - INT_H_SIZE; 2675 u32 fragm_sz = pack_sz - INT_H_SIZE;
2676 u32 fragm_no = 1; 2676 u32 fragm_no = 1;
2677 u32 destaddr = msg_destnode(inmsg); 2677 u32 destaddr;
2678 2678
2679 if (msg_short(inmsg)) 2679 if (msg_short(inmsg))
2680 destaddr = l_ptr->addr; 2680 destaddr = l_ptr->addr;
2681 else
2682 destaddr = msg_destnode(inmsg);
2681 2683
2682 if (msg_routed(inmsg)) 2684 if (msg_routed(inmsg))
2683 msg_set_prevnode(inmsg, tipc_own_addr); 2685 msg_set_prevnode(inmsg, tipc_own_addr);