#include <linux/poll.h>
#include <linux/module.h>
#include <linux/init.h>
+#include <linux/vs_base.h>
+#include <linux/vs_context.h>
+#include <linux/vs_network.h>
#ifdef CONFIG_INET
#include <net/inet_common.h>
{
BUG_TRAP(!atomic_read(&sk->sk_rmem_alloc));
BUG_TRAP(!atomic_read(&sk->sk_wmem_alloc));
+ BUG_ON(sk->sk_nx_info);
+ BUG_ON(sk->sk_vx_info);
if (!sock_flag(sk, SOCK_DEAD)) {
printk("Attempt to release alive packet socket: %p\n", sk);
sk = pt->af_packet_priv;
po = pkt_sk(sk);
+ if (sk->sk_xid && sk->sk_xid != skb->xid)
+ goto drop;
+
skb->dev = dev;
if (dev->hard_header) {
}
#endif
+ clr_vx_info(&sk->sk_vx_info);
+ clr_nx_info(&sk->sk_nx_info);
+
/*
* Now the socket is dead. No more input will appear.
*/
sk->sk_destruct = packet_sock_destruct;
atomic_inc(&packet_socks_nr);
+ set_vx_info(&sk->sk_vx_info, current->vx_info);
+ sk->sk_xid = vx_current_xid();
+ set_nx_info(&sk->sk_nx_info, current->nx_info);
+ sk->sk_nid = nx_current_nid();
+
/*
* Attach a protocol block
*/
int copied, err;
err = -EINVAL;
- if (flags & ~(MSG_PEEK|MSG_DONTWAIT|MSG_TRUNC))
+ if (flags & ~(MSG_PEEK|MSG_DONTWAIT|MSG_TRUNC|MSG_CMSG_COMPAT))
goto out;
#if 0
#endif
static int
-packet_setsockopt(struct socket *sock, int level, int optname, char *optval, int optlen)
+packet_setsockopt(struct socket *sock, int level, int optname, char __user *optval, int optlen)
{
struct sock *sk = sock->sk;
int ret;
}
int packet_getsockopt(struct socket *sock, int level, int optname,
- char *optval, int *optlen)
+ char __user *optval, int __user *optlen)
{
int len;
struct sock *sk = sock->sk;
case SIOCOUTQ:
{
int amount = atomic_read(&sk->sk_wmem_alloc);
- return put_user(amount, (int *)arg);
+ return put_user(amount, (int __user *)arg);
}
case SIOCINQ:
{
if (skb)
amount = skb->len;
spin_unlock_bh(&sk->sk_receive_queue.lock);
- return put_user(amount, (int *)arg);
+ return put_user(amount, (int __user *)arg);
}
case SIOCGSTAMP:
- return sock_get_timestamp(sk, (struct timeval *)arg);
+ return sock_get_timestamp(sk, (struct timeval __user *)arg);
#ifdef CONFIG_INET
case SIOCADDRT:
#endif
default:
- return dev_ioctl(cmd, (void *)arg);
+ return dev_ioctl(cmd, (void __user *)arg);
}
return 0;
}
.mmap = packet_mmap,
.sendpage = sock_no_sendpage,
};
+EXPORT_SYMBOL(packet_ops);
-static struct net_proto_family packet_family_ops = {
+struct net_proto_family packet_family_ops = {
.family = PF_PACKET,
.create = packet_create,
.owner = THIS_MODULE,
};
+EXPORT_SYMBOL(packet_family_ops);
static struct notifier_block packet_netdev_notifier = {
.notifier_call =packet_notifier,