git://ftp.safe.ca
/
safe
/
jmp
/
linux-2.6
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
sunrpc: fix missing kernel-doc
[safe/jmp/linux-2.6]
/
net
/
econet
/
af_econet.c
diff --git
a/net/econet/af_econet.c
b/net/econet/af_econet.c
index
b5524f3
..
68d1544
100644
(file)
--- a/
net/econet/af_econet.c
+++ b/
net/econet/af_econet.c
@@
-336,6
+336,7
@@
static int econet_sendmsg(struct kiocb *iocb, struct socket *sock,
/* Real hardware Econet. We're not worthy etc. */
#ifdef CONFIG_ECONET_NATIVE
unsigned short proto = 0;
/* Real hardware Econet. We're not worthy etc. */
#ifdef CONFIG_ECONET_NATIVE
unsigned short proto = 0;
+ int res;
dev_hold(dev);
dev_hold(dev);
@@
-354,12
+355,12
@@
static int econet_sendmsg(struct kiocb *iocb, struct socket *sock,
eb->sec = *saddr;
eb->sent = ec_tx_done;
eb->sec = *saddr;
eb->sent = ec_tx_done;
- if (dev->hard_header) {
- int res;
+ err = -EINVAL;
+ res = dev_hard_header(skb, dev, ntohs(proto), &addr, NULL, len);
+ if (res < 0)
+ goto out_free;
+ if (res > 0) {
struct ec_framehdr *fh;
struct ec_framehdr *fh;
- err = -EINVAL;
- res = dev->hard_header(skb, dev, ntohs(proto),
- &addr, NULL, len);
/* Poke in our control byte and
port number. Hack, hack. */
fh = (struct ec_framehdr *)(skb->data);
/* Poke in our control byte and
port number. Hack, hack. */
fh = (struct ec_framehdr *)(skb->data);
@@
-368,8
+369,7
@@
static int econet_sendmsg(struct kiocb *iocb, struct socket *sock,
if (sock->type != SOCK_DGRAM) {
skb_reset_tail_pointer(skb);
skb->len = 0;
if (sock->type != SOCK_DGRAM) {
skb_reset_tail_pointer(skb);
skb->len = 0;
- } else if (res < 0)
- goto out_free;
+ }
}
/* Copy the data. Returns -EFAULT on error */
}
/* Copy the data. Returns -EFAULT on error */
@@
-608,12
+608,15
@@
static struct proto econet_proto = {
* Create an Econet socket
*/
* Create an Econet socket
*/
-static int econet_create(struct socket *sock, int protocol)
+static int econet_create(struct
net *net, struct
socket *sock, int protocol)
{
struct sock *sk;
struct econet_sock *eo;
int err;
{
struct sock *sk;
struct econet_sock *eo;
int err;
+ if (net != &init_net)
+ return -EAFNOSUPPORT;
+
/* Econet only provides datagram services. */
if (sock->type != SOCK_DGRAM)
return -ESOCKTNOSUPPORT;
/* Econet only provides datagram services. */
if (sock->type != SOCK_DGRAM)
return -ESOCKTNOSUPPORT;
@@
-621,7
+624,7
@@
static int econet_create(struct socket *sock, int protocol)
sock->state = SS_UNCONNECTED;
err = -ENOBUFS;
sock->state = SS_UNCONNECTED;
err = -ENOBUFS;
- sk = sk_alloc(
PF_ECONET, GFP_KERNEL, &econet_proto, 1
);
+ sk = sk_alloc(
net, PF_ECONET, GFP_KERNEL, &econet_proto
);
if (sk == NULL)
goto out;
if (sk == NULL)
goto out;
@@
-659,7
+662,7
@@
static int ec_dev_ioctl(struct socket *sock, unsigned int cmd, void __user *arg)
if (copy_from_user(&ifr, arg, sizeof(struct ifreq)))
return -EFAULT;
if (copy_from_user(&ifr, arg, sizeof(struct ifreq)))
return -EFAULT;
- if ((dev = dev_get_by_name(ifr.ifr_name)) == NULL)
+ if ((dev = dev_get_by_name(
&init_net,
ifr.ifr_name)) == NULL)
return -ENODEV;
sec = (struct sockaddr_ec *)&ifr.ifr_addr;
return -ENODEV;
sec = (struct sockaddr_ec *)&ifr.ifr_addr;
@@
-1011,9
+1014,8
@@
static int __init aun_udp_initialise(void)
skb_queue_head_init(&aun_queue);
spin_lock_init(&aun_queue_lock);
skb_queue_head_init(&aun_queue);
spin_lock_init(&aun_queue_lock);
-
init_timer(&ab_cleanup_timer
);
+
setup_timer(&ab_cleanup_timer, ab_cleanup, 0
);
ab_cleanup_timer.expires = jiffies + (HZ*2);
ab_cleanup_timer.expires = jiffies + (HZ*2);
- ab_cleanup_timer.function = ab_cleanup;
add_timer(&ab_cleanup_timer);
memset(&sin, 0, sizeof(sin));
add_timer(&ab_cleanup_timer);
memset(&sin, 0, sizeof(sin));
@@
-1062,6
+1064,9
@@
static int econet_rcv(struct sk_buff *skb, struct net_device *dev, struct packet
struct sock *sk;
struct ec_device *edev = dev->ec_ptr;
struct sock *sk;
struct ec_device *edev = dev->ec_ptr;
+ if (dev_net(dev) != &init_net)
+ goto drop;
+
if (skb->pkt_type == PACKET_OTHERHOST)
goto drop;
if (skb->pkt_type == PACKET_OTHERHOST)
goto drop;
@@
-1116,6
+1121,9
@@
static int econet_notifier(struct notifier_block *this, unsigned long msg, void
struct net_device *dev = (struct net_device *)data;
struct ec_device *edev;
struct net_device *dev = (struct net_device *)data;
struct ec_device *edev;
+ if (dev_net(dev) != &init_net)
+ return NOTIFY_DONE;
+
switch (msg) {
case NETDEV_UNREGISTER:
/* A device has gone down - kill any data we hold for it. */
switch (msg) {
case NETDEV_UNREGISTER:
/* A device has gone down - kill any data we hold for it. */
@@
-1146,6
+1154,9
@@
static void __exit econet_proto_exit(void)
sock_release(udpsock);
#endif
unregister_netdevice_notifier(&econet_netdev_notifier);
sock_release(udpsock);
#endif
unregister_netdevice_notifier(&econet_netdev_notifier);
+#ifdef CONFIG_ECONET_NATIVE
+ dev_remove_pack(&econet_packet_type);
+#endif
sock_unregister(econet_family_ops.family);
proto_unregister(&econet_proto);
}
sock_unregister(econet_family_ops.family);
proto_unregister(&econet_proto);
}