#include <net/cls_cgroup.h>
#include <net/sock.h>
+#include <net/inet_sock.h>
#include <linux/netfilter.h>
#include <linux/if_tun.h>
}
if (rcu_dereference_protected(sock->wq, 1)->fasync_list)
- printk(KERN_ERR "sock_release: fasync list not empty!\n");
+ printk(KERN_ERR "[mtk_net][socket]sock_release: fasync list not empty!\n");
if (test_bit(SOCK_EXTERNALLY_ALLOCATED, &sock->flags))
return;
static int sock_close(struct inode *inode, struct file *filp)
{
+ /*
+ * It was possible the inode is NULL we were
+ * closing an unfinished socket.
+ */
+
+ if (!inode) {
+ #ifdef CONFIG_MTK_NET_LOGGING
+ printk(KERN_DEBUG "[mtk_net][socket]sock_close: NULL inode\n");
+ #endif
+ return 0;
+ }
+ #ifdef CONFIG_MTK_NET_LOGGING
+ printk(KERN_INFO "[mtk_net][socekt]socket_close[%lu] \n",inode->i_ino);
+ #endif
sock_release(SOCKET_I(inode));
+
return 0;
}
static int warned;
if (!warned) {
warned = 1;
- printk(KERN_INFO "%s uses obsolete (PF_INET,SOCK_PACKET)\n",
+ #ifdef CONFIG_MTK_NET_LOGGING
+ printk(KERN_INFO "[mtk_net][socket]%s uses obsolete (PF_INET,SOCK_PACKET)\n",
current->comm);
+ #endif
}
family = PF_PACKET;
}
out:
/* It may be already another descriptor 8) Not kernel problem. */
+
+ if((retval >= 0)&& sock && SOCK_INODE(sock) )
+ {
+ #ifdef CONFIG_MTK_NET_LOGGING
+ printk(KERN_INFO "[mtk_net][socket]socket_create[%lu]:fd=%d \n",SOCK_INODE(sock)->i_ino,retval);
+ #endif
+ }
+ else
+ {
+ #ifdef CONFIG_MTK_NET_LOGGING
+ printk(KERN_INFO "[mtk_net][socket]socket_create:fd=%d \n",retval);
+ #endif
+ }
return retval;
out_release:
/*
* Create a pair of connected sockets.
*/
-
SYSCALL_DEFINE4(socketpair, int, family, int, type, int, protocol,
int __user *, usockvec)
{
if (!err)
err = put_user(fd2, &usockvec[1]);
if (!err)
+ {
+ if(sock1 && SOCK_INODE(sock1) && sock2&& SOCK_INODE(sock2) )
+ {
+ #ifdef CONFIG_MTK_NET_LOGGING
+ printk(KERN_INFO "[mtk_net][socket]socketpair:fd1[%lu]=%d, fd2[%lu]=%d \n", SOCK_INODE(sock1)->i_ino,fd1,SOCK_INODE(sock2)->i_ino,fd2);
+ #endif
+ }
+
return 0;
+ }
sys_close(fd2);
sys_close(fd1);
+ #ifdef CONFIG_MTK_NET_LOGGING
+ printk(KERN_INFO "[mtk_net][socket]socketpair fail1: %d \n", err);
+ #endif
return err;
out_release_both:
out_release_1:
sock_release(sock1);
out:
+ #ifdef CONFIG_MTK_NET_LOGGING
+ printk(KERN_INFO "[mtk_net][socket]socketpair fail2: %d \n", err);
+ #endif
return err;
}
sock = sockfd_lookup_light(fd, &err, &fput_needed);
if (sock) {
err = move_addr_to_kernel(umyaddr, addrlen, &address);
+
if (err >= 0) {
err = security_socket_bind(sock,
(struct sockaddr *)&address,
err = sock->ops->bind(sock,
(struct sockaddr *)
&address, addrlen);
+
+ #ifdef CONFIG_MTK_NET_LOGGING
+ if((((struct sockaddr_in *)&address)->sin_family) != AF_UNIX)
+ {
+ printk(KERN_WARNING "[mtk_net][socket] bind addr->sin_port:%d,err:%d \n",htons(((struct sockaddr_in *)&address)->sin_port),err);
+ }
+ #endif
}
fput_light(sock->file, fput_needed);
}
* status to recvmsg. We need to add that support in a way thats
* clean when we restucture accept also.
*/
-
SYSCALL_DEFINE4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr,
int __user *, upeer_addrlen, int, flags)
{
out_put:
fput_light(sock->file, fput_needed);
out:
+ if( (err>=0)&& newsock && SOCK_INODE(newsock) )
+ {
+ #ifdef CONFIG_MTK_NET_LOGGING
+ printk(KERN_INFO "[mtk_net][socket]socket_accept:fd=%d \n",err);
+ #endif
+ }
+
return err;
out_fd:
fput(newfile);
if (len > INT_MAX)
len = INT_MAX;
+ if (unlikely(!access_ok(VERIFY_READ, buff, len)))
+ return -EFAULT;
sock = sockfd_lookup_light(fd, &err, &fput_needed);
if (!sock)
goto out;
if (size > INT_MAX)
size = INT_MAX;
+ if (unlikely(!access_ok(VERIFY_WRITE, ubuf, size)))
+ return -EFAULT;
sock = sockfd_lookup_light(fd, &err, &fput_needed);
if (!sock)
goto out;
break;
}
-out_put:
- fput_light(sock->file, fput_needed);
-
if (err == 0)
- return datagrams;
+ goto out_put;
+
+ if (datagrams == 0) {
+ datagrams = err;
+ goto out_put;
+ }
- if (datagrams != 0) {
/*
* We may return less entries than requested (vlen) if the
* sock is non block and there aren't enough datagrams...
sock->sk->sk_err = -err;
}
- return datagrams;
- }
+out_put:
+ fput_light(sock->file, fput_needed);
- return err;
+ return datagrams;
}
SYSCALL_DEFINE5(recvmmsg, int, fd, struct mmsghdr __user *, mmsg,
int err;
if (ops->family >= NPROTO) {
- printk(KERN_CRIT "protocol %d >= NPROTO(%d)\n", ops->family,
+ printk(KERN_CRIT "[mtk_net][sock]protocol %d >= NPROTO(%d)\n", ops->family,
NPROTO);
return -ENOBUFS;
}
err = 0;
}
spin_unlock(&net_family_lock);
-
- printk(KERN_INFO "NET: Registered protocol family %d\n", ops->family);
+ #ifdef CONFIG_MTK_NET_LOGGING
+ printk(KERN_INFO "[mtk_net][socekt]NET: Registered protocol family %d\n", ops->family);
+ #endif
return err;
}
EXPORT_SYMBOL(sock_register);
spin_unlock(&net_family_lock);
synchronize_rcu();
-
- printk(KERN_INFO "NET: Unregistered protocol family %d\n", family);
+ #ifdef CONFIG_MTK_NET_LOGGING
+ printk(KERN_INFO "[mtk_net][socket]NET: Unregistered protocol family %d\n", family);
+ #endif
}
EXPORT_SYMBOL(sock_unregister);