diff options
author | Allan Stephens <allan.stephens@windriver.com> | 2008-06-04 20:36:58 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-06-04 20:36:58 -0400 |
commit | 9c396a7bfb4fe74e444be09069651280da520944 (patch) | |
tree | e0cffbc27f334c928221aef12279045149173546 /net/tipc/link.c | |
parent | 1265a02108c508b508112cdeac922aad03e0146a (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>
Diffstat (limited to 'net/tipc/link.c')
-rw-r--r-- | net/tipc/link.c | 4 |
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); |