Merge tag 'v3.10.95' into update
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / include / net / sock.h
index 02199accb6be2b9ddeffdef24dc001c686b2e9d5..0a7fa044f167a820168885e37ef651eedb395eca 100644 (file)
@@ -352,6 +352,7 @@ struct sock {
                                sk_no_check  : 2,
                                sk_userlocks : 4,
                                sk_protocol  : 8,
+#define SK_PROTOCOL_MAX U8_MAX
                                sk_type      : 16;
        kmemcheck_bitfield_end(flags);
        int                     sk_wmem_queued;
@@ -672,6 +673,8 @@ enum sock_flags {
        SOCK_SELECT_ERR_QUEUE, /* Wake select on error queue */
 };
 
+#define SK_FLAGS_TIMESTAMP ((1UL << SOCK_TIMESTAMP) | (1UL << SOCK_TIMESTAMPING_RX_SOFTWARE))
+
 static inline void sock_copy_flags(struct sock *nsk, struct sock *osk)
 {
        nsk->sk_flags = osk->sk_flags;
@@ -786,6 +789,15 @@ static inline __must_check int sk_add_backlog(struct sock *sk, struct sk_buff *s
                #endif          
                return -ENOBUFS;
        }
+
+       /*
+        * If the skb was allocated from pfmemalloc reserves, only
+        * allow SOCK_MEMALLOC sockets to use it as this socket is
+        * helping free memory
+        */
+       if (skb_pfmemalloc(skb) && !sock_flag(sk, SOCK_MEMALLOC))
+               return -ENOMEM;
+
        __sk_add_backlog(sk, skb);
        sk->sk_backlog.len += skb->truesize;
        return 0;