tipc: properly handle off-node send requests with invalid addr
There are two send routines that might conceivably be asked by an application to send a message off-node when the node is still using the default network address. These now have an added check that detects this and rejects the message gracefully. Signed-off-by: Allan Stephens <allan.stephens@windriver.com> Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
This commit is contained in:
committed by
Paul Gortmaker
parent
974a5a864b
commit
b8f683d126
@@ -1270,10 +1270,14 @@ int tipc_send2name(u32 ref, struct tipc_name const *name, unsigned int domain,
|
|||||||
if (likely(destnode == tipc_own_addr))
|
if (likely(destnode == tipc_own_addr))
|
||||||
res = tipc_port_recv_sections(p_ptr, num_sect,
|
res = tipc_port_recv_sections(p_ptr, num_sect,
|
||||||
msg_sect, total_len);
|
msg_sect, total_len);
|
||||||
else
|
else if (tipc_own_addr)
|
||||||
res = tipc_link_send_sections_fast(p_ptr, msg_sect,
|
res = tipc_link_send_sections_fast(p_ptr, msg_sect,
|
||||||
num_sect, total_len,
|
num_sect, total_len,
|
||||||
destnode);
|
destnode);
|
||||||
|
else
|
||||||
|
res = tipc_port_reject_sections(p_ptr, msg, msg_sect,
|
||||||
|
num_sect, total_len,
|
||||||
|
TIPC_ERR_NO_NODE);
|
||||||
if (likely(res != -ELINKCONG)) {
|
if (likely(res != -ELINKCONG)) {
|
||||||
if (res > 0)
|
if (res > 0)
|
||||||
p_ptr->sent++;
|
p_ptr->sent++;
|
||||||
@@ -1314,9 +1318,12 @@ int tipc_send2port(u32 ref, struct tipc_portid const *dest,
|
|||||||
if (dest->node == tipc_own_addr)
|
if (dest->node == tipc_own_addr)
|
||||||
res = tipc_port_recv_sections(p_ptr, num_sect, msg_sect,
|
res = tipc_port_recv_sections(p_ptr, num_sect, msg_sect,
|
||||||
total_len);
|
total_len);
|
||||||
else
|
else if (tipc_own_addr)
|
||||||
res = tipc_link_send_sections_fast(p_ptr, msg_sect, num_sect,
|
res = tipc_link_send_sections_fast(p_ptr, msg_sect, num_sect,
|
||||||
total_len, dest->node);
|
total_len, dest->node);
|
||||||
|
else
|
||||||
|
res = tipc_port_reject_sections(p_ptr, msg, msg_sect, num_sect,
|
||||||
|
total_len, TIPC_ERR_NO_NODE);
|
||||||
if (likely(res != -ELINKCONG)) {
|
if (likely(res != -ELINKCONG)) {
|
||||||
if (res > 0)
|
if (res > 0)
|
||||||
p_ptr->sent++;
|
p_ptr->sent++;
|
||||||
|
Reference in New Issue
Block a user