0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082
0083
0084
0085
0086
0087
0088 #include <linux/compat.h>
0089 #include <linux/types.h>
0090 #include <linux/bitops.h>
0091 #include <linux/cred.h>
0092 #include <linux/init.h>
0093 #include <linux/io.h>
0094 #include <linux/kernel.h>
0095 #include <linux/sched/signal.h>
0096 #include <linux/kmod.h>
0097 #include <linux/list.h>
0098 #include <linux/miscdevice.h>
0099 #include <linux/module.h>
0100 #include <linux/mutex.h>
0101 #include <linux/net.h>
0102 #include <linux/poll.h>
0103 #include <linux/random.h>
0104 #include <linux/skbuff.h>
0105 #include <linux/smp.h>
0106 #include <linux/socket.h>
0107 #include <linux/stddef.h>
0108 #include <linux/unistd.h>
0109 #include <linux/wait.h>
0110 #include <linux/workqueue.h>
0111 #include <net/sock.h>
0112 #include <net/af_vsock.h>
0113
0114 static int __vsock_bind(struct sock *sk, struct sockaddr_vm *addr);
0115 static void vsock_sk_destruct(struct sock *sk);
0116 static int vsock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb);
0117
0118
0119 static struct proto vsock_proto = {
0120 .name = "AF_VSOCK",
0121 .owner = THIS_MODULE,
0122 .obj_size = sizeof(struct vsock_sock),
0123 };
0124
0125
0126
0127
0128 #define VSOCK_DEFAULT_CONNECT_TIMEOUT (2 * HZ)
0129
0130 #define VSOCK_DEFAULT_BUFFER_SIZE (1024 * 256)
0131 #define VSOCK_DEFAULT_BUFFER_MAX_SIZE (1024 * 256)
0132 #define VSOCK_DEFAULT_BUFFER_MIN_SIZE 128
0133
0134
0135 static const struct vsock_transport *transport_h2g;
0136
0137 static const struct vsock_transport *transport_g2h;
0138
0139 static const struct vsock_transport *transport_dgram;
0140
0141 static const struct vsock_transport *transport_local;
0142 static DEFINE_MUTEX(vsock_register_mutex);
0143
0144
0145
0146
0147
0148
0149
0150
0151
0152
0153
0154
0155
0156
0157
0158
0159
0160 #define MAX_PORT_RETRIES 24
0161
0162 #define VSOCK_HASH(addr) ((addr)->svm_port % VSOCK_HASH_SIZE)
0163 #define vsock_bound_sockets(addr) (&vsock_bind_table[VSOCK_HASH(addr)])
0164 #define vsock_unbound_sockets (&vsock_bind_table[VSOCK_HASH_SIZE])
0165
0166
0167 #define VSOCK_CONN_HASH(src, dst) \
0168 (((src)->svm_cid ^ (dst)->svm_port) % VSOCK_HASH_SIZE)
0169 #define vsock_connected_sockets(src, dst) \
0170 (&vsock_connected_table[VSOCK_CONN_HASH(src, dst)])
0171 #define vsock_connected_sockets_vsk(vsk) \
0172 vsock_connected_sockets(&(vsk)->remote_addr, &(vsk)->local_addr)
0173
0174 struct list_head vsock_bind_table[VSOCK_HASH_SIZE + 1];
0175 EXPORT_SYMBOL_GPL(vsock_bind_table);
0176 struct list_head vsock_connected_table[VSOCK_HASH_SIZE];
0177 EXPORT_SYMBOL_GPL(vsock_connected_table);
0178 DEFINE_SPINLOCK(vsock_table_lock);
0179 EXPORT_SYMBOL_GPL(vsock_table_lock);
0180
0181
0182 static int vsock_auto_bind(struct vsock_sock *vsk)
0183 {
0184 struct sock *sk = sk_vsock(vsk);
0185 struct sockaddr_vm local_addr;
0186
0187 if (vsock_addr_bound(&vsk->local_addr))
0188 return 0;
0189 vsock_addr_init(&local_addr, VMADDR_CID_ANY, VMADDR_PORT_ANY);
0190 return __vsock_bind(sk, &local_addr);
0191 }
0192
0193 static void vsock_init_tables(void)
0194 {
0195 int i;
0196
0197 for (i = 0; i < ARRAY_SIZE(vsock_bind_table); i++)
0198 INIT_LIST_HEAD(&vsock_bind_table[i]);
0199
0200 for (i = 0; i < ARRAY_SIZE(vsock_connected_table); i++)
0201 INIT_LIST_HEAD(&vsock_connected_table[i]);
0202 }
0203
0204 static void __vsock_insert_bound(struct list_head *list,
0205 struct vsock_sock *vsk)
0206 {
0207 sock_hold(&vsk->sk);
0208 list_add(&vsk->bound_table, list);
0209 }
0210
0211 static void __vsock_insert_connected(struct list_head *list,
0212 struct vsock_sock *vsk)
0213 {
0214 sock_hold(&vsk->sk);
0215 list_add(&vsk->connected_table, list);
0216 }
0217
0218 static void __vsock_remove_bound(struct vsock_sock *vsk)
0219 {
0220 list_del_init(&vsk->bound_table);
0221 sock_put(&vsk->sk);
0222 }
0223
0224 static void __vsock_remove_connected(struct vsock_sock *vsk)
0225 {
0226 list_del_init(&vsk->connected_table);
0227 sock_put(&vsk->sk);
0228 }
0229
0230 static struct sock *__vsock_find_bound_socket(struct sockaddr_vm *addr)
0231 {
0232 struct vsock_sock *vsk;
0233
0234 list_for_each_entry(vsk, vsock_bound_sockets(addr), bound_table) {
0235 if (vsock_addr_equals_addr(addr, &vsk->local_addr))
0236 return sk_vsock(vsk);
0237
0238 if (addr->svm_port == vsk->local_addr.svm_port &&
0239 (vsk->local_addr.svm_cid == VMADDR_CID_ANY ||
0240 addr->svm_cid == VMADDR_CID_ANY))
0241 return sk_vsock(vsk);
0242 }
0243
0244 return NULL;
0245 }
0246
0247 static struct sock *__vsock_find_connected_socket(struct sockaddr_vm *src,
0248 struct sockaddr_vm *dst)
0249 {
0250 struct vsock_sock *vsk;
0251
0252 list_for_each_entry(vsk, vsock_connected_sockets(src, dst),
0253 connected_table) {
0254 if (vsock_addr_equals_addr(src, &vsk->remote_addr) &&
0255 dst->svm_port == vsk->local_addr.svm_port) {
0256 return sk_vsock(vsk);
0257 }
0258 }
0259
0260 return NULL;
0261 }
0262
0263 static void vsock_insert_unbound(struct vsock_sock *vsk)
0264 {
0265 spin_lock_bh(&vsock_table_lock);
0266 __vsock_insert_bound(vsock_unbound_sockets, vsk);
0267 spin_unlock_bh(&vsock_table_lock);
0268 }
0269
0270 void vsock_insert_connected(struct vsock_sock *vsk)
0271 {
0272 struct list_head *list = vsock_connected_sockets(
0273 &vsk->remote_addr, &vsk->local_addr);
0274
0275 spin_lock_bh(&vsock_table_lock);
0276 __vsock_insert_connected(list, vsk);
0277 spin_unlock_bh(&vsock_table_lock);
0278 }
0279 EXPORT_SYMBOL_GPL(vsock_insert_connected);
0280
0281 void vsock_remove_bound(struct vsock_sock *vsk)
0282 {
0283 spin_lock_bh(&vsock_table_lock);
0284 if (__vsock_in_bound_table(vsk))
0285 __vsock_remove_bound(vsk);
0286 spin_unlock_bh(&vsock_table_lock);
0287 }
0288 EXPORT_SYMBOL_GPL(vsock_remove_bound);
0289
0290 void vsock_remove_connected(struct vsock_sock *vsk)
0291 {
0292 spin_lock_bh(&vsock_table_lock);
0293 if (__vsock_in_connected_table(vsk))
0294 __vsock_remove_connected(vsk);
0295 spin_unlock_bh(&vsock_table_lock);
0296 }
0297 EXPORT_SYMBOL_GPL(vsock_remove_connected);
0298
0299 struct sock *vsock_find_bound_socket(struct sockaddr_vm *addr)
0300 {
0301 struct sock *sk;
0302
0303 spin_lock_bh(&vsock_table_lock);
0304 sk = __vsock_find_bound_socket(addr);
0305 if (sk)
0306 sock_hold(sk);
0307
0308 spin_unlock_bh(&vsock_table_lock);
0309
0310 return sk;
0311 }
0312 EXPORT_SYMBOL_GPL(vsock_find_bound_socket);
0313
0314 struct sock *vsock_find_connected_socket(struct sockaddr_vm *src,
0315 struct sockaddr_vm *dst)
0316 {
0317 struct sock *sk;
0318
0319 spin_lock_bh(&vsock_table_lock);
0320 sk = __vsock_find_connected_socket(src, dst);
0321 if (sk)
0322 sock_hold(sk);
0323
0324 spin_unlock_bh(&vsock_table_lock);
0325
0326 return sk;
0327 }
0328 EXPORT_SYMBOL_GPL(vsock_find_connected_socket);
0329
0330 void vsock_remove_sock(struct vsock_sock *vsk)
0331 {
0332 vsock_remove_bound(vsk);
0333 vsock_remove_connected(vsk);
0334 }
0335 EXPORT_SYMBOL_GPL(vsock_remove_sock);
0336
0337 void vsock_for_each_connected_socket(struct vsock_transport *transport,
0338 void (*fn)(struct sock *sk))
0339 {
0340 int i;
0341
0342 spin_lock_bh(&vsock_table_lock);
0343
0344 for (i = 0; i < ARRAY_SIZE(vsock_connected_table); i++) {
0345 struct vsock_sock *vsk;
0346 list_for_each_entry(vsk, &vsock_connected_table[i],
0347 connected_table) {
0348 if (vsk->transport != transport)
0349 continue;
0350
0351 fn(sk_vsock(vsk));
0352 }
0353 }
0354
0355 spin_unlock_bh(&vsock_table_lock);
0356 }
0357 EXPORT_SYMBOL_GPL(vsock_for_each_connected_socket);
0358
0359 void vsock_add_pending(struct sock *listener, struct sock *pending)
0360 {
0361 struct vsock_sock *vlistener;
0362 struct vsock_sock *vpending;
0363
0364 vlistener = vsock_sk(listener);
0365 vpending = vsock_sk(pending);
0366
0367 sock_hold(pending);
0368 sock_hold(listener);
0369 list_add_tail(&vpending->pending_links, &vlistener->pending_links);
0370 }
0371 EXPORT_SYMBOL_GPL(vsock_add_pending);
0372
0373 void vsock_remove_pending(struct sock *listener, struct sock *pending)
0374 {
0375 struct vsock_sock *vpending = vsock_sk(pending);
0376
0377 list_del_init(&vpending->pending_links);
0378 sock_put(listener);
0379 sock_put(pending);
0380 }
0381 EXPORT_SYMBOL_GPL(vsock_remove_pending);
0382
0383 void vsock_enqueue_accept(struct sock *listener, struct sock *connected)
0384 {
0385 struct vsock_sock *vlistener;
0386 struct vsock_sock *vconnected;
0387
0388 vlistener = vsock_sk(listener);
0389 vconnected = vsock_sk(connected);
0390
0391 sock_hold(connected);
0392 sock_hold(listener);
0393 list_add_tail(&vconnected->accept_queue, &vlistener->accept_queue);
0394 }
0395 EXPORT_SYMBOL_GPL(vsock_enqueue_accept);
0396
0397 static bool vsock_use_local_transport(unsigned int remote_cid)
0398 {
0399 if (!transport_local)
0400 return false;
0401
0402 if (remote_cid == VMADDR_CID_LOCAL)
0403 return true;
0404
0405 if (transport_g2h) {
0406 return remote_cid == transport_g2h->get_local_cid();
0407 } else {
0408 return remote_cid == VMADDR_CID_HOST;
0409 }
0410 }
0411
0412 static void vsock_deassign_transport(struct vsock_sock *vsk)
0413 {
0414 if (!vsk->transport)
0415 return;
0416
0417 vsk->transport->destruct(vsk);
0418 module_put(vsk->transport->module);
0419 vsk->transport = NULL;
0420 }
0421
0422
0423
0424
0425
0426
0427
0428
0429
0430
0431
0432
0433
0434 int vsock_assign_transport(struct vsock_sock *vsk, struct vsock_sock *psk)
0435 {
0436 const struct vsock_transport *new_transport;
0437 struct sock *sk = sk_vsock(vsk);
0438 unsigned int remote_cid = vsk->remote_addr.svm_cid;
0439 __u8 remote_flags;
0440 int ret;
0441
0442
0443
0444
0445
0446
0447
0448
0449
0450 if (psk && vsk->local_addr.svm_cid > VMADDR_CID_HOST &&
0451 vsk->remote_addr.svm_cid > VMADDR_CID_HOST)
0452 vsk->remote_addr.svm_flags |= VMADDR_FLAG_TO_HOST;
0453
0454 remote_flags = vsk->remote_addr.svm_flags;
0455
0456 switch (sk->sk_type) {
0457 case SOCK_DGRAM:
0458 new_transport = transport_dgram;
0459 break;
0460 case SOCK_STREAM:
0461 case SOCK_SEQPACKET:
0462 if (vsock_use_local_transport(remote_cid))
0463 new_transport = transport_local;
0464 else if (remote_cid <= VMADDR_CID_HOST || !transport_h2g ||
0465 (remote_flags & VMADDR_FLAG_TO_HOST))
0466 new_transport = transport_g2h;
0467 else
0468 new_transport = transport_h2g;
0469 break;
0470 default:
0471 return -ESOCKTNOSUPPORT;
0472 }
0473
0474 if (vsk->transport) {
0475 if (vsk->transport == new_transport)
0476 return 0;
0477
0478
0479
0480
0481
0482
0483
0484 vsk->transport->release(vsk);
0485 vsock_deassign_transport(vsk);
0486 }
0487
0488
0489
0490
0491 if (!new_transport || !try_module_get(new_transport->module))
0492 return -ENODEV;
0493
0494 if (sk->sk_type == SOCK_SEQPACKET) {
0495 if (!new_transport->seqpacket_allow ||
0496 !new_transport->seqpacket_allow(remote_cid)) {
0497 module_put(new_transport->module);
0498 return -ESOCKTNOSUPPORT;
0499 }
0500 }
0501
0502 ret = new_transport->init(vsk, psk);
0503 if (ret) {
0504 module_put(new_transport->module);
0505 return ret;
0506 }
0507
0508 vsk->transport = new_transport;
0509
0510 return 0;
0511 }
0512 EXPORT_SYMBOL_GPL(vsock_assign_transport);
0513
0514 bool vsock_find_cid(unsigned int cid)
0515 {
0516 if (transport_g2h && cid == transport_g2h->get_local_cid())
0517 return true;
0518
0519 if (transport_h2g && cid == VMADDR_CID_HOST)
0520 return true;
0521
0522 if (transport_local && cid == VMADDR_CID_LOCAL)
0523 return true;
0524
0525 return false;
0526 }
0527 EXPORT_SYMBOL_GPL(vsock_find_cid);
0528
0529 static struct sock *vsock_dequeue_accept(struct sock *listener)
0530 {
0531 struct vsock_sock *vlistener;
0532 struct vsock_sock *vconnected;
0533
0534 vlistener = vsock_sk(listener);
0535
0536 if (list_empty(&vlistener->accept_queue))
0537 return NULL;
0538
0539 vconnected = list_entry(vlistener->accept_queue.next,
0540 struct vsock_sock, accept_queue);
0541
0542 list_del_init(&vconnected->accept_queue);
0543 sock_put(listener);
0544
0545
0546
0547
0548 return sk_vsock(vconnected);
0549 }
0550
0551 static bool vsock_is_accept_queue_empty(struct sock *sk)
0552 {
0553 struct vsock_sock *vsk = vsock_sk(sk);
0554 return list_empty(&vsk->accept_queue);
0555 }
0556
0557 static bool vsock_is_pending(struct sock *sk)
0558 {
0559 struct vsock_sock *vsk = vsock_sk(sk);
0560 return !list_empty(&vsk->pending_links);
0561 }
0562
0563 static int vsock_send_shutdown(struct sock *sk, int mode)
0564 {
0565 struct vsock_sock *vsk = vsock_sk(sk);
0566
0567 if (!vsk->transport)
0568 return -ENODEV;
0569
0570 return vsk->transport->shutdown(vsk, mode);
0571 }
0572
0573 static void vsock_pending_work(struct work_struct *work)
0574 {
0575 struct sock *sk;
0576 struct sock *listener;
0577 struct vsock_sock *vsk;
0578 bool cleanup;
0579
0580 vsk = container_of(work, struct vsock_sock, pending_work.work);
0581 sk = sk_vsock(vsk);
0582 listener = vsk->listener;
0583 cleanup = true;
0584
0585 lock_sock(listener);
0586 lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
0587
0588 if (vsock_is_pending(sk)) {
0589 vsock_remove_pending(listener, sk);
0590
0591 sk_acceptq_removed(listener);
0592 } else if (!vsk->rejected) {
0593
0594
0595
0596
0597
0598 cleanup = false;
0599 goto out;
0600 }
0601
0602
0603
0604
0605
0606 vsock_remove_connected(vsk);
0607
0608 sk->sk_state = TCP_CLOSE;
0609
0610 out:
0611 release_sock(sk);
0612 release_sock(listener);
0613 if (cleanup)
0614 sock_put(sk);
0615
0616 sock_put(sk);
0617 sock_put(listener);
0618 }
0619
0620
0621
0622 static int __vsock_bind_connectible(struct vsock_sock *vsk,
0623 struct sockaddr_vm *addr)
0624 {
0625 static u32 port;
0626 struct sockaddr_vm new_addr;
0627
0628 if (!port)
0629 port = LAST_RESERVED_PORT + 1 +
0630 prandom_u32_max(U32_MAX - LAST_RESERVED_PORT);
0631
0632 vsock_addr_init(&new_addr, addr->svm_cid, addr->svm_port);
0633
0634 if (addr->svm_port == VMADDR_PORT_ANY) {
0635 bool found = false;
0636 unsigned int i;
0637
0638 for (i = 0; i < MAX_PORT_RETRIES; i++) {
0639 if (port <= LAST_RESERVED_PORT)
0640 port = LAST_RESERVED_PORT + 1;
0641
0642 new_addr.svm_port = port++;
0643
0644 if (!__vsock_find_bound_socket(&new_addr)) {
0645 found = true;
0646 break;
0647 }
0648 }
0649
0650 if (!found)
0651 return -EADDRNOTAVAIL;
0652 } else {
0653
0654
0655
0656 if (addr->svm_port <= LAST_RESERVED_PORT &&
0657 !capable(CAP_NET_BIND_SERVICE)) {
0658 return -EACCES;
0659 }
0660
0661 if (__vsock_find_bound_socket(&new_addr))
0662 return -EADDRINUSE;
0663 }
0664
0665 vsock_addr_init(&vsk->local_addr, new_addr.svm_cid, new_addr.svm_port);
0666
0667
0668
0669
0670
0671
0672 __vsock_remove_bound(vsk);
0673 __vsock_insert_bound(vsock_bound_sockets(&vsk->local_addr), vsk);
0674
0675 return 0;
0676 }
0677
0678 static int __vsock_bind_dgram(struct vsock_sock *vsk,
0679 struct sockaddr_vm *addr)
0680 {
0681 return vsk->transport->dgram_bind(vsk, addr);
0682 }
0683
0684 static int __vsock_bind(struct sock *sk, struct sockaddr_vm *addr)
0685 {
0686 struct vsock_sock *vsk = vsock_sk(sk);
0687 int retval;
0688
0689
0690 if (vsock_addr_bound(&vsk->local_addr))
0691 return -EINVAL;
0692
0693
0694
0695
0696
0697
0698 if (addr->svm_cid != VMADDR_CID_ANY && !vsock_find_cid(addr->svm_cid))
0699 return -EADDRNOTAVAIL;
0700
0701 switch (sk->sk_socket->type) {
0702 case SOCK_STREAM:
0703 case SOCK_SEQPACKET:
0704 spin_lock_bh(&vsock_table_lock);
0705 retval = __vsock_bind_connectible(vsk, addr);
0706 spin_unlock_bh(&vsock_table_lock);
0707 break;
0708
0709 case SOCK_DGRAM:
0710 retval = __vsock_bind_dgram(vsk, addr);
0711 break;
0712
0713 default:
0714 retval = -EINVAL;
0715 break;
0716 }
0717
0718 return retval;
0719 }
0720
0721 static void vsock_connect_timeout(struct work_struct *work);
0722
0723 static struct sock *__vsock_create(struct net *net,
0724 struct socket *sock,
0725 struct sock *parent,
0726 gfp_t priority,
0727 unsigned short type,
0728 int kern)
0729 {
0730 struct sock *sk;
0731 struct vsock_sock *psk;
0732 struct vsock_sock *vsk;
0733
0734 sk = sk_alloc(net, AF_VSOCK, priority, &vsock_proto, kern);
0735 if (!sk)
0736 return NULL;
0737
0738 sock_init_data(sock, sk);
0739
0740
0741
0742
0743
0744 if (!sock)
0745 sk->sk_type = type;
0746
0747 vsk = vsock_sk(sk);
0748 vsock_addr_init(&vsk->local_addr, VMADDR_CID_ANY, VMADDR_PORT_ANY);
0749 vsock_addr_init(&vsk->remote_addr, VMADDR_CID_ANY, VMADDR_PORT_ANY);
0750
0751 sk->sk_destruct = vsock_sk_destruct;
0752 sk->sk_backlog_rcv = vsock_queue_rcv_skb;
0753 sock_reset_flag(sk, SOCK_DONE);
0754
0755 INIT_LIST_HEAD(&vsk->bound_table);
0756 INIT_LIST_HEAD(&vsk->connected_table);
0757 vsk->listener = NULL;
0758 INIT_LIST_HEAD(&vsk->pending_links);
0759 INIT_LIST_HEAD(&vsk->accept_queue);
0760 vsk->rejected = false;
0761 vsk->sent_request = false;
0762 vsk->ignore_connecting_rst = false;
0763 vsk->peer_shutdown = 0;
0764 INIT_DELAYED_WORK(&vsk->connect_work, vsock_connect_timeout);
0765 INIT_DELAYED_WORK(&vsk->pending_work, vsock_pending_work);
0766
0767 psk = parent ? vsock_sk(parent) : NULL;
0768 if (parent) {
0769 vsk->trusted = psk->trusted;
0770 vsk->owner = get_cred(psk->owner);
0771 vsk->connect_timeout = psk->connect_timeout;
0772 vsk->buffer_size = psk->buffer_size;
0773 vsk->buffer_min_size = psk->buffer_min_size;
0774 vsk->buffer_max_size = psk->buffer_max_size;
0775 security_sk_clone(parent, sk);
0776 } else {
0777 vsk->trusted = ns_capable_noaudit(&init_user_ns, CAP_NET_ADMIN);
0778 vsk->owner = get_current_cred();
0779 vsk->connect_timeout = VSOCK_DEFAULT_CONNECT_TIMEOUT;
0780 vsk->buffer_size = VSOCK_DEFAULT_BUFFER_SIZE;
0781 vsk->buffer_min_size = VSOCK_DEFAULT_BUFFER_MIN_SIZE;
0782 vsk->buffer_max_size = VSOCK_DEFAULT_BUFFER_MAX_SIZE;
0783 }
0784
0785 return sk;
0786 }
0787
0788 static bool sock_type_connectible(u16 type)
0789 {
0790 return (type == SOCK_STREAM) || (type == SOCK_SEQPACKET);
0791 }
0792
0793 static void __vsock_release(struct sock *sk, int level)
0794 {
0795 if (sk) {
0796 struct sock *pending;
0797 struct vsock_sock *vsk;
0798
0799 vsk = vsock_sk(sk);
0800 pending = NULL;
0801
0802
0803
0804
0805
0806
0807 lock_sock_nested(sk, level);
0808
0809 if (vsk->transport)
0810 vsk->transport->release(vsk);
0811 else if (sock_type_connectible(sk->sk_type))
0812 vsock_remove_sock(vsk);
0813
0814 sock_orphan(sk);
0815 sk->sk_shutdown = SHUTDOWN_MASK;
0816
0817 skb_queue_purge(&sk->sk_receive_queue);
0818
0819
0820 while ((pending = vsock_dequeue_accept(sk)) != NULL) {
0821 __vsock_release(pending, SINGLE_DEPTH_NESTING);
0822 sock_put(pending);
0823 }
0824
0825 release_sock(sk);
0826 sock_put(sk);
0827 }
0828 }
0829
0830 static void vsock_sk_destruct(struct sock *sk)
0831 {
0832 struct vsock_sock *vsk = vsock_sk(sk);
0833
0834 vsock_deassign_transport(vsk);
0835
0836
0837
0838
0839 vsock_addr_init(&vsk->local_addr, VMADDR_CID_ANY, VMADDR_PORT_ANY);
0840 vsock_addr_init(&vsk->remote_addr, VMADDR_CID_ANY, VMADDR_PORT_ANY);
0841
0842 put_cred(vsk->owner);
0843 }
0844
0845 static int vsock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
0846 {
0847 int err;
0848
0849 err = sock_queue_rcv_skb(sk, skb);
0850 if (err)
0851 kfree_skb(skb);
0852
0853 return err;
0854 }
0855
0856 struct sock *vsock_create_connected(struct sock *parent)
0857 {
0858 return __vsock_create(sock_net(parent), NULL, parent, GFP_KERNEL,
0859 parent->sk_type, 0);
0860 }
0861 EXPORT_SYMBOL_GPL(vsock_create_connected);
0862
0863 s64 vsock_stream_has_data(struct vsock_sock *vsk)
0864 {
0865 return vsk->transport->stream_has_data(vsk);
0866 }
0867 EXPORT_SYMBOL_GPL(vsock_stream_has_data);
0868
0869 static s64 vsock_connectible_has_data(struct vsock_sock *vsk)
0870 {
0871 struct sock *sk = sk_vsock(vsk);
0872
0873 if (sk->sk_type == SOCK_SEQPACKET)
0874 return vsk->transport->seqpacket_has_data(vsk);
0875 else
0876 return vsock_stream_has_data(vsk);
0877 }
0878
0879 s64 vsock_stream_has_space(struct vsock_sock *vsk)
0880 {
0881 return vsk->transport->stream_has_space(vsk);
0882 }
0883 EXPORT_SYMBOL_GPL(vsock_stream_has_space);
0884
0885 static int vsock_release(struct socket *sock)
0886 {
0887 __vsock_release(sock->sk, 0);
0888 sock->sk = NULL;
0889 sock->state = SS_FREE;
0890
0891 return 0;
0892 }
0893
0894 static int
0895 vsock_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
0896 {
0897 int err;
0898 struct sock *sk;
0899 struct sockaddr_vm *vm_addr;
0900
0901 sk = sock->sk;
0902
0903 if (vsock_addr_cast(addr, addr_len, &vm_addr) != 0)
0904 return -EINVAL;
0905
0906 lock_sock(sk);
0907 err = __vsock_bind(sk, vm_addr);
0908 release_sock(sk);
0909
0910 return err;
0911 }
0912
0913 static int vsock_getname(struct socket *sock,
0914 struct sockaddr *addr, int peer)
0915 {
0916 int err;
0917 struct sock *sk;
0918 struct vsock_sock *vsk;
0919 struct sockaddr_vm *vm_addr;
0920
0921 sk = sock->sk;
0922 vsk = vsock_sk(sk);
0923 err = 0;
0924
0925 lock_sock(sk);
0926
0927 if (peer) {
0928 if (sock->state != SS_CONNECTED) {
0929 err = -ENOTCONN;
0930 goto out;
0931 }
0932 vm_addr = &vsk->remote_addr;
0933 } else {
0934 vm_addr = &vsk->local_addr;
0935 }
0936
0937 if (!vm_addr) {
0938 err = -EINVAL;
0939 goto out;
0940 }
0941
0942
0943
0944
0945
0946
0947 BUILD_BUG_ON(sizeof(*vm_addr) > 128);
0948 memcpy(addr, vm_addr, sizeof(*vm_addr));
0949 err = sizeof(*vm_addr);
0950
0951 out:
0952 release_sock(sk);
0953 return err;
0954 }
0955
0956 static int vsock_shutdown(struct socket *sock, int mode)
0957 {
0958 int err;
0959 struct sock *sk;
0960
0961
0962
0963
0964
0965
0966
0967 mode++;
0968
0969 if ((mode & ~SHUTDOWN_MASK) || !mode)
0970 return -EINVAL;
0971
0972
0973
0974
0975
0976
0977
0978 sk = sock->sk;
0979
0980 lock_sock(sk);
0981 if (sock->state == SS_UNCONNECTED) {
0982 err = -ENOTCONN;
0983 if (sock_type_connectible(sk->sk_type))
0984 goto out;
0985 } else {
0986 sock->state = SS_DISCONNECTING;
0987 err = 0;
0988 }
0989
0990
0991 mode = mode & (RCV_SHUTDOWN | SEND_SHUTDOWN);
0992 if (mode) {
0993 sk->sk_shutdown |= mode;
0994 sk->sk_state_change(sk);
0995
0996 if (sock_type_connectible(sk->sk_type)) {
0997 sock_reset_flag(sk, SOCK_DONE);
0998 vsock_send_shutdown(sk, mode);
0999 }
1000 }
1001
1002 out:
1003 release_sock(sk);
1004 return err;
1005 }
1006
1007 static __poll_t vsock_poll(struct file *file, struct socket *sock,
1008 poll_table *wait)
1009 {
1010 struct sock *sk;
1011 __poll_t mask;
1012 struct vsock_sock *vsk;
1013
1014 sk = sock->sk;
1015 vsk = vsock_sk(sk);
1016
1017 poll_wait(file, sk_sleep(sk), wait);
1018 mask = 0;
1019
1020 if (sk->sk_err)
1021
1022 mask |= EPOLLERR;
1023
1024
1025
1026
1027 if ((sk->sk_shutdown == SHUTDOWN_MASK) ||
1028 ((sk->sk_shutdown & SEND_SHUTDOWN) &&
1029 (vsk->peer_shutdown & SEND_SHUTDOWN))) {
1030 mask |= EPOLLHUP;
1031 }
1032
1033 if (sk->sk_shutdown & RCV_SHUTDOWN ||
1034 vsk->peer_shutdown & SEND_SHUTDOWN) {
1035 mask |= EPOLLRDHUP;
1036 }
1037
1038 if (sock->type == SOCK_DGRAM) {
1039
1040
1041
1042
1043 if (!skb_queue_empty_lockless(&sk->sk_receive_queue) ||
1044 (sk->sk_shutdown & RCV_SHUTDOWN)) {
1045 mask |= EPOLLIN | EPOLLRDNORM;
1046 }
1047
1048 if (!(sk->sk_shutdown & SEND_SHUTDOWN))
1049 mask |= EPOLLOUT | EPOLLWRNORM | EPOLLWRBAND;
1050
1051 } else if (sock_type_connectible(sk->sk_type)) {
1052 const struct vsock_transport *transport;
1053
1054 lock_sock(sk);
1055
1056 transport = vsk->transport;
1057
1058
1059
1060
1061 if (sk->sk_state == TCP_LISTEN
1062 && !vsock_is_accept_queue_empty(sk))
1063 mask |= EPOLLIN | EPOLLRDNORM;
1064
1065
1066 if (transport && transport->stream_is_active(vsk) &&
1067 !(sk->sk_shutdown & RCV_SHUTDOWN)) {
1068 bool data_ready_now = false;
1069 int ret = transport->notify_poll_in(
1070 vsk, 1, &data_ready_now);
1071 if (ret < 0) {
1072 mask |= EPOLLERR;
1073 } else {
1074 if (data_ready_now)
1075 mask |= EPOLLIN | EPOLLRDNORM;
1076
1077 }
1078 }
1079
1080
1081
1082
1083
1084 if (sk->sk_shutdown & RCV_SHUTDOWN ||
1085 vsk->peer_shutdown & SEND_SHUTDOWN) {
1086 mask |= EPOLLIN | EPOLLRDNORM;
1087 }
1088
1089
1090 if (transport && sk->sk_state == TCP_ESTABLISHED) {
1091 if (!(sk->sk_shutdown & SEND_SHUTDOWN)) {
1092 bool space_avail_now = false;
1093 int ret = transport->notify_poll_out(
1094 vsk, 1, &space_avail_now);
1095 if (ret < 0) {
1096 mask |= EPOLLERR;
1097 } else {
1098 if (space_avail_now)
1099
1100
1101
1102 mask |= EPOLLOUT | EPOLLWRNORM;
1103
1104 }
1105 }
1106 }
1107
1108
1109
1110
1111
1112 if (sk->sk_state == TCP_CLOSE || sk->sk_state == TCP_CLOSING) {
1113 if (!(sk->sk_shutdown & SEND_SHUTDOWN))
1114 mask |= EPOLLOUT | EPOLLWRNORM;
1115
1116 }
1117
1118 release_sock(sk);
1119 }
1120
1121 return mask;
1122 }
1123
1124 static int vsock_dgram_sendmsg(struct socket *sock, struct msghdr *msg,
1125 size_t len)
1126 {
1127 int err;
1128 struct sock *sk;
1129 struct vsock_sock *vsk;
1130 struct sockaddr_vm *remote_addr;
1131 const struct vsock_transport *transport;
1132
1133 if (msg->msg_flags & MSG_OOB)
1134 return -EOPNOTSUPP;
1135
1136
1137 err = 0;
1138 sk = sock->sk;
1139 vsk = vsock_sk(sk);
1140
1141 lock_sock(sk);
1142
1143 transport = vsk->transport;
1144
1145 err = vsock_auto_bind(vsk);
1146 if (err)
1147 goto out;
1148
1149
1150
1151
1152
1153 if (msg->msg_name &&
1154 vsock_addr_cast(msg->msg_name, msg->msg_namelen,
1155 &remote_addr) == 0) {
1156
1157
1158
1159
1160 if (remote_addr->svm_cid == VMADDR_CID_ANY)
1161 remote_addr->svm_cid = transport->get_local_cid();
1162
1163 if (!vsock_addr_bound(remote_addr)) {
1164 err = -EINVAL;
1165 goto out;
1166 }
1167 } else if (sock->state == SS_CONNECTED) {
1168 remote_addr = &vsk->remote_addr;
1169
1170 if (remote_addr->svm_cid == VMADDR_CID_ANY)
1171 remote_addr->svm_cid = transport->get_local_cid();
1172
1173
1174
1175
1176 if (!vsock_addr_bound(&vsk->remote_addr)) {
1177 err = -EINVAL;
1178 goto out;
1179 }
1180 } else {
1181 err = -EINVAL;
1182 goto out;
1183 }
1184
1185 if (!transport->dgram_allow(remote_addr->svm_cid,
1186 remote_addr->svm_port)) {
1187 err = -EINVAL;
1188 goto out;
1189 }
1190
1191 err = transport->dgram_enqueue(vsk, remote_addr, msg, len);
1192
1193 out:
1194 release_sock(sk);
1195 return err;
1196 }
1197
1198 static int vsock_dgram_connect(struct socket *sock,
1199 struct sockaddr *addr, int addr_len, int flags)
1200 {
1201 int err;
1202 struct sock *sk;
1203 struct vsock_sock *vsk;
1204 struct sockaddr_vm *remote_addr;
1205
1206 sk = sock->sk;
1207 vsk = vsock_sk(sk);
1208
1209 err = vsock_addr_cast(addr, addr_len, &remote_addr);
1210 if (err == -EAFNOSUPPORT && remote_addr->svm_family == AF_UNSPEC) {
1211 lock_sock(sk);
1212 vsock_addr_init(&vsk->remote_addr, VMADDR_CID_ANY,
1213 VMADDR_PORT_ANY);
1214 sock->state = SS_UNCONNECTED;
1215 release_sock(sk);
1216 return 0;
1217 } else if (err != 0)
1218 return -EINVAL;
1219
1220 lock_sock(sk);
1221
1222 err = vsock_auto_bind(vsk);
1223 if (err)
1224 goto out;
1225
1226 if (!vsk->transport->dgram_allow(remote_addr->svm_cid,
1227 remote_addr->svm_port)) {
1228 err = -EINVAL;
1229 goto out;
1230 }
1231
1232 memcpy(&vsk->remote_addr, remote_addr, sizeof(vsk->remote_addr));
1233 sock->state = SS_CONNECTED;
1234
1235 out:
1236 release_sock(sk);
1237 return err;
1238 }
1239
1240 static int vsock_dgram_recvmsg(struct socket *sock, struct msghdr *msg,
1241 size_t len, int flags)
1242 {
1243 struct vsock_sock *vsk = vsock_sk(sock->sk);
1244
1245 return vsk->transport->dgram_dequeue(vsk, msg, len, flags);
1246 }
1247
1248 static const struct proto_ops vsock_dgram_ops = {
1249 .family = PF_VSOCK,
1250 .owner = THIS_MODULE,
1251 .release = vsock_release,
1252 .bind = vsock_bind,
1253 .connect = vsock_dgram_connect,
1254 .socketpair = sock_no_socketpair,
1255 .accept = sock_no_accept,
1256 .getname = vsock_getname,
1257 .poll = vsock_poll,
1258 .ioctl = sock_no_ioctl,
1259 .listen = sock_no_listen,
1260 .shutdown = vsock_shutdown,
1261 .sendmsg = vsock_dgram_sendmsg,
1262 .recvmsg = vsock_dgram_recvmsg,
1263 .mmap = sock_no_mmap,
1264 .sendpage = sock_no_sendpage,
1265 };
1266
1267 static int vsock_transport_cancel_pkt(struct vsock_sock *vsk)
1268 {
1269 const struct vsock_transport *transport = vsk->transport;
1270
1271 if (!transport || !transport->cancel_pkt)
1272 return -EOPNOTSUPP;
1273
1274 return transport->cancel_pkt(vsk);
1275 }
1276
1277 static void vsock_connect_timeout(struct work_struct *work)
1278 {
1279 struct sock *sk;
1280 struct vsock_sock *vsk;
1281
1282 vsk = container_of(work, struct vsock_sock, connect_work.work);
1283 sk = sk_vsock(vsk);
1284
1285 lock_sock(sk);
1286 if (sk->sk_state == TCP_SYN_SENT &&
1287 (sk->sk_shutdown != SHUTDOWN_MASK)) {
1288 sk->sk_state = TCP_CLOSE;
1289 sk->sk_socket->state = SS_UNCONNECTED;
1290 sk->sk_err = ETIMEDOUT;
1291 sk_error_report(sk);
1292 vsock_transport_cancel_pkt(vsk);
1293 }
1294 release_sock(sk);
1295
1296 sock_put(sk);
1297 }
1298
1299 static int vsock_connect(struct socket *sock, struct sockaddr *addr,
1300 int addr_len, int flags)
1301 {
1302 int err;
1303 struct sock *sk;
1304 struct vsock_sock *vsk;
1305 const struct vsock_transport *transport;
1306 struct sockaddr_vm *remote_addr;
1307 long timeout;
1308 DEFINE_WAIT(wait);
1309
1310 err = 0;
1311 sk = sock->sk;
1312 vsk = vsock_sk(sk);
1313
1314 lock_sock(sk);
1315
1316
1317 switch (sock->state) {
1318 case SS_CONNECTED:
1319 err = -EISCONN;
1320 goto out;
1321 case SS_DISCONNECTING:
1322 err = -EINVAL;
1323 goto out;
1324 case SS_CONNECTING:
1325
1326
1327
1328
1329
1330
1331 err = -EALREADY;
1332 if (flags & O_NONBLOCK)
1333 goto out;
1334 break;
1335 default:
1336 if ((sk->sk_state == TCP_LISTEN) ||
1337 vsock_addr_cast(addr, addr_len, &remote_addr) != 0) {
1338 err = -EINVAL;
1339 goto out;
1340 }
1341
1342
1343 memcpy(&vsk->remote_addr, remote_addr,
1344 sizeof(vsk->remote_addr));
1345
1346 err = vsock_assign_transport(vsk, NULL);
1347 if (err)
1348 goto out;
1349
1350 transport = vsk->transport;
1351
1352
1353
1354
1355 if (!transport ||
1356 !transport->stream_allow(remote_addr->svm_cid,
1357 remote_addr->svm_port)) {
1358 err = -ENETUNREACH;
1359 goto out;
1360 }
1361
1362 err = vsock_auto_bind(vsk);
1363 if (err)
1364 goto out;
1365
1366 sk->sk_state = TCP_SYN_SENT;
1367
1368 err = transport->connect(vsk);
1369 if (err < 0)
1370 goto out;
1371
1372
1373
1374
1375 sock->state = SS_CONNECTING;
1376 err = -EINPROGRESS;
1377 }
1378
1379
1380
1381
1382
1383 timeout = vsk->connect_timeout;
1384 prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE);
1385
1386 while (sk->sk_state != TCP_ESTABLISHED && sk->sk_err == 0) {
1387 if (flags & O_NONBLOCK) {
1388
1389
1390
1391
1392
1393
1394 sock_hold(sk);
1395
1396
1397
1398
1399
1400 if (mod_delayed_work(system_wq, &vsk->connect_work,
1401 timeout))
1402 sock_put(sk);
1403
1404
1405 goto out_wait;
1406 }
1407
1408 release_sock(sk);
1409 timeout = schedule_timeout(timeout);
1410 lock_sock(sk);
1411
1412 if (signal_pending(current)) {
1413 err = sock_intr_errno(timeout);
1414 sk->sk_state = sk->sk_state == TCP_ESTABLISHED ? TCP_CLOSING : TCP_CLOSE;
1415 sock->state = SS_UNCONNECTED;
1416 vsock_transport_cancel_pkt(vsk);
1417 vsock_remove_connected(vsk);
1418 goto out_wait;
1419 } else if (timeout == 0) {
1420 err = -ETIMEDOUT;
1421 sk->sk_state = TCP_CLOSE;
1422 sock->state = SS_UNCONNECTED;
1423 vsock_transport_cancel_pkt(vsk);
1424 goto out_wait;
1425 }
1426
1427 prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE);
1428 }
1429
1430 if (sk->sk_err) {
1431 err = -sk->sk_err;
1432 sk->sk_state = TCP_CLOSE;
1433 sock->state = SS_UNCONNECTED;
1434 } else {
1435 err = 0;
1436 }
1437
1438 out_wait:
1439 finish_wait(sk_sleep(sk), &wait);
1440 out:
1441 release_sock(sk);
1442 return err;
1443 }
1444
1445 static int vsock_accept(struct socket *sock, struct socket *newsock, int flags,
1446 bool kern)
1447 {
1448 struct sock *listener;
1449 int err;
1450 struct sock *connected;
1451 struct vsock_sock *vconnected;
1452 long timeout;
1453 DEFINE_WAIT(wait);
1454
1455 err = 0;
1456 listener = sock->sk;
1457
1458 lock_sock(listener);
1459
1460 if (!sock_type_connectible(sock->type)) {
1461 err = -EOPNOTSUPP;
1462 goto out;
1463 }
1464
1465 if (listener->sk_state != TCP_LISTEN) {
1466 err = -EINVAL;
1467 goto out;
1468 }
1469
1470
1471
1472
1473 timeout = sock_rcvtimeo(listener, flags & O_NONBLOCK);
1474 prepare_to_wait(sk_sleep(listener), &wait, TASK_INTERRUPTIBLE);
1475
1476 while ((connected = vsock_dequeue_accept(listener)) == NULL &&
1477 listener->sk_err == 0) {
1478 release_sock(listener);
1479 timeout = schedule_timeout(timeout);
1480 finish_wait(sk_sleep(listener), &wait);
1481 lock_sock(listener);
1482
1483 if (signal_pending(current)) {
1484 err = sock_intr_errno(timeout);
1485 goto out;
1486 } else if (timeout == 0) {
1487 err = -EAGAIN;
1488 goto out;
1489 }
1490
1491 prepare_to_wait(sk_sleep(listener), &wait, TASK_INTERRUPTIBLE);
1492 }
1493 finish_wait(sk_sleep(listener), &wait);
1494
1495 if (listener->sk_err)
1496 err = -listener->sk_err;
1497
1498 if (connected) {
1499 sk_acceptq_removed(listener);
1500
1501 lock_sock_nested(connected, SINGLE_DEPTH_NESTING);
1502 vconnected = vsock_sk(connected);
1503
1504
1505
1506
1507
1508
1509
1510
1511 if (err) {
1512 vconnected->rejected = true;
1513 } else {
1514 newsock->state = SS_CONNECTED;
1515 sock_graft(connected, newsock);
1516 }
1517
1518 release_sock(connected);
1519 sock_put(connected);
1520 }
1521
1522 out:
1523 release_sock(listener);
1524 return err;
1525 }
1526
1527 static int vsock_listen(struct socket *sock, int backlog)
1528 {
1529 int err;
1530 struct sock *sk;
1531 struct vsock_sock *vsk;
1532
1533 sk = sock->sk;
1534
1535 lock_sock(sk);
1536
1537 if (!sock_type_connectible(sk->sk_type)) {
1538 err = -EOPNOTSUPP;
1539 goto out;
1540 }
1541
1542 if (sock->state != SS_UNCONNECTED) {
1543 err = -EINVAL;
1544 goto out;
1545 }
1546
1547 vsk = vsock_sk(sk);
1548
1549 if (!vsock_addr_bound(&vsk->local_addr)) {
1550 err = -EINVAL;
1551 goto out;
1552 }
1553
1554 sk->sk_max_ack_backlog = backlog;
1555 sk->sk_state = TCP_LISTEN;
1556
1557 err = 0;
1558
1559 out:
1560 release_sock(sk);
1561 return err;
1562 }
1563
1564 static void vsock_update_buffer_size(struct vsock_sock *vsk,
1565 const struct vsock_transport *transport,
1566 u64 val)
1567 {
1568 if (val > vsk->buffer_max_size)
1569 val = vsk->buffer_max_size;
1570
1571 if (val < vsk->buffer_min_size)
1572 val = vsk->buffer_min_size;
1573
1574 if (val != vsk->buffer_size &&
1575 transport && transport->notify_buffer_size)
1576 transport->notify_buffer_size(vsk, &val);
1577
1578 vsk->buffer_size = val;
1579 }
1580
1581 static int vsock_connectible_setsockopt(struct socket *sock,
1582 int level,
1583 int optname,
1584 sockptr_t optval,
1585 unsigned int optlen)
1586 {
1587 int err;
1588 struct sock *sk;
1589 struct vsock_sock *vsk;
1590 const struct vsock_transport *transport;
1591 u64 val;
1592
1593 if (level != AF_VSOCK)
1594 return -ENOPROTOOPT;
1595
1596 #define COPY_IN(_v) \
1597 do { \
1598 if (optlen < sizeof(_v)) { \
1599 err = -EINVAL; \
1600 goto exit; \
1601 } \
1602 if (copy_from_sockptr(&_v, optval, sizeof(_v)) != 0) { \
1603 err = -EFAULT; \
1604 goto exit; \
1605 } \
1606 } while (0)
1607
1608 err = 0;
1609 sk = sock->sk;
1610 vsk = vsock_sk(sk);
1611
1612 lock_sock(sk);
1613
1614 transport = vsk->transport;
1615
1616 switch (optname) {
1617 case SO_VM_SOCKETS_BUFFER_SIZE:
1618 COPY_IN(val);
1619 vsock_update_buffer_size(vsk, transport, val);
1620 break;
1621
1622 case SO_VM_SOCKETS_BUFFER_MAX_SIZE:
1623 COPY_IN(val);
1624 vsk->buffer_max_size = val;
1625 vsock_update_buffer_size(vsk, transport, vsk->buffer_size);
1626 break;
1627
1628 case SO_VM_SOCKETS_BUFFER_MIN_SIZE:
1629 COPY_IN(val);
1630 vsk->buffer_min_size = val;
1631 vsock_update_buffer_size(vsk, transport, vsk->buffer_size);
1632 break;
1633
1634 case SO_VM_SOCKETS_CONNECT_TIMEOUT_NEW:
1635 case SO_VM_SOCKETS_CONNECT_TIMEOUT_OLD: {
1636 struct __kernel_sock_timeval tv;
1637
1638 err = sock_copy_user_timeval(&tv, optval, optlen,
1639 optname == SO_VM_SOCKETS_CONNECT_TIMEOUT_OLD);
1640 if (err)
1641 break;
1642 if (tv.tv_sec >= 0 && tv.tv_usec < USEC_PER_SEC &&
1643 tv.tv_sec < (MAX_SCHEDULE_TIMEOUT / HZ - 1)) {
1644 vsk->connect_timeout = tv.tv_sec * HZ +
1645 DIV_ROUND_UP((unsigned long)tv.tv_usec, (USEC_PER_SEC / HZ));
1646 if (vsk->connect_timeout == 0)
1647 vsk->connect_timeout =
1648 VSOCK_DEFAULT_CONNECT_TIMEOUT;
1649
1650 } else {
1651 err = -ERANGE;
1652 }
1653 break;
1654 }
1655
1656 default:
1657 err = -ENOPROTOOPT;
1658 break;
1659 }
1660
1661 #undef COPY_IN
1662
1663 exit:
1664 release_sock(sk);
1665 return err;
1666 }
1667
1668 static int vsock_connectible_getsockopt(struct socket *sock,
1669 int level, int optname,
1670 char __user *optval,
1671 int __user *optlen)
1672 {
1673 struct sock *sk = sock->sk;
1674 struct vsock_sock *vsk = vsock_sk(sk);
1675
1676 union {
1677 u64 val64;
1678 struct old_timeval32 tm32;
1679 struct __kernel_old_timeval tm;
1680 struct __kernel_sock_timeval stm;
1681 } v;
1682
1683 int lv = sizeof(v.val64);
1684 int len;
1685
1686 if (level != AF_VSOCK)
1687 return -ENOPROTOOPT;
1688
1689 if (get_user(len, optlen))
1690 return -EFAULT;
1691
1692 memset(&v, 0, sizeof(v));
1693
1694 switch (optname) {
1695 case SO_VM_SOCKETS_BUFFER_SIZE:
1696 v.val64 = vsk->buffer_size;
1697 break;
1698
1699 case SO_VM_SOCKETS_BUFFER_MAX_SIZE:
1700 v.val64 = vsk->buffer_max_size;
1701 break;
1702
1703 case SO_VM_SOCKETS_BUFFER_MIN_SIZE:
1704 v.val64 = vsk->buffer_min_size;
1705 break;
1706
1707 case SO_VM_SOCKETS_CONNECT_TIMEOUT_NEW:
1708 case SO_VM_SOCKETS_CONNECT_TIMEOUT_OLD:
1709 lv = sock_get_timeout(vsk->connect_timeout, &v,
1710 optname == SO_VM_SOCKETS_CONNECT_TIMEOUT_OLD);
1711 break;
1712
1713 default:
1714 return -ENOPROTOOPT;
1715 }
1716
1717 if (len < lv)
1718 return -EINVAL;
1719 if (len > lv)
1720 len = lv;
1721 if (copy_to_user(optval, &v, len))
1722 return -EFAULT;
1723
1724 if (put_user(len, optlen))
1725 return -EFAULT;
1726
1727 return 0;
1728 }
1729
1730 static int vsock_connectible_sendmsg(struct socket *sock, struct msghdr *msg,
1731 size_t len)
1732 {
1733 struct sock *sk;
1734 struct vsock_sock *vsk;
1735 const struct vsock_transport *transport;
1736 ssize_t total_written;
1737 long timeout;
1738 int err;
1739 struct vsock_transport_send_notify_data send_data;
1740 DEFINE_WAIT_FUNC(wait, woken_wake_function);
1741
1742 sk = sock->sk;
1743 vsk = vsock_sk(sk);
1744 total_written = 0;
1745 err = 0;
1746
1747 if (msg->msg_flags & MSG_OOB)
1748 return -EOPNOTSUPP;
1749
1750 lock_sock(sk);
1751
1752 transport = vsk->transport;
1753
1754
1755
1756
1757 if (msg->msg_namelen) {
1758 err = sk->sk_state == TCP_ESTABLISHED ? -EISCONN : -EOPNOTSUPP;
1759 goto out;
1760 }
1761
1762
1763 if (sk->sk_shutdown & SEND_SHUTDOWN ||
1764 vsk->peer_shutdown & RCV_SHUTDOWN) {
1765 err = -EPIPE;
1766 goto out;
1767 }
1768
1769 if (!transport || sk->sk_state != TCP_ESTABLISHED ||
1770 !vsock_addr_bound(&vsk->local_addr)) {
1771 err = -ENOTCONN;
1772 goto out;
1773 }
1774
1775 if (!vsock_addr_bound(&vsk->remote_addr)) {
1776 err = -EDESTADDRREQ;
1777 goto out;
1778 }
1779
1780
1781 timeout = sock_sndtimeo(sk, msg->msg_flags & MSG_DONTWAIT);
1782
1783 err = transport->notify_send_init(vsk, &send_data);
1784 if (err < 0)
1785 goto out;
1786
1787 while (total_written < len) {
1788 ssize_t written;
1789
1790 add_wait_queue(sk_sleep(sk), &wait);
1791 while (vsock_stream_has_space(vsk) == 0 &&
1792 sk->sk_err == 0 &&
1793 !(sk->sk_shutdown & SEND_SHUTDOWN) &&
1794 !(vsk->peer_shutdown & RCV_SHUTDOWN)) {
1795
1796
1797 if (timeout == 0) {
1798 err = -EAGAIN;
1799 remove_wait_queue(sk_sleep(sk), &wait);
1800 goto out_err;
1801 }
1802
1803 err = transport->notify_send_pre_block(vsk, &send_data);
1804 if (err < 0) {
1805 remove_wait_queue(sk_sleep(sk), &wait);
1806 goto out_err;
1807 }
1808
1809 release_sock(sk);
1810 timeout = wait_woken(&wait, TASK_INTERRUPTIBLE, timeout);
1811 lock_sock(sk);
1812 if (signal_pending(current)) {
1813 err = sock_intr_errno(timeout);
1814 remove_wait_queue(sk_sleep(sk), &wait);
1815 goto out_err;
1816 } else if (timeout == 0) {
1817 err = -EAGAIN;
1818 remove_wait_queue(sk_sleep(sk), &wait);
1819 goto out_err;
1820 }
1821 }
1822 remove_wait_queue(sk_sleep(sk), &wait);
1823
1824
1825
1826
1827
1828 if (sk->sk_err) {
1829 err = -sk->sk_err;
1830 goto out_err;
1831 } else if ((sk->sk_shutdown & SEND_SHUTDOWN) ||
1832 (vsk->peer_shutdown & RCV_SHUTDOWN)) {
1833 err = -EPIPE;
1834 goto out_err;
1835 }
1836
1837 err = transport->notify_send_pre_enqueue(vsk, &send_data);
1838 if (err < 0)
1839 goto out_err;
1840
1841
1842
1843
1844
1845
1846
1847 if (sk->sk_type == SOCK_SEQPACKET) {
1848 written = transport->seqpacket_enqueue(vsk,
1849 msg, len - total_written);
1850 } else {
1851 written = transport->stream_enqueue(vsk,
1852 msg, len - total_written);
1853 }
1854 if (written < 0) {
1855 err = -ENOMEM;
1856 goto out_err;
1857 }
1858
1859 total_written += written;
1860
1861 err = transport->notify_send_post_enqueue(
1862 vsk, written, &send_data);
1863 if (err < 0)
1864 goto out_err;
1865
1866 }
1867
1868 out_err:
1869 if (total_written > 0) {
1870
1871
1872
1873
1874 if (sk->sk_type == SOCK_STREAM || total_written == len)
1875 err = total_written;
1876 }
1877 out:
1878 release_sock(sk);
1879 return err;
1880 }
1881
1882 static int vsock_connectible_wait_data(struct sock *sk,
1883 struct wait_queue_entry *wait,
1884 long timeout,
1885 struct vsock_transport_recv_notify_data *recv_data,
1886 size_t target)
1887 {
1888 const struct vsock_transport *transport;
1889 struct vsock_sock *vsk;
1890 s64 data;
1891 int err;
1892
1893 vsk = vsock_sk(sk);
1894 err = 0;
1895 transport = vsk->transport;
1896
1897 while ((data = vsock_connectible_has_data(vsk)) == 0) {
1898 prepare_to_wait(sk_sleep(sk), wait, TASK_INTERRUPTIBLE);
1899
1900 if (sk->sk_err != 0 ||
1901 (sk->sk_shutdown & RCV_SHUTDOWN) ||
1902 (vsk->peer_shutdown & SEND_SHUTDOWN)) {
1903 break;
1904 }
1905
1906
1907 if (timeout == 0) {
1908 err = -EAGAIN;
1909 break;
1910 }
1911
1912 if (recv_data) {
1913 err = transport->notify_recv_pre_block(vsk, target, recv_data);
1914 if (err < 0)
1915 break;
1916 }
1917
1918 release_sock(sk);
1919 timeout = schedule_timeout(timeout);
1920 lock_sock(sk);
1921
1922 if (signal_pending(current)) {
1923 err = sock_intr_errno(timeout);
1924 break;
1925 } else if (timeout == 0) {
1926 err = -EAGAIN;
1927 break;
1928 }
1929 }
1930
1931 finish_wait(sk_sleep(sk), wait);
1932
1933 if (err)
1934 return err;
1935
1936
1937
1938
1939
1940 if (data < 0)
1941 return -ENOMEM;
1942
1943 return data;
1944 }
1945
1946 static int __vsock_stream_recvmsg(struct sock *sk, struct msghdr *msg,
1947 size_t len, int flags)
1948 {
1949 struct vsock_transport_recv_notify_data recv_data;
1950 const struct vsock_transport *transport;
1951 struct vsock_sock *vsk;
1952 ssize_t copied;
1953 size_t target;
1954 long timeout;
1955 int err;
1956
1957 DEFINE_WAIT(wait);
1958
1959 vsk = vsock_sk(sk);
1960 transport = vsk->transport;
1961
1962
1963
1964
1965
1966
1967
1968 target = sock_rcvlowat(sk, flags & MSG_WAITALL, len);
1969 if (target >= transport->stream_rcvhiwat(vsk)) {
1970 err = -ENOMEM;
1971 goto out;
1972 }
1973 timeout = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
1974 copied = 0;
1975
1976 err = transport->notify_recv_init(vsk, target, &recv_data);
1977 if (err < 0)
1978 goto out;
1979
1980
1981 while (1) {
1982 ssize_t read;
1983
1984 err = vsock_connectible_wait_data(sk, &wait, timeout,
1985 &recv_data, target);
1986 if (err <= 0)
1987 break;
1988
1989 err = transport->notify_recv_pre_dequeue(vsk, target,
1990 &recv_data);
1991 if (err < 0)
1992 break;
1993
1994 read = transport->stream_dequeue(vsk, msg, len - copied, flags);
1995 if (read < 0) {
1996 err = -ENOMEM;
1997 break;
1998 }
1999
2000 copied += read;
2001
2002 err = transport->notify_recv_post_dequeue(vsk, target, read,
2003 !(flags & MSG_PEEK), &recv_data);
2004 if (err < 0)
2005 goto out;
2006
2007 if (read >= target || flags & MSG_PEEK)
2008 break;
2009
2010 target -= read;
2011 }
2012
2013 if (sk->sk_err)
2014 err = -sk->sk_err;
2015 else if (sk->sk_shutdown & RCV_SHUTDOWN)
2016 err = 0;
2017
2018 if (copied > 0)
2019 err = copied;
2020
2021 out:
2022 return err;
2023 }
2024
2025 static int __vsock_seqpacket_recvmsg(struct sock *sk, struct msghdr *msg,
2026 size_t len, int flags)
2027 {
2028 const struct vsock_transport *transport;
2029 struct vsock_sock *vsk;
2030 ssize_t msg_len;
2031 long timeout;
2032 int err = 0;
2033 DEFINE_WAIT(wait);
2034
2035 vsk = vsock_sk(sk);
2036 transport = vsk->transport;
2037
2038 timeout = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
2039
2040 err = vsock_connectible_wait_data(sk, &wait, timeout, NULL, 0);
2041 if (err <= 0)
2042 goto out;
2043
2044 msg_len = transport->seqpacket_dequeue(vsk, msg, flags);
2045
2046 if (msg_len < 0) {
2047 err = -ENOMEM;
2048 goto out;
2049 }
2050
2051 if (sk->sk_err) {
2052 err = -sk->sk_err;
2053 } else if (sk->sk_shutdown & RCV_SHUTDOWN) {
2054 err = 0;
2055 } else {
2056
2057
2058
2059 if (flags & MSG_TRUNC)
2060 err = msg_len;
2061 else
2062 err = len - msg_data_left(msg);
2063
2064
2065
2066
2067 if (msg_len > len)
2068 msg->msg_flags |= MSG_TRUNC;
2069 }
2070
2071 out:
2072 return err;
2073 }
2074
2075 static int
2076 vsock_connectible_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
2077 int flags)
2078 {
2079 struct sock *sk;
2080 struct vsock_sock *vsk;
2081 const struct vsock_transport *transport;
2082 int err;
2083
2084 DEFINE_WAIT(wait);
2085
2086 sk = sock->sk;
2087 vsk = vsock_sk(sk);
2088 err = 0;
2089
2090 lock_sock(sk);
2091
2092 transport = vsk->transport;
2093
2094 if (!transport || sk->sk_state != TCP_ESTABLISHED) {
2095
2096
2097
2098
2099
2100 if (sock_flag(sk, SOCK_DONE))
2101 err = 0;
2102 else
2103 err = -ENOTCONN;
2104
2105 goto out;
2106 }
2107
2108 if (flags & MSG_OOB) {
2109 err = -EOPNOTSUPP;
2110 goto out;
2111 }
2112
2113
2114
2115
2116
2117 if (sk->sk_shutdown & RCV_SHUTDOWN) {
2118 err = 0;
2119 goto out;
2120 }
2121
2122
2123
2124
2125 if (!len) {
2126 err = 0;
2127 goto out;
2128 }
2129
2130 if (sk->sk_type == SOCK_STREAM)
2131 err = __vsock_stream_recvmsg(sk, msg, len, flags);
2132 else
2133 err = __vsock_seqpacket_recvmsg(sk, msg, len, flags);
2134
2135 out:
2136 release_sock(sk);
2137 return err;
2138 }
2139
2140 static const struct proto_ops vsock_stream_ops = {
2141 .family = PF_VSOCK,
2142 .owner = THIS_MODULE,
2143 .release = vsock_release,
2144 .bind = vsock_bind,
2145 .connect = vsock_connect,
2146 .socketpair = sock_no_socketpair,
2147 .accept = vsock_accept,
2148 .getname = vsock_getname,
2149 .poll = vsock_poll,
2150 .ioctl = sock_no_ioctl,
2151 .listen = vsock_listen,
2152 .shutdown = vsock_shutdown,
2153 .setsockopt = vsock_connectible_setsockopt,
2154 .getsockopt = vsock_connectible_getsockopt,
2155 .sendmsg = vsock_connectible_sendmsg,
2156 .recvmsg = vsock_connectible_recvmsg,
2157 .mmap = sock_no_mmap,
2158 .sendpage = sock_no_sendpage,
2159 };
2160
2161 static const struct proto_ops vsock_seqpacket_ops = {
2162 .family = PF_VSOCK,
2163 .owner = THIS_MODULE,
2164 .release = vsock_release,
2165 .bind = vsock_bind,
2166 .connect = vsock_connect,
2167 .socketpair = sock_no_socketpair,
2168 .accept = vsock_accept,
2169 .getname = vsock_getname,
2170 .poll = vsock_poll,
2171 .ioctl = sock_no_ioctl,
2172 .listen = vsock_listen,
2173 .shutdown = vsock_shutdown,
2174 .setsockopt = vsock_connectible_setsockopt,
2175 .getsockopt = vsock_connectible_getsockopt,
2176 .sendmsg = vsock_connectible_sendmsg,
2177 .recvmsg = vsock_connectible_recvmsg,
2178 .mmap = sock_no_mmap,
2179 .sendpage = sock_no_sendpage,
2180 };
2181
2182 static int vsock_create(struct net *net, struct socket *sock,
2183 int protocol, int kern)
2184 {
2185 struct vsock_sock *vsk;
2186 struct sock *sk;
2187 int ret;
2188
2189 if (!sock)
2190 return -EINVAL;
2191
2192 if (protocol && protocol != PF_VSOCK)
2193 return -EPROTONOSUPPORT;
2194
2195 switch (sock->type) {
2196 case SOCK_DGRAM:
2197 sock->ops = &vsock_dgram_ops;
2198 break;
2199 case SOCK_STREAM:
2200 sock->ops = &vsock_stream_ops;
2201 break;
2202 case SOCK_SEQPACKET:
2203 sock->ops = &vsock_seqpacket_ops;
2204 break;
2205 default:
2206 return -ESOCKTNOSUPPORT;
2207 }
2208
2209 sock->state = SS_UNCONNECTED;
2210
2211 sk = __vsock_create(net, sock, NULL, GFP_KERNEL, 0, kern);
2212 if (!sk)
2213 return -ENOMEM;
2214
2215 vsk = vsock_sk(sk);
2216
2217 if (sock->type == SOCK_DGRAM) {
2218 ret = vsock_assign_transport(vsk, NULL);
2219 if (ret < 0) {
2220 sock_put(sk);
2221 return ret;
2222 }
2223 }
2224
2225 vsock_insert_unbound(vsk);
2226
2227 return 0;
2228 }
2229
2230 static const struct net_proto_family vsock_family_ops = {
2231 .family = AF_VSOCK,
2232 .create = vsock_create,
2233 .owner = THIS_MODULE,
2234 };
2235
2236 static long vsock_dev_do_ioctl(struct file *filp,
2237 unsigned int cmd, void __user *ptr)
2238 {
2239 u32 __user *p = ptr;
2240 u32 cid = VMADDR_CID_ANY;
2241 int retval = 0;
2242
2243 switch (cmd) {
2244 case IOCTL_VM_SOCKETS_GET_LOCAL_CID:
2245
2246
2247
2248 if (transport_g2h)
2249 cid = transport_g2h->get_local_cid();
2250 else if (transport_h2g)
2251 cid = transport_h2g->get_local_cid();
2252
2253 if (put_user(cid, p) != 0)
2254 retval = -EFAULT;
2255 break;
2256
2257 default:
2258 retval = -ENOIOCTLCMD;
2259 }
2260
2261 return retval;
2262 }
2263
2264 static long vsock_dev_ioctl(struct file *filp,
2265 unsigned int cmd, unsigned long arg)
2266 {
2267 return vsock_dev_do_ioctl(filp, cmd, (void __user *)arg);
2268 }
2269
2270 #ifdef CONFIG_COMPAT
2271 static long vsock_dev_compat_ioctl(struct file *filp,
2272 unsigned int cmd, unsigned long arg)
2273 {
2274 return vsock_dev_do_ioctl(filp, cmd, compat_ptr(arg));
2275 }
2276 #endif
2277
2278 static const struct file_operations vsock_device_ops = {
2279 .owner = THIS_MODULE,
2280 .unlocked_ioctl = vsock_dev_ioctl,
2281 #ifdef CONFIG_COMPAT
2282 .compat_ioctl = vsock_dev_compat_ioctl,
2283 #endif
2284 .open = nonseekable_open,
2285 };
2286
2287 static struct miscdevice vsock_device = {
2288 .name = "vsock",
2289 .fops = &vsock_device_ops,
2290 };
2291
2292 static int __init vsock_init(void)
2293 {
2294 int err = 0;
2295
2296 vsock_init_tables();
2297
2298 vsock_proto.owner = THIS_MODULE;
2299 vsock_device.minor = MISC_DYNAMIC_MINOR;
2300 err = misc_register(&vsock_device);
2301 if (err) {
2302 pr_err("Failed to register misc device\n");
2303 goto err_reset_transport;
2304 }
2305
2306 err = proto_register(&vsock_proto, 1);
2307 if (err) {
2308 pr_err("Cannot register vsock protocol\n");
2309 goto err_deregister_misc;
2310 }
2311
2312 err = sock_register(&vsock_family_ops);
2313 if (err) {
2314 pr_err("could not register af_vsock (%d) address family: %d\n",
2315 AF_VSOCK, err);
2316 goto err_unregister_proto;
2317 }
2318
2319 return 0;
2320
2321 err_unregister_proto:
2322 proto_unregister(&vsock_proto);
2323 err_deregister_misc:
2324 misc_deregister(&vsock_device);
2325 err_reset_transport:
2326 return err;
2327 }
2328
2329 static void __exit vsock_exit(void)
2330 {
2331 misc_deregister(&vsock_device);
2332 sock_unregister(AF_VSOCK);
2333 proto_unregister(&vsock_proto);
2334 }
2335
2336 const struct vsock_transport *vsock_core_get_transport(struct vsock_sock *vsk)
2337 {
2338 return vsk->transport;
2339 }
2340 EXPORT_SYMBOL_GPL(vsock_core_get_transport);
2341
2342 int vsock_core_register(const struct vsock_transport *t, int features)
2343 {
2344 const struct vsock_transport *t_h2g, *t_g2h, *t_dgram, *t_local;
2345 int err = mutex_lock_interruptible(&vsock_register_mutex);
2346
2347 if (err)
2348 return err;
2349
2350 t_h2g = transport_h2g;
2351 t_g2h = transport_g2h;
2352 t_dgram = transport_dgram;
2353 t_local = transport_local;
2354
2355 if (features & VSOCK_TRANSPORT_F_H2G) {
2356 if (t_h2g) {
2357 err = -EBUSY;
2358 goto err_busy;
2359 }
2360 t_h2g = t;
2361 }
2362
2363 if (features & VSOCK_TRANSPORT_F_G2H) {
2364 if (t_g2h) {
2365 err = -EBUSY;
2366 goto err_busy;
2367 }
2368 t_g2h = t;
2369 }
2370
2371 if (features & VSOCK_TRANSPORT_F_DGRAM) {
2372 if (t_dgram) {
2373 err = -EBUSY;
2374 goto err_busy;
2375 }
2376 t_dgram = t;
2377 }
2378
2379 if (features & VSOCK_TRANSPORT_F_LOCAL) {
2380 if (t_local) {
2381 err = -EBUSY;
2382 goto err_busy;
2383 }
2384 t_local = t;
2385 }
2386
2387 transport_h2g = t_h2g;
2388 transport_g2h = t_g2h;
2389 transport_dgram = t_dgram;
2390 transport_local = t_local;
2391
2392 err_busy:
2393 mutex_unlock(&vsock_register_mutex);
2394 return err;
2395 }
2396 EXPORT_SYMBOL_GPL(vsock_core_register);
2397
2398 void vsock_core_unregister(const struct vsock_transport *t)
2399 {
2400 mutex_lock(&vsock_register_mutex);
2401
2402 if (transport_h2g == t)
2403 transport_h2g = NULL;
2404
2405 if (transport_g2h == t)
2406 transport_g2h = NULL;
2407
2408 if (transport_dgram == t)
2409 transport_dgram = NULL;
2410
2411 if (transport_local == t)
2412 transport_local = NULL;
2413
2414 mutex_unlock(&vsock_register_mutex);
2415 }
2416 EXPORT_SYMBOL_GPL(vsock_core_unregister);
2417
2418 module_init(vsock_init);
2419 module_exit(vsock_exit);
2420
2421 MODULE_AUTHOR("VMware, Inc.");
2422 MODULE_DESCRIPTION("VMware Virtual Socket Family");
2423 MODULE_VERSION("1.0.2.0-k");
2424 MODULE_LICENSE("GPL v2");