···6767 struct phonet_protocol *pnp;6868 int err;69697070- if (net != &init_net)7171- return -EAFNOSUPPORT;7272-7370 if (!capable(CAP_SYS_ADMIN))7471 return -EPERM;7572···349352 struct sockaddr_pn sa;350353 u16 len;351354352352- if (dev_net(dev) != &init_net)353353- goto out;354354-355355 /* check we have at least a full Phonet header */356356 if (!pskb_pull(skb, sizeof(struct phonethdr)))357357 goto out;···367373 if (pn_sockaddr_get_addr(&sa) == 0)368374 goto out; /* currently, we cannot be device 0 */369375370370- sk = pn_find_sock_by_sa(&sa);376376+ sk = pn_find_sock_by_sa(dev_net(dev), &sa);371377 if (sk == NULL) {372378 if (can_respond(skb)) {373379 send_obj_unreachable(skb);
+4-2
net/phonet/pn_dev.c
···7676 dev = pnd->netdev;7777 BUG_ON(!dev);78787979- if (dev_net(dev) == net &&7979+ if (net_eq(dev_net(dev), net) &&8080 (dev->reg_state == NETREG_REGISTERED) &&8181 ((pnd->netdev->flags & IFF_UP)) == IFF_UP)8282 break;···140140 return addr;141141}142142143143-int phonet_address_lookup(u8 addr)143143+int phonet_address_lookup(struct net *net, u8 addr)144144{145145 struct phonet_device *pnd;146146147147 spin_lock_bh(&pndevs.lock);148148 list_for_each_entry(pnd, &pndevs.list, list) {149149+ if (!net_eq(dev_net(pnd->netdev), net))150150+ continue;149151 /* Don't allow unregistering devices! */150152 if ((pnd->netdev->reg_state != NETREG_REGISTERED) ||151153 ((pnd->netdev->flags & IFF_UP)) != IFF_UP)
+7-4
net/phonet/socket.c
···5757 * Find address based on socket address, match only certain fields.5858 * Also grab sock if it was found. Remember to sock_put it later.5959 */6060-struct sock *pn_find_sock_by_sa(const struct sockaddr_pn *spn)6060+struct sock *pn_find_sock_by_sa(struct net *net, const struct sockaddr_pn *spn)6161{6262 struct hlist_node *node;6363 struct sock *sknode;···7171 struct pn_sock *pn = pn_sk(sknode);7272 BUG_ON(!pn->sobject); /* unbound socket */73737474+ if (!net_eq(sock_net(sknode), net))7575+ continue;7476 if (pn_port(obj)) {7577 /* Look up socket by port */7678 if (pn_port(pn->sobject) != pn_port(obj))···132130133131 handle = pn_sockaddr_get_object((struct sockaddr_pn *)addr);134132 saddr = pn_addr(handle);135135- if (saddr && phonet_address_lookup(saddr))133133+ if (saddr && phonet_address_lookup(sock_net(sk), saddr))136134 return -EADDRNOTAVAIL;137135138136 lock_sock(sk);···363361int pn_sock_get_port(struct sock *sk, unsigned short sport)364362{365363 static int port_cur;364364+ struct net *net = sock_net(sk);366365 struct pn_sock *pn = pn_sk(sk);367366 struct sockaddr_pn try_sa;368367 struct sock *tmpsk;···384381 port_cur = pmin;385382386383 pn_sockaddr_set_port(&try_sa, port_cur);387387- tmpsk = pn_find_sock_by_sa(&try_sa);384384+ tmpsk = pn_find_sock_by_sa(net, &try_sa);388385 if (tmpsk == NULL) {389386 sport = port_cur;390387 goto found;···394391 } else {395392 /* try to find specific port */396393 pn_sockaddr_set_port(&try_sa, sport);397397- tmpsk = pn_find_sock_by_sa(&try_sa);394394+ tmpsk = pn_find_sock_by_sa(net, &try_sa);398395 if (tmpsk == NULL)399396 /* No sock there! We can use that port... */400397 goto found;