drm/amd/display: Implement bounds check for stream encoder creation in DCN301
[platform/kernel/linux-starfive.git] / net / vmw_vsock / af_vsock.c
index 020cf17..4afb6a5 100644 (file)
@@ -89,6 +89,7 @@
 #include <linux/types.h>
 #include <linux/bitops.h>
 #include <linux/cred.h>
+#include <linux/errqueue.h>
 #include <linux/init.h>
 #include <linux/io.h>
 #include <linux/kernel.h>
 #include <linux/workqueue.h>
 #include <net/sock.h>
 #include <net/af_vsock.h>
+#include <uapi/linux/vm_sockets.h>
 
 static int __vsock_bind(struct sock *sk, struct sockaddr_vm *addr);
 static void vsock_sk_destruct(struct sock *sk);
@@ -2134,6 +2136,10 @@ vsock_connectible_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
        int err;
 
        sk = sock->sk;
+
+       if (unlikely(flags & MSG_ERRQUEUE))
+               return sock_recv_errqueue(sk, msg, len, SOL_VSOCK, VSOCK_RECVERR);
+
        vsk = vsock_sk(sk);
        err = 0;
 
@@ -2208,8 +2214,13 @@ static int vsock_set_rcvlowat(struct sock *sk, int val)
 
        transport = vsk->transport;
 
-       if (transport && transport->set_rcvlowat)
-               return transport->set_rcvlowat(vsk, val);
+       if (transport && transport->notify_set_rcvlowat) {
+               int err;
+
+               err = transport->notify_set_rcvlowat(vsk, val);
+               if (err)
+                       return err;
+       }
 
        WRITE_ONCE(sk->sk_rcvlowat, val ? : 1);
        return 0;