Merge git://git.infradead.org/users/eparis/audit
[firefly-linux-kernel-4.4.55.git] / net / socket.c
index 88f759adf3afba28af3b1a694220c18f5e895616..6b94633ca61d67e29faa58a7d42410e1ef678193 100644 (file)
@@ -600,7 +600,7 @@ void sock_release(struct socket *sock)
 }
 EXPORT_SYMBOL(sock_release);
 
-int sock_tx_timestamp(struct sock *sk, __u8 *tx_flags)
+void sock_tx_timestamp(struct sock *sk, __u8 *tx_flags)
 {
        *tx_flags = 0;
        if (sock_flag(sk, SOCK_TIMESTAMPING_TX_HARDWARE))
@@ -609,7 +609,6 @@ int sock_tx_timestamp(struct sock *sk, __u8 *tx_flags)
                *tx_flags |= SKBTX_SW_TSTAMP;
        if (sock_flag(sk, SOCK_WIFI_STATUS))
                *tx_flags |= SKBTX_WIFI_STATUS;
-       return 0;
 }
 EXPORT_SYMBOL(sock_tx_timestamp);
 
@@ -682,16 +681,6 @@ int kernel_sendmsg(struct socket *sock, struct msghdr *msg,
 }
 EXPORT_SYMBOL(kernel_sendmsg);
 
-static int ktime2ts(ktime_t kt, struct timespec *ts)
-{
-       if (kt.tv64) {
-               *ts = ktime_to_timespec(kt);
-               return 1;
-       } else {
-               return 0;
-       }
-}
-
 /*
  * called from sock_recv_timestamp() if sock_flag(sk, SOCK_RCVTSTAMP)
  */
@@ -724,17 +713,15 @@ void __sock_recv_timestamp(struct msghdr *msg, struct sock *sk,
 
 
        memset(ts, 0, sizeof(ts));
-       if (skb->tstamp.tv64 &&
-           sock_flag(sk, SOCK_TIMESTAMPING_SOFTWARE)) {
-               skb_get_timestampns(skb, ts + 0);
+       if (sock_flag(sk, SOCK_TIMESTAMPING_SOFTWARE) &&
+           ktime_to_timespec_cond(skb->tstamp, ts + 0))
                empty = 0;
-       }
        if (shhwtstamps) {
                if (sock_flag(sk, SOCK_TIMESTAMPING_SYS_HARDWARE) &&
-                   ktime2ts(shhwtstamps->syststamp, ts + 1))
+                   ktime_to_timespec_cond(shhwtstamps->syststamp, ts + 1))
                        empty = 0;
                if (sock_flag(sk, SOCK_TIMESTAMPING_RAW_HARDWARE) &&
-                   ktime2ts(shhwtstamps->hwtstamp, ts + 2))
+                   ktime_to_timespec_cond(shhwtstamps->hwtstamp, ts + 2))
                        empty = 0;
        }
        if (!empty)
@@ -1173,15 +1160,6 @@ static int sock_mmap(struct file *file, struct vm_area_struct *vma)
 
 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) {
-               printk(KERN_DEBUG "sock_close: NULL inode\n");
-               return 0;
-       }
        sock_release(SOCKET_I(inode));
        return 0;
 }
@@ -2434,7 +2412,7 @@ static const unsigned char nargs[21] = {
 
 SYSCALL_DEFINE2(socketcall, int, call, unsigned long __user *, args)
 {
-       unsigned long a[6];
+       unsigned long a[AUDITSC_ARGS];
        unsigned long a0, a1;
        int err;
        unsigned int len;
@@ -2450,7 +2428,9 @@ SYSCALL_DEFINE2(socketcall, int, call, unsigned long __user *, args)
        if (copy_from_user(a, args, len))
                return -EFAULT;
 
-       audit_socketcall(nargs[call] / sizeof(unsigned long), a);
+       err = audit_socketcall(nargs[call] / sizeof(unsigned long), a);
+       if (err)
+               return err;
 
        a0 = a[0];
        a1 = a[1];