aboutsummaryrefslogtreecommitdiffstats
path: root/net/tipc/discover.c
diff options
context:
space:
mode:
authorAllan Stephens <Allan.Stephens@windriver.com>2011-04-20 17:24:07 -0400
committerPaul Gortmaker <paul.gortmaker@windriver.com>2011-05-10 16:03:55 -0400
commit66e019a6af827a254641e83e96ee36b0f4adc5e3 (patch)
tree8a0245a404564b9bcfb01d5378c35714c99240de /net/tipc/discover.c
parent1f3de471adf5c2a584480a6010808d7a17063897 (diff)
tipc: Strengthen checks for neighboring node discovery
Enhances existing checks on the discovery domain associated with a TIPC bearer. A bearer can no longer be configured to accept links from itself only (which would be pointless), or to nodes outside its own cluster (since multi-cluster support has now been removed from TIPC). Also, the neighbor discovery routine now validates link setup requests against the configured discovery domain for the bearer, rather than simply ensuring the requesting node belongs to the node's own cluster. Signed-off-by: Allan Stephens <Allan.Stephens@windriver.com> Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
Diffstat (limited to 'net/tipc/discover.c')
-rw-r--r--net/tipc/discover.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/net/tipc/discover.c b/net/tipc/discover.c
index 491eff56b9da..d2163bd99e59 100644
--- a/net/tipc/discover.c
+++ b/net/tipc/discover.c
@@ -52,6 +52,7 @@
52 * struct link_req - information about an ongoing link setup request 52 * struct link_req - information about an ongoing link setup request
53 * @bearer: bearer issuing requests 53 * @bearer: bearer issuing requests
54 * @dest: destination address for request messages 54 * @dest: destination address for request messages
55 * @domain: network domain to which links can be established
55 * @buf: request message to be (repeatedly) sent 56 * @buf: request message to be (repeatedly) sent
56 * @timer: timer governing period between requests 57 * @timer: timer governing period between requests
57 * @timer_intv: current interval between requests (in ms) 58 * @timer_intv: current interval between requests (in ms)
@@ -59,6 +60,7 @@
59struct link_req { 60struct link_req {
60 struct tipc_bearer *bearer; 61 struct tipc_bearer *bearer;
61 struct tipc_media_addr dest; 62 struct tipc_media_addr dest;
63 u32 domain;
62 struct sk_buff *buf; 64 struct sk_buff *buf;
63 struct timer_list timer; 65 struct timer_list timer;
64 unsigned int timer_intv; 66 unsigned int timer_intv;
@@ -147,7 +149,7 @@ void tipc_disc_recv_msg(struct sk_buff *buf, struct tipc_bearer *b_ptr)
147 } 149 }
148 if (!tipc_in_scope(dest, tipc_own_addr)) 150 if (!tipc_in_scope(dest, tipc_own_addr))
149 return; 151 return;
150 if (!in_own_cluster(orig)) 152 if (!tipc_in_scope(b_ptr->link_req->domain, orig))
151 return; 153 return;
152 154
153 /* Locate structure corresponding to requesting node */ 155 /* Locate structure corresponding to requesting node */
@@ -287,7 +289,7 @@ static void disc_timeout(struct link_req *req)
287 * tipc_disc_init_link_req - start sending periodic link setup requests 289 * tipc_disc_init_link_req - start sending periodic link setup requests
288 * @b_ptr: ptr to bearer issuing requests 290 * @b_ptr: ptr to bearer issuing requests
289 * @dest: destination address for request messages 291 * @dest: destination address for request messages
290 * @dest_domain: network domain of node(s) which should respond to message 292 * @dest_domain: network domain to which links can be established
291 * 293 *
292 * Returns pointer to link request structure, or NULL if unable to create. 294 * Returns pointer to link request structure, or NULL if unable to create.
293 */ 295 */
@@ -310,6 +312,7 @@ struct link_req *tipc_disc_init_link_req(struct tipc_bearer *b_ptr,
310 312
311 memcpy(&req->dest, dest, sizeof(*dest)); 313 memcpy(&req->dest, dest, sizeof(*dest));
312 req->bearer = b_ptr; 314 req->bearer = b_ptr;
315 req->domain = dest_domain;
313 req->timer_intv = TIPC_LINK_REQ_INIT; 316 req->timer_intv = TIPC_LINK_REQ_INIT;
314 k_init_timer(&req->timer, (Handler)disc_timeout, (unsigned long)req); 317 k_init_timer(&req->timer, (Handler)disc_timeout, (unsigned long)req);
315 k_start_timer(&req->timer, req->timer_intv); 318 k_start_timer(&req->timer, req->timer_intv);