aboutsummaryrefslogtreecommitdiffstats
path: root/net/tipc
diff options
context:
space:
mode:
Diffstat (limited to 'net/tipc')
-rw-r--r--net/tipc/eth_media.c17
-rw-r--r--net/tipc/socket.c9
2 files changed, 19 insertions, 7 deletions
diff --git a/net/tipc/eth_media.c b/net/tipc/eth_media.c
index 711ca4b1f051..3bbef2ab22ae 100644
--- a/net/tipc/eth_media.c
+++ b/net/tipc/eth_media.c
@@ -38,6 +38,7 @@
38#include <net/tipc/tipc_bearer.h> 38#include <net/tipc/tipc_bearer.h>
39#include <net/tipc/tipc_msg.h> 39#include <net/tipc/tipc_msg.h>
40#include <linux/netdevice.h> 40#include <linux/netdevice.h>
41#include <net/net_namespace.h>
41 42
42#define MAX_ETH_BEARERS 2 43#define MAX_ETH_BEARERS 2
43#define ETH_LINK_PRIORITY TIPC_DEF_LINK_PRI 44#define ETH_LINK_PRIORITY TIPC_DEF_LINK_PRI
@@ -76,7 +77,7 @@ static int send_msg(struct sk_buff *buf, struct tipc_bearer *tb_ptr,
76 skb_reset_network_header(clone); 77 skb_reset_network_header(clone);
77 dev = ((struct eth_bearer *)(tb_ptr->usr_handle))->dev; 78 dev = ((struct eth_bearer *)(tb_ptr->usr_handle))->dev;
78 clone->dev = dev; 79 clone->dev = dev;
79 dev->hard_header(clone, dev, ETH_P_TIPC, 80 dev_hard_header(clone, dev, ETH_P_TIPC,
80 &dest->dev_addr.eth_addr, 81 &dest->dev_addr.eth_addr,
81 dev->dev_addr, clone->len); 82 dev->dev_addr, clone->len);
82 dev_queue_xmit(clone); 83 dev_queue_xmit(clone);
@@ -100,6 +101,11 @@ static int recv_msg(struct sk_buff *buf, struct net_device *dev,
100 struct eth_bearer *eb_ptr = (struct eth_bearer *)pt->af_packet_priv; 101 struct eth_bearer *eb_ptr = (struct eth_bearer *)pt->af_packet_priv;
101 u32 size; 102 u32 size;
102 103
104 if (dev->nd_net != &init_net) {
105 kfree_skb(buf);
106 return 0;
107 }
108
103 if (likely(eb_ptr->bearer)) { 109 if (likely(eb_ptr->bearer)) {
104 if (likely(buf->pkt_type <= PACKET_BROADCAST)) { 110 if (likely(buf->pkt_type <= PACKET_BROADCAST)) {
105 size = msg_size((struct tipc_msg *)buf->data); 111 size = msg_size((struct tipc_msg *)buf->data);
@@ -129,7 +135,7 @@ static int enable_bearer(struct tipc_bearer *tb_ptr)
129 135
130 /* Find device with specified name */ 136 /* Find device with specified name */
131 137
132 for_each_netdev(pdev){ 138 for_each_netdev(&init_net, pdev){
133 if (!strncmp(pdev->name, driver_name, IFNAMSIZ)) { 139 if (!strncmp(pdev->name, driver_name, IFNAMSIZ)) {
134 dev = pdev; 140 dev = pdev;
135 break; 141 break;
@@ -192,6 +198,9 @@ static int recv_notification(struct notifier_block *nb, unsigned long evt,
192 struct eth_bearer *eb_ptr = &eth_bearers[0]; 198 struct eth_bearer *eb_ptr = &eth_bearers[0];
193 struct eth_bearer *stop = &eth_bearers[MAX_ETH_BEARERS]; 199 struct eth_bearer *stop = &eth_bearers[MAX_ETH_BEARERS];
194 200
201 if (dev->nd_net != &init_net)
202 return NOTIFY_DONE;
203
195 while ((eb_ptr->dev != dev)) { 204 while ((eb_ptr->dev != dev)) {
196 if (++eb_ptr == stop) 205 if (++eb_ptr == stop)
197 return NOTIFY_DONE; /* couldn't find device */ 206 return NOTIFY_DONE; /* couldn't find device */
@@ -234,12 +243,12 @@ static int recv_notification(struct notifier_block *nb, unsigned long evt,
234static char *eth_addr2str(struct tipc_media_addr *a, char *str_buf, int str_size) 243static char *eth_addr2str(struct tipc_media_addr *a, char *str_buf, int str_size)
235{ 244{
236 unchar *addr = (unchar *)&a->dev_addr; 245 unchar *addr = (unchar *)&a->dev_addr;
246 DECLARE_MAC_BUF(mac);
237 247
238 if (str_size < 18) 248 if (str_size < 18)
239 *str_buf = '\0'; 249 *str_buf = '\0';
240 else 250 else
241 sprintf(str_buf, "%02x:%02x:%02x:%02x:%02x:%02x", 251 sprintf(str_buf, "%s", print_mac(mac, addr));
242 addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]);
243 return str_buf; 252 return str_buf;
244} 253}
245 254
diff --git a/net/tipc/socket.c b/net/tipc/socket.c
index 84110172031e..e36b4b5a5222 100644
--- a/net/tipc/socket.c
+++ b/net/tipc/socket.c
@@ -162,13 +162,16 @@ static void advance_queue(struct tipc_sock *tsock)
162 * 162 *
163 * Returns 0 on success, errno otherwise 163 * Returns 0 on success, errno otherwise
164 */ 164 */
165static int tipc_create(struct socket *sock, int protocol) 165static int tipc_create(struct net *net, struct socket *sock, int protocol)
166{ 166{
167 struct tipc_sock *tsock; 167 struct tipc_sock *tsock;
168 struct tipc_port *port; 168 struct tipc_port *port;
169 struct sock *sk; 169 struct sock *sk;
170 u32 ref; 170 u32 ref;
171 171
172 if (net != &init_net)
173 return -EAFNOSUPPORT;
174
172 if (unlikely(protocol != 0)) 175 if (unlikely(protocol != 0))
173 return -EPROTONOSUPPORT; 176 return -EPROTONOSUPPORT;
174 177
@@ -198,7 +201,7 @@ static int tipc_create(struct socket *sock, int protocol)
198 return -EPROTOTYPE; 201 return -EPROTOTYPE;
199 } 202 }
200 203
201 sk = sk_alloc(AF_TIPC, GFP_KERNEL, &tipc_proto, 1); 204 sk = sk_alloc(net, AF_TIPC, GFP_KERNEL, &tipc_proto, 1);
202 if (!sk) { 205 if (!sk) {
203 tipc_deleteport(ref); 206 tipc_deleteport(ref);
204 return -ENOMEM; 207 return -ENOMEM;
@@ -1372,7 +1375,7 @@ static int accept(struct socket *sock, struct socket *newsock, int flags)
1372 } 1375 }
1373 buf = skb_peek(&sock->sk->sk_receive_queue); 1376 buf = skb_peek(&sock->sk->sk_receive_queue);
1374 1377
1375 res = tipc_create(newsock, 0); 1378 res = tipc_create(sock->sk->sk_net, newsock, 0);
1376 if (!res) { 1379 if (!res) {
1377 struct tipc_sock *new_tsock = tipc_sk(newsock->sk); 1380 struct tipc_sock *new_tsock = tipc_sk(newsock->sk);
1378 struct tipc_portid id; 1381 struct tipc_portid id;