static void sock_recv_mark(struct msghdr *msg, struct sock *sk,
                           struct sk_buff *skb)
 {
-       if (sock_flag(sk, SOCK_RCVMARK) && skb)
-               put_cmsg(msg, SOL_SOCKET, SO_MARK, sizeof(__u32),
-                        &skb->mark);
+       if (sock_flag(sk, SOCK_RCVMARK) && skb) {
+               /* We must use a bounce buffer for CONFIG_HARDENED_USERCOPY=y */
+               __u32 mark = skb->mark;
+
+               put_cmsg(msg, SOL_SOCKET, SO_MARK, sizeof(__u32), &mark);
+       }
 }
 
 void __sock_recv_cmsgs(struct msghdr *msg, struct sock *sk,