1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * common code for virtio vsock 4 * 5 * Copyright (C) 2013-2015 Red Hat, Inc. 6 * Author: Asias He <asias@redhat.com> 7 * Stefan Hajnoczi <stefanha@redhat.com> 8 */ 9 #include <linux/spinlock.h> 10 #include <linux/module.h> 11 #include <linux/sched/signal.h> 12 #include <linux/ctype.h> 13 #include <linux/list.h> 14 #include <linux/virtio_vsock.h> 15 #include <uapi/linux/vsockmon.h> 16 17 #include <net/sock.h> 18 #include <net/af_vsock.h> 19 20 #define CREATE_TRACE_POINTS 21 #include <trace/events/vsock_virtio_transport_common.h> 22 23 /* How long to wait for graceful shutdown of a connection */ 24 #define VSOCK_CLOSE_TIMEOUT (8 * HZ) 25 26 /* Threshold for detecting small packets to copy */ 27 #define GOOD_COPY_LEN 128 28 29 /* Max payload that can be collapsed into a single linear skb, using the same 30 * allocation threshold as virtio_vsock_alloc_skb() to avoid adding pressure 31 * on the page allocator. 32 */ 33 #define MAX_COLLAPSE_LEN \ 34 SKB_MAX_ORDER(VIRTIO_VSOCK_SKB_HEADROOM, PAGE_ALLOC_COSTLY_ORDER) 35 36 static void virtio_transport_cancel_close_work(struct vsock_sock *vsk, 37 bool cancel_timeout); 38 static s64 virtio_transport_has_space(struct virtio_vsock_sock *vvs); 39 40 static const struct virtio_transport * 41 virtio_transport_get_ops(struct vsock_sock *vsk) 42 { 43 const struct vsock_transport *t = vsock_core_get_transport(vsk); 44 45 if (WARN_ON(!t)) 46 return NULL; 47 48 return container_of(t, struct virtio_transport, transport); 49 } 50 51 static bool virtio_transport_can_zcopy(const struct virtio_transport *t_ops, 52 struct virtio_vsock_pkt_info *info, 53 size_t pkt_len) 54 { 55 struct iov_iter *iov_iter; 56 57 if (!info->msg) 58 return false; 59 60 iov_iter = &info->msg->msg_iter; 61 62 if (iov_iter->iov_offset) 63 return false; 64 65 /* We can't send whole iov. */ 66 if (iov_iter->count > pkt_len) 67 return false; 68 69 /* Check that transport can send data in zerocopy mode. */ 70 if (t_ops->can_msgzerocopy) { 71 int pages_to_send = iov_iter_npages(iov_iter, MAX_SKB_FRAGS); 72 73 /* +1 is for packet header. */ 74 return t_ops->can_msgzerocopy(pages_to_send + 1); 75 } 76 77 return true; 78 } 79 80 static int virtio_transport_fill_skb(struct sk_buff *skb, 81 struct virtio_vsock_pkt_info *info, 82 size_t len, 83 bool zcopy) 84 { 85 struct msghdr *msg = info->msg; 86 87 if (zcopy) 88 return __zerocopy_sg_from_iter(msg, NULL, skb, 89 &msg->msg_iter, len, NULL); 90 91 virtio_vsock_skb_put(skb, len); 92 return skb_copy_datagram_from_iter_full(skb, 0, &msg->msg_iter, len); 93 } 94 95 static void virtio_transport_init_hdr(struct sk_buff *skb, 96 struct virtio_vsock_pkt_info *info, 97 size_t payload_len, 98 u32 src_cid, 99 u32 src_port, 100 u32 dst_cid, 101 u32 dst_port) 102 { 103 struct virtio_vsock_hdr *hdr; 104 105 hdr = virtio_vsock_hdr(skb); 106 hdr->type = cpu_to_le16(info->type); 107 hdr->op = cpu_to_le16(info->op); 108 hdr->src_cid = cpu_to_le64(src_cid); 109 hdr->dst_cid = cpu_to_le64(dst_cid); 110 hdr->src_port = cpu_to_le32(src_port); 111 hdr->dst_port = cpu_to_le32(dst_port); 112 hdr->flags = cpu_to_le32(info->flags); 113 hdr->len = cpu_to_le32(payload_len); 114 hdr->buf_alloc = cpu_to_le32(0); 115 hdr->fwd_cnt = cpu_to_le32(0); 116 } 117 118 /* Packet capture */ 119 static struct sk_buff *virtio_transport_build_skb(void *opaque) 120 { 121 struct virtio_vsock_hdr *pkt_hdr; 122 struct sk_buff *pkt = opaque; 123 struct af_vsockmon_hdr *hdr; 124 struct sk_buff *skb; 125 size_t payload_len; 126 127 /* A packet could be split to fit the RX buffer, so we use 128 * the payload length from the header, which has been updated 129 * by the sender to reflect the fragment size. 130 */ 131 pkt_hdr = virtio_vsock_hdr(pkt); 132 payload_len = le32_to_cpu(pkt_hdr->len); 133 134 skb = alloc_skb(sizeof(*hdr) + sizeof(*pkt_hdr) + payload_len, 135 GFP_ATOMIC); 136 if (!skb) 137 return NULL; 138 139 hdr = skb_put(skb, sizeof(*hdr)); 140 141 /* pkt->hdr is little-endian so no need to byteswap here */ 142 hdr->src_cid = pkt_hdr->src_cid; 143 hdr->src_port = pkt_hdr->src_port; 144 hdr->dst_cid = pkt_hdr->dst_cid; 145 hdr->dst_port = pkt_hdr->dst_port; 146 147 hdr->transport = cpu_to_le16(AF_VSOCK_TRANSPORT_VIRTIO); 148 hdr->len = cpu_to_le16(sizeof(*pkt_hdr)); 149 memset(hdr->reserved, 0, sizeof(hdr->reserved)); 150 151 switch (le16_to_cpu(pkt_hdr->op)) { 152 case VIRTIO_VSOCK_OP_REQUEST: 153 case VIRTIO_VSOCK_OP_RESPONSE: 154 hdr->op = cpu_to_le16(AF_VSOCK_OP_CONNECT); 155 break; 156 case VIRTIO_VSOCK_OP_RST: 157 case VIRTIO_VSOCK_OP_SHUTDOWN: 158 hdr->op = cpu_to_le16(AF_VSOCK_OP_DISCONNECT); 159 break; 160 case VIRTIO_VSOCK_OP_RW: 161 hdr->op = cpu_to_le16(AF_VSOCK_OP_PAYLOAD); 162 break; 163 case VIRTIO_VSOCK_OP_CREDIT_UPDATE: 164 case VIRTIO_VSOCK_OP_CREDIT_REQUEST: 165 hdr->op = cpu_to_le16(AF_VSOCK_OP_CONTROL); 166 break; 167 default: 168 hdr->op = cpu_to_le16(AF_VSOCK_OP_UNKNOWN); 169 break; 170 } 171 172 skb_put_data(skb, pkt_hdr, sizeof(*pkt_hdr)); 173 174 if (payload_len) { 175 struct iov_iter iov_iter; 176 struct kvec kvec; 177 void *data = skb_put(skb, payload_len); 178 179 kvec.iov_base = data; 180 kvec.iov_len = payload_len; 181 iov_iter_kvec(&iov_iter, ITER_DEST, &kvec, 1, payload_len); 182 183 if (skb_copy_datagram_iter(pkt, VIRTIO_VSOCK_SKB_CB(pkt)->offset, 184 &iov_iter, payload_len)) { 185 kfree_skb(skb); 186 return NULL; 187 } 188 } 189 190 return skb; 191 } 192 193 void virtio_transport_deliver_tap_pkt(struct sk_buff *skb) 194 { 195 if (virtio_vsock_skb_tap_delivered(skb)) 196 return; 197 198 vsock_deliver_tap(virtio_transport_build_skb, skb); 199 virtio_vsock_skb_set_tap_delivered(skb); 200 } 201 EXPORT_SYMBOL_GPL(virtio_transport_deliver_tap_pkt); 202 203 static u16 virtio_transport_get_type(struct sock *sk) 204 { 205 if (sk->sk_type == SOCK_STREAM) 206 return VIRTIO_VSOCK_TYPE_STREAM; 207 else 208 return VIRTIO_VSOCK_TYPE_SEQPACKET; 209 } 210 211 /* Returns new sk_buff on success, otherwise returns NULL. */ 212 static struct sk_buff *virtio_transport_alloc_skb(struct virtio_vsock_pkt_info *info, 213 size_t payload_len, 214 bool zcopy, 215 struct ubuf_info *uarg, 216 u32 src_cid, 217 u32 src_port, 218 u32 dst_cid, 219 u32 dst_port) 220 { 221 struct vsock_sock *vsk; 222 struct sk_buff *skb; 223 size_t skb_len; 224 225 skb_len = VIRTIO_VSOCK_SKB_HEADROOM; 226 227 if (!zcopy) 228 skb_len += payload_len; 229 230 skb = virtio_vsock_alloc_skb(skb_len, GFP_KERNEL); 231 if (!skb) 232 return NULL; 233 234 virtio_transport_init_hdr(skb, info, payload_len, src_cid, src_port, 235 dst_cid, dst_port); 236 237 vsk = info->vsk; 238 239 /* If 'vsk' != NULL then payload is always present, so we 240 * will never call '__zerocopy_sg_from_iter()' below without 241 * setting skb owner in 'skb_set_owner_w()'. The only case 242 * when 'vsk' == NULL is VIRTIO_VSOCK_OP_RST control message 243 * without payload. 244 */ 245 WARN_ON_ONCE(!(vsk && (info->msg && payload_len)) && zcopy); 246 247 /* Set owner here, because '__zerocopy_sg_from_iter()' uses 248 * owner of skb without check to update 'sk_wmem_alloc'. 249 */ 250 if (vsk) 251 skb_set_owner_w(skb, sk_vsock(vsk)); 252 253 if (info->msg && payload_len > 0) { 254 int err; 255 256 /* Bind the zerocopy lifetime before filling frags so error 257 * rollback frees managed fixed-buffer pages through 258 * the uarg-aware path. 259 */ 260 skb_zcopy_set(skb, uarg, NULL); 261 262 err = virtio_transport_fill_skb(skb, info, payload_len, zcopy); 263 if (err) 264 goto out; 265 266 if (msg_data_left(info->msg) == 0 && 267 info->type == VIRTIO_VSOCK_TYPE_SEQPACKET) { 268 struct virtio_vsock_hdr *hdr = virtio_vsock_hdr(skb); 269 270 hdr->flags |= cpu_to_le32(VIRTIO_VSOCK_SEQ_EOM); 271 272 if (info->msg->msg_flags & MSG_EOR) 273 hdr->flags |= cpu_to_le32(VIRTIO_VSOCK_SEQ_EOR); 274 } 275 } 276 277 if (info->reply) 278 virtio_vsock_skb_set_reply(skb); 279 280 trace_virtio_transport_alloc_pkt(src_cid, src_port, 281 dst_cid, dst_port, 282 payload_len, 283 info->type, 284 info->op, 285 info->flags, 286 zcopy); 287 288 return skb; 289 out: 290 kfree_skb(skb); 291 return NULL; 292 } 293 294 /* This function can only be used on connecting/connected sockets, 295 * since a socket assigned to a transport is required. 296 * 297 * Do not use on listener sockets! 298 */ 299 static int virtio_transport_send_pkt_info(struct vsock_sock *vsk, 300 struct virtio_vsock_pkt_info *info) 301 { 302 u32 max_skb_len = VIRTIO_VSOCK_MAX_PKT_BUF_SIZE; 303 u32 src_cid, src_port, dst_cid, dst_port; 304 const struct virtio_transport *t_ops; 305 struct virtio_vsock_sock *vvs; 306 struct ubuf_info *uarg = NULL; 307 u32 pkt_len = info->pkt_len; 308 bool can_zcopy = false; 309 bool have_uref = false; 310 u32 rest_len; 311 int ret; 312 313 info->type = virtio_transport_get_type(sk_vsock(vsk)); 314 315 t_ops = virtio_transport_get_ops(vsk); 316 if (unlikely(!t_ops)) 317 return -EFAULT; 318 319 src_cid = t_ops->transport.get_local_cid(); 320 src_port = vsk->local_addr.svm_port; 321 if (!info->remote_cid) { 322 dst_cid = vsk->remote_addr.svm_cid; 323 dst_port = vsk->remote_addr.svm_port; 324 } else { 325 dst_cid = info->remote_cid; 326 dst_port = info->remote_port; 327 } 328 329 vvs = vsk->trans; 330 331 /* virtio_transport_get_credit might return less than pkt_len credit */ 332 pkt_len = virtio_transport_get_credit(vvs, pkt_len); 333 334 /* Do not send zero length OP_RW pkt */ 335 if (pkt_len == 0 && info->op == VIRTIO_VSOCK_OP_RW) 336 return pkt_len; 337 338 if (info->msg && (info->msg->msg_flags & MSG_ZEROCOPY)) { 339 /* If 'info->msg' is not NULL, this is only VIRTIO_VSOCK_OP_RW. 340 * 'MSG_ZEROCOPY' flag handling here is based on the same flag 341 * handling from 'tcp_sendmsg_locked()'. 342 */ 343 if (info->msg->msg_ubuf) { 344 uarg = info->msg->msg_ubuf; 345 can_zcopy = virtio_transport_can_zcopy(t_ops, info, pkt_len); 346 } else if (sock_flag(sk_vsock(vsk), SOCK_ZEROCOPY)) { 347 uarg = msg_zerocopy_realloc(sk_vsock(vsk), pkt_len, 348 NULL, false); 349 if (!uarg) { 350 virtio_transport_put_credit(vvs, pkt_len); 351 return -ENOMEM; 352 } 353 354 can_zcopy = virtio_transport_can_zcopy(t_ops, info, pkt_len); 355 if (!can_zcopy) 356 uarg_to_msgzc(uarg)->zerocopy = 0; 357 358 have_uref = true; 359 } 360 361 /* 'can_zcopy' means that this transmission will be 362 * in zerocopy way (e.g. using 'frags' array). 363 */ 364 if (can_zcopy) 365 max_skb_len = min_t(u32, VIRTIO_VSOCK_MAX_PKT_BUF_SIZE, 366 (MAX_SKB_FRAGS * PAGE_SIZE)); 367 } 368 369 rest_len = pkt_len; 370 371 do { 372 struct sk_buff *skb; 373 size_t skb_len; 374 375 skb_len = min(max_skb_len, rest_len); 376 377 skb = virtio_transport_alloc_skb(info, skb_len, can_zcopy, 378 uarg, 379 src_cid, src_port, 380 dst_cid, dst_port); 381 if (!skb) { 382 ret = -ENOMEM; 383 break; 384 } 385 386 virtio_transport_inc_tx_pkt(vvs, skb); 387 388 ret = t_ops->send_pkt(skb, info->net); 389 if (ret < 0) 390 break; 391 392 /* Both virtio and vhost 'send_pkt()' returns 'skb_len', 393 * but for reliability use 'ret' instead of 'skb_len'. 394 * Also if partial send happens (e.g. 'ret' != 'skb_len') 395 * somehow, we break this loop, but account such returned 396 * value in 'virtio_transport_put_credit()'. 397 */ 398 rest_len -= ret; 399 400 if (WARN_ONCE(ret != skb_len, 401 "'send_pkt()' returns %i, but %zu expected\n", 402 ret, skb_len)) 403 break; 404 } while (rest_len); 405 406 virtio_transport_put_credit(vvs, rest_len); 407 408 /* msg_zerocopy_realloc() initializes the ubuf_info refcnt to 1. 409 * skb_zcopy_set() increases it for each skb, so we can drop that 410 * initial reference to keep it balanced. 411 */ 412 if (have_uref) { 413 if (rest_len == pkt_len) 414 /* No data sent, abort the notification. */ 415 net_zcopy_put_abort(uarg, true); 416 else 417 net_zcopy_put(uarg); 418 } 419 420 /* Return number of bytes, if any data has been sent. */ 421 if (rest_len != pkt_len) 422 ret = pkt_len - rest_len; 423 424 return ret; 425 } 426 427 static bool virtio_transport_can_collapse(struct sk_buff *skb) 428 { 429 /* skbs that are partially consumed, mark a SEQPACKET message boundary, 430 * or are already large enough should not be collapsed: they either 431 * need special accounting, carry protocol state, or already have a 432 * good data-to-overhead ratio. 433 */ 434 if (VIRTIO_VSOCK_SKB_CB(skb)->offset) 435 return false; 436 if (le32_to_cpu(virtio_vsock_hdr(skb)->flags) & VIRTIO_VSOCK_SEQ_EOM) 437 return false; 438 if (skb->len >= MAX_COLLAPSE_LEN) 439 return false; 440 return true; 441 } 442 443 /* Iterate through the packets in the queue starting from the current skb to 444 * count the number of bytes we can collapse. 445 */ 446 static unsigned int 447 virtio_transport_collapse_size(struct sk_buff *skb, struct sk_buff_head *queue) 448 { 449 unsigned int target = skb->len - VIRTIO_VSOCK_SKB_CB(skb)->offset; 450 451 while ((skb = skb_peek_next(skb, queue)) && 452 virtio_transport_can_collapse(skb)) { 453 unsigned int len = skb->len - VIRTIO_VSOCK_SKB_CB(skb)->offset; 454 455 if (len > MAX_COLLAPSE_LEN - target) 456 return target; 457 458 target += len; 459 } 460 461 return target; 462 } 463 464 /* Called under lock_sock to compact the receive queue by merging small skbs. 465 * @min_to_free: minimum number of skbs to eliminate from the queue. May free 466 * more to fill each collapsed skb to capacity. 467 */ 468 static void 469 virtio_transport_collapse_rx_queue(struct virtio_vsock_sock *vvs, 470 u32 min_to_free) 471 { 472 struct sk_buff *skb, *next_skb, *new_skb = NULL; 473 struct sk_buff_head new_queue; 474 u32 saved = 0; 475 476 __skb_queue_head_init(&new_queue); 477 478 skb_queue_walk_safe(&vvs->rx_queue, skb, next_skb) { 479 struct virtio_vsock_hdr *hdr = virtio_vsock_hdr(skb); 480 u32 src_off = VIRTIO_VSOCK_SKB_CB(skb)->offset; 481 u32 src_len = skb->len - src_off; 482 bool keep; 483 484 keep = !virtio_transport_can_collapse(skb); 485 if (keep) { 486 /* Finalize pending collapsed skb to preserve packet 487 * ordering. 488 */ 489 if (new_skb) { 490 __skb_queue_tail(&new_queue, new_skb); 491 new_skb = NULL; 492 saved--; 493 } 494 goto next; 495 } 496 497 /* Finalize if this packet won't fit in the remaining tailroom, 498 * so we can allocate a right-sized new_skb. 499 */ 500 if (new_skb && src_len > skb_tailroom(new_skb)) { 501 __skb_queue_tail(&new_queue, new_skb); 502 new_skb = NULL; 503 saved--; 504 } 505 506 if (!new_skb) { 507 unsigned int alloc_size; 508 509 /* Check after finalizing to opportunistically fill 510 * each collapsed skb to capacity, merging more skbs 511 * than strictly required. 512 */ 513 if (saved >= min_to_free) 514 break; 515 516 alloc_size = virtio_transport_collapse_size(skb, &vvs->rx_queue); 517 518 /* Only this skb's data is eligible, nothing to merge 519 * with. Keep as-is. 520 */ 521 if (alloc_size <= src_len) { 522 keep = true; 523 goto next; 524 } 525 526 new_skb = virtio_vsock_alloc_linear_skb(alloc_size + 527 VIRTIO_VSOCK_SKB_HEADROOM, GFP_KERNEL); 528 if (!new_skb) 529 break; 530 531 memcpy(virtio_vsock_hdr(new_skb), hdr, 532 sizeof(struct virtio_vsock_hdr)); 533 virtio_vsock_hdr(new_skb)->len = 0; 534 } 535 536 /* Cannot fail since src_off/src_len are within bounds, but if 537 * it does, discard new_skb to avoid queuing corrupted data. 538 */ 539 if (WARN_ON_ONCE(skb_copy_bits(skb, src_off, 540 skb_put(new_skb, src_len), 541 src_len))) { 542 kfree_skb(new_skb); 543 new_skb = NULL; 544 break; 545 } 546 547 le32_add_cpu(&virtio_vsock_hdr(new_skb)->len, src_len); 548 virtio_vsock_hdr(new_skb)->flags |= hdr->flags; 549 550 next: 551 __skb_unlink(skb, &vvs->rx_queue); 552 if (keep) { 553 __skb_queue_tail(&new_queue, skb); 554 } else { 555 consume_skb(skb); 556 saved++; 557 } 558 } 559 560 if (new_skb) 561 __skb_queue_tail(&new_queue, new_skb); 562 563 skb_queue_splice(&new_queue, &vvs->rx_queue); 564 } 565 566 static bool virtio_transport_inc_rx_pkt(struct virtio_vsock_sock *vvs, 567 u32 len) 568 { 569 u64 skb_overhead = (skb_queue_len(&vvs->rx_queue) + 1) * SKB_TRUESIZE(0); 570 571 /* Allow at most buf_alloc * 2 total budget (payload + overhead), 572 * similar to how SO_RCVBUF is doubled to reserve space for sk_buff 573 * metadata. Check payload against buf_alloc to be sure the other 574 * peer is respecting the credit, and sk_buff overhead to bound 575 * queue growth. 576 */ 577 if ((u64)vvs->buf_used + len > vvs->buf_alloc || 578 skb_overhead > vvs->buf_alloc) 579 return false; 580 581 vvs->rx_bytes += len; 582 vvs->buf_used += len; 583 return true; 584 } 585 586 static void virtio_transport_dec_rx_pkt(struct virtio_vsock_sock *vvs, 587 u32 bytes_read, u32 bytes_dequeued) 588 { 589 vvs->rx_bytes -= bytes_read; 590 vvs->buf_used -= bytes_dequeued; 591 vvs->fwd_cnt += bytes_dequeued; 592 } 593 594 void virtio_transport_inc_tx_pkt(struct virtio_vsock_sock *vvs, struct sk_buff *skb) 595 { 596 struct virtio_vsock_hdr *hdr = virtio_vsock_hdr(skb); 597 598 spin_lock_bh(&vvs->rx_lock); 599 vvs->last_fwd_cnt = vvs->fwd_cnt; 600 hdr->fwd_cnt = cpu_to_le32(vvs->fwd_cnt); 601 hdr->buf_alloc = cpu_to_le32(vvs->buf_alloc); 602 spin_unlock_bh(&vvs->rx_lock); 603 } 604 EXPORT_SYMBOL_GPL(virtio_transport_inc_tx_pkt); 605 606 void virtio_transport_consume_skb_sent(struct sk_buff *skb, bool consume) 607 { 608 struct sock *s = skb->sk; 609 610 if (s && skb->len) { 611 struct vsock_sock *vs = vsock_sk(s); 612 struct virtio_vsock_sock *vvs; 613 614 vvs = vs->trans; 615 616 spin_lock_bh(&vvs->tx_lock); 617 vvs->bytes_unsent -= skb->len; 618 spin_unlock_bh(&vvs->tx_lock); 619 } 620 621 if (consume) 622 consume_skb(skb); 623 } 624 EXPORT_SYMBOL_GPL(virtio_transport_consume_skb_sent); 625 626 u32 virtio_transport_get_credit(struct virtio_vsock_sock *vvs, u32 credit) 627 { 628 u32 ret; 629 630 if (!credit) 631 return 0; 632 633 spin_lock_bh(&vvs->tx_lock); 634 ret = min_t(u32, credit, virtio_transport_has_space(vvs)); 635 vvs->tx_cnt += ret; 636 vvs->bytes_unsent += ret; 637 spin_unlock_bh(&vvs->tx_lock); 638 639 return ret; 640 } 641 EXPORT_SYMBOL_GPL(virtio_transport_get_credit); 642 643 void virtio_transport_put_credit(struct virtio_vsock_sock *vvs, u32 credit) 644 { 645 if (!credit) 646 return; 647 648 spin_lock_bh(&vvs->tx_lock); 649 vvs->tx_cnt -= credit; 650 vvs->bytes_unsent -= credit; 651 spin_unlock_bh(&vvs->tx_lock); 652 } 653 EXPORT_SYMBOL_GPL(virtio_transport_put_credit); 654 655 static int virtio_transport_send_credit_update(struct vsock_sock *vsk) 656 { 657 struct virtio_vsock_pkt_info info = { 658 .op = VIRTIO_VSOCK_OP_CREDIT_UPDATE, 659 .vsk = vsk, 660 .net = sock_net(sk_vsock(vsk)), 661 }; 662 663 return virtio_transport_send_pkt_info(vsk, &info); 664 } 665 666 static ssize_t 667 virtio_transport_stream_do_peek(struct vsock_sock *vsk, 668 struct msghdr *msg, 669 size_t len) 670 { 671 struct virtio_vsock_sock *vvs = vsk->trans; 672 struct sk_buff *skb; 673 size_t total = 0; 674 int err; 675 676 spin_lock_bh(&vvs->rx_lock); 677 678 skb_queue_walk(&vvs->rx_queue, skb) { 679 size_t bytes; 680 681 bytes = min_t(size_t, len - total, 682 skb->len - VIRTIO_VSOCK_SKB_CB(skb)->offset); 683 684 spin_unlock_bh(&vvs->rx_lock); 685 686 /* sk_lock is held by caller so no one else can dequeue. 687 * Unlock rx_lock since skb_copy_datagram_iter() may sleep. 688 */ 689 err = skb_copy_datagram_iter(skb, VIRTIO_VSOCK_SKB_CB(skb)->offset, 690 &msg->msg_iter, bytes); 691 if (err) 692 goto out; 693 694 total += bytes; 695 696 spin_lock_bh(&vvs->rx_lock); 697 698 if (total == len) 699 break; 700 } 701 702 spin_unlock_bh(&vvs->rx_lock); 703 704 return total; 705 706 out: 707 if (total) 708 err = total; 709 return err; 710 } 711 712 static ssize_t 713 virtio_transport_stream_do_dequeue(struct vsock_sock *vsk, 714 struct msghdr *msg, 715 size_t len) 716 { 717 struct virtio_vsock_sock *vvs = vsk->trans; 718 struct sk_buff *skb; 719 u32 fwd_cnt_delta; 720 bool low_rx_bytes; 721 int err = -EFAULT; 722 size_t total = 0; 723 u32 free_space; 724 725 spin_lock_bh(&vvs->rx_lock); 726 727 if (WARN_ONCE(skb_queue_empty(&vvs->rx_queue) && vvs->rx_bytes, 728 "rx_queue is empty, but rx_bytes is non-zero\n")) { 729 spin_unlock_bh(&vvs->rx_lock); 730 return err; 731 } 732 733 while (total < len && !skb_queue_empty(&vvs->rx_queue)) { 734 size_t bytes, dequeued = 0; 735 736 skb = skb_peek(&vvs->rx_queue); 737 738 bytes = min_t(size_t, len - total, 739 skb->len - VIRTIO_VSOCK_SKB_CB(skb)->offset); 740 741 /* sk_lock is held by caller so no one else can dequeue. 742 * Unlock rx_lock since skb_copy_datagram_iter() may sleep. 743 */ 744 spin_unlock_bh(&vvs->rx_lock); 745 746 err = skb_copy_datagram_iter(skb, 747 VIRTIO_VSOCK_SKB_CB(skb)->offset, 748 &msg->msg_iter, bytes); 749 if (err) 750 goto out; 751 752 spin_lock_bh(&vvs->rx_lock); 753 754 total += bytes; 755 756 VIRTIO_VSOCK_SKB_CB(skb)->offset += bytes; 757 758 if (skb->len == VIRTIO_VSOCK_SKB_CB(skb)->offset) { 759 dequeued = le32_to_cpu(virtio_vsock_hdr(skb)->len); 760 __skb_unlink(skb, &vvs->rx_queue); 761 consume_skb(skb); 762 } 763 764 virtio_transport_dec_rx_pkt(vvs, bytes, dequeued); 765 } 766 767 fwd_cnt_delta = vvs->fwd_cnt - vvs->last_fwd_cnt; 768 free_space = vvs->buf_alloc - fwd_cnt_delta; 769 low_rx_bytes = (vvs->rx_bytes < 770 sock_rcvlowat(sk_vsock(vsk), 0, INT_MAX)); 771 772 spin_unlock_bh(&vvs->rx_lock); 773 774 /* To reduce the number of credit update messages, 775 * don't update credits as long as lots of space is available. 776 * Note: the limit chosen here is arbitrary. Setting the limit 777 * too high causes extra messages. Too low causes transmitter 778 * stalls. As stalls are in theory more expensive than extra 779 * messages, we set the limit to a high value. TODO: experiment 780 * with different values. Also send credit update message when 781 * number of bytes in rx queue is not enough to wake up reader. 782 */ 783 if (fwd_cnt_delta && 784 (free_space < VIRTIO_VSOCK_MAX_PKT_BUF_SIZE || low_rx_bytes)) 785 virtio_transport_send_credit_update(vsk); 786 787 return total; 788 789 out: 790 if (total) 791 err = total; 792 return err; 793 } 794 795 static ssize_t 796 virtio_transport_seqpacket_do_peek(struct vsock_sock *vsk, 797 struct msghdr *msg) 798 { 799 struct virtio_vsock_sock *vvs = vsk->trans; 800 struct sk_buff *skb; 801 size_t total, len; 802 803 spin_lock_bh(&vvs->rx_lock); 804 805 if (!vvs->msg_count) { 806 spin_unlock_bh(&vvs->rx_lock); 807 return 0; 808 } 809 810 total = 0; 811 len = msg_data_left(msg); 812 813 skb_queue_walk(&vvs->rx_queue, skb) { 814 struct virtio_vsock_hdr *hdr; 815 816 if (total < len) { 817 size_t bytes; 818 int err; 819 820 bytes = len - total; 821 if (bytes > skb->len) 822 bytes = skb->len; 823 824 spin_unlock_bh(&vvs->rx_lock); 825 826 /* sk_lock is held by caller so no one else can dequeue. 827 * Unlock rx_lock since skb_copy_datagram_iter() may sleep. 828 */ 829 err = skb_copy_datagram_iter(skb, VIRTIO_VSOCK_SKB_CB(skb)->offset, 830 &msg->msg_iter, bytes); 831 if (err) 832 return err; 833 834 spin_lock_bh(&vvs->rx_lock); 835 } 836 837 total += skb->len; 838 hdr = virtio_vsock_hdr(skb); 839 840 if (le32_to_cpu(hdr->flags) & VIRTIO_VSOCK_SEQ_EOM) { 841 if (le32_to_cpu(hdr->flags) & VIRTIO_VSOCK_SEQ_EOR) 842 msg->msg_flags |= MSG_EOR; 843 844 break; 845 } 846 } 847 848 spin_unlock_bh(&vvs->rx_lock); 849 850 return total; 851 } 852 853 static int virtio_transport_seqpacket_do_dequeue(struct vsock_sock *vsk, 854 struct msghdr *msg, 855 int flags) 856 { 857 struct virtio_vsock_sock *vvs = vsk->trans; 858 int dequeued_len = 0; 859 size_t user_buf_len = msg_data_left(msg); 860 bool msg_ready = false; 861 struct sk_buff *skb; 862 863 spin_lock_bh(&vvs->rx_lock); 864 865 if (vvs->msg_count == 0) { 866 spin_unlock_bh(&vvs->rx_lock); 867 return 0; 868 } 869 870 while (!msg_ready) { 871 struct virtio_vsock_hdr *hdr; 872 size_t pkt_len; 873 874 skb = __skb_dequeue(&vvs->rx_queue); 875 if (!skb) 876 break; 877 hdr = virtio_vsock_hdr(skb); 878 pkt_len = (size_t)le32_to_cpu(hdr->len); 879 880 if (dequeued_len >= 0) { 881 size_t bytes_to_copy; 882 883 bytes_to_copy = min(user_buf_len, pkt_len); 884 885 if (bytes_to_copy) { 886 int err; 887 888 /* sk_lock is held by caller so no one else can dequeue. 889 * Unlock rx_lock since skb_copy_datagram_iter() may sleep. 890 */ 891 spin_unlock_bh(&vvs->rx_lock); 892 893 err = skb_copy_datagram_iter(skb, 0, 894 &msg->msg_iter, 895 bytes_to_copy); 896 if (err) { 897 /* Copy of message failed. Rest of 898 * fragments will be freed without copy. 899 */ 900 dequeued_len = err; 901 } else { 902 user_buf_len -= bytes_to_copy; 903 } 904 905 spin_lock_bh(&vvs->rx_lock); 906 } 907 908 if (dequeued_len >= 0) 909 dequeued_len += pkt_len; 910 } 911 912 if (le32_to_cpu(hdr->flags) & VIRTIO_VSOCK_SEQ_EOM) { 913 msg_ready = true; 914 vvs->msg_count--; 915 916 if (le32_to_cpu(hdr->flags) & VIRTIO_VSOCK_SEQ_EOR) 917 msg->msg_flags |= MSG_EOR; 918 } 919 920 virtio_transport_dec_rx_pkt(vvs, pkt_len, pkt_len); 921 kfree_skb(skb); 922 } 923 924 spin_unlock_bh(&vvs->rx_lock); 925 926 virtio_transport_send_credit_update(vsk); 927 928 return dequeued_len; 929 } 930 931 ssize_t 932 virtio_transport_stream_dequeue(struct vsock_sock *vsk, 933 struct msghdr *msg, 934 size_t len, int flags) 935 { 936 if (flags & MSG_PEEK) 937 return virtio_transport_stream_do_peek(vsk, msg, len); 938 else 939 return virtio_transport_stream_do_dequeue(vsk, msg, len); 940 } 941 EXPORT_SYMBOL_GPL(virtio_transport_stream_dequeue); 942 943 ssize_t 944 virtio_transport_seqpacket_dequeue(struct vsock_sock *vsk, 945 struct msghdr *msg, 946 int flags) 947 { 948 if (flags & MSG_PEEK) 949 return virtio_transport_seqpacket_do_peek(vsk, msg); 950 else 951 return virtio_transport_seqpacket_do_dequeue(vsk, msg, flags); 952 } 953 EXPORT_SYMBOL_GPL(virtio_transport_seqpacket_dequeue); 954 955 static u32 virtio_transport_tx_buf_size(struct virtio_vsock_sock *vvs) 956 { 957 /* The peer advertises its receive buffer via peer_buf_alloc, but we 958 * cap it to our local buf_alloc so a remote peer cannot force us to 959 * queue more data than our own buffer configuration allows. 960 */ 961 return min(vvs->peer_buf_alloc, vvs->buf_alloc); 962 } 963 964 int 965 virtio_transport_seqpacket_enqueue(struct vsock_sock *vsk, 966 struct msghdr *msg, 967 size_t len) 968 { 969 struct virtio_vsock_sock *vvs = vsk->trans; 970 971 spin_lock_bh(&vvs->tx_lock); 972 973 if (len > virtio_transport_tx_buf_size(vvs)) { 974 spin_unlock_bh(&vvs->tx_lock); 975 return -EMSGSIZE; 976 } 977 978 spin_unlock_bh(&vvs->tx_lock); 979 980 return virtio_transport_stream_enqueue(vsk, msg, len); 981 } 982 EXPORT_SYMBOL_GPL(virtio_transport_seqpacket_enqueue); 983 984 int 985 virtio_transport_dgram_dequeue(struct vsock_sock *vsk, 986 struct msghdr *msg, 987 size_t len, int flags) 988 { 989 return -EOPNOTSUPP; 990 } 991 EXPORT_SYMBOL_GPL(virtio_transport_dgram_dequeue); 992 993 s64 virtio_transport_stream_has_data(struct vsock_sock *vsk) 994 { 995 struct virtio_vsock_sock *vvs = vsk->trans; 996 s64 bytes; 997 998 spin_lock_bh(&vvs->rx_lock); 999 bytes = vvs->rx_bytes; 1000 spin_unlock_bh(&vvs->rx_lock); 1001 1002 return bytes; 1003 } 1004 EXPORT_SYMBOL_GPL(virtio_transport_stream_has_data); 1005 1006 u32 virtio_transport_seqpacket_has_data(struct vsock_sock *vsk) 1007 { 1008 struct virtio_vsock_sock *vvs = vsk->trans; 1009 u32 msg_count; 1010 1011 spin_lock_bh(&vvs->rx_lock); 1012 msg_count = vvs->msg_count; 1013 spin_unlock_bh(&vvs->rx_lock); 1014 1015 return msg_count; 1016 } 1017 EXPORT_SYMBOL_GPL(virtio_transport_seqpacket_has_data); 1018 1019 static s64 virtio_transport_has_space(struct virtio_vsock_sock *vvs) 1020 { 1021 s64 bytes; 1022 1023 /* Use s64 arithmetic so if the peer shrinks peer_buf_alloc while 1024 * we have bytes in flight (tx_cnt - peer_fwd_cnt), the subtraction 1025 * does not underflow. 1026 */ 1027 bytes = (s64)virtio_transport_tx_buf_size(vvs) - 1028 (vvs->tx_cnt - vvs->peer_fwd_cnt); 1029 if (bytes < 0) 1030 bytes = 0; 1031 1032 return bytes; 1033 } 1034 1035 s64 virtio_transport_stream_has_space(struct vsock_sock *vsk) 1036 { 1037 struct virtio_vsock_sock *vvs = vsk->trans; 1038 s64 bytes; 1039 1040 spin_lock_bh(&vvs->tx_lock); 1041 bytes = virtio_transport_has_space(vvs); 1042 spin_unlock_bh(&vvs->tx_lock); 1043 1044 return bytes; 1045 } 1046 EXPORT_SYMBOL_GPL(virtio_transport_stream_has_space); 1047 1048 int virtio_transport_do_socket_init(struct vsock_sock *vsk, 1049 struct vsock_sock *psk) 1050 { 1051 struct virtio_vsock_sock *vvs; 1052 1053 vvs = kzalloc_obj(*vvs); 1054 if (!vvs) 1055 return -ENOMEM; 1056 1057 vsk->trans = vvs; 1058 vvs->vsk = vsk; 1059 if (psk && psk->trans) { 1060 struct virtio_vsock_sock *ptrans = psk->trans; 1061 1062 vvs->peer_buf_alloc = ptrans->peer_buf_alloc; 1063 } 1064 1065 if (vsk->buffer_size > VIRTIO_VSOCK_MAX_BUF_SIZE) 1066 vsk->buffer_size = VIRTIO_VSOCK_MAX_BUF_SIZE; 1067 1068 vvs->buf_alloc = vsk->buffer_size; 1069 1070 spin_lock_init(&vvs->rx_lock); 1071 spin_lock_init(&vvs->tx_lock); 1072 skb_queue_head_init(&vvs->rx_queue); 1073 1074 return 0; 1075 } 1076 EXPORT_SYMBOL_GPL(virtio_transport_do_socket_init); 1077 1078 /* sk_lock held by the caller */ 1079 void virtio_transport_notify_buffer_size(struct vsock_sock *vsk, u64 *val) 1080 { 1081 struct virtio_vsock_sock *vvs = vsk->trans; 1082 1083 if (*val > VIRTIO_VSOCK_MAX_BUF_SIZE) 1084 *val = VIRTIO_VSOCK_MAX_BUF_SIZE; 1085 1086 vvs->buf_alloc = *val; 1087 1088 virtio_transport_send_credit_update(vsk); 1089 } 1090 EXPORT_SYMBOL_GPL(virtio_transport_notify_buffer_size); 1091 1092 int 1093 virtio_transport_notify_poll_in(struct vsock_sock *vsk, 1094 size_t target, 1095 bool *data_ready_now) 1096 { 1097 *data_ready_now = vsock_stream_has_data(vsk) >= target; 1098 1099 return 0; 1100 } 1101 EXPORT_SYMBOL_GPL(virtio_transport_notify_poll_in); 1102 1103 int 1104 virtio_transport_notify_poll_out(struct vsock_sock *vsk, 1105 size_t target, 1106 bool *space_avail_now) 1107 { 1108 s64 free_space; 1109 1110 free_space = vsock_stream_has_space(vsk); 1111 if (free_space > 0) 1112 *space_avail_now = true; 1113 else if (free_space == 0) 1114 *space_avail_now = false; 1115 1116 return 0; 1117 } 1118 EXPORT_SYMBOL_GPL(virtio_transport_notify_poll_out); 1119 1120 int virtio_transport_notify_recv_init(struct vsock_sock *vsk, 1121 size_t target, struct vsock_transport_recv_notify_data *data) 1122 { 1123 return 0; 1124 } 1125 EXPORT_SYMBOL_GPL(virtio_transport_notify_recv_init); 1126 1127 int virtio_transport_notify_recv_pre_block(struct vsock_sock *vsk, 1128 size_t target, struct vsock_transport_recv_notify_data *data) 1129 { 1130 return 0; 1131 } 1132 EXPORT_SYMBOL_GPL(virtio_transport_notify_recv_pre_block); 1133 1134 int virtio_transport_notify_recv_pre_dequeue(struct vsock_sock *vsk, 1135 size_t target, struct vsock_transport_recv_notify_data *data) 1136 { 1137 return 0; 1138 } 1139 EXPORT_SYMBOL_GPL(virtio_transport_notify_recv_pre_dequeue); 1140 1141 int virtio_transport_notify_recv_post_dequeue(struct vsock_sock *vsk, 1142 size_t target, ssize_t copied, bool data_read, 1143 struct vsock_transport_recv_notify_data *data) 1144 { 1145 return 0; 1146 } 1147 EXPORT_SYMBOL_GPL(virtio_transport_notify_recv_post_dequeue); 1148 1149 int virtio_transport_notify_send_init(struct vsock_sock *vsk, 1150 struct vsock_transport_send_notify_data *data) 1151 { 1152 return 0; 1153 } 1154 EXPORT_SYMBOL_GPL(virtio_transport_notify_send_init); 1155 1156 int virtio_transport_notify_send_pre_block(struct vsock_sock *vsk, 1157 struct vsock_transport_send_notify_data *data) 1158 { 1159 return 0; 1160 } 1161 EXPORT_SYMBOL_GPL(virtio_transport_notify_send_pre_block); 1162 1163 int virtio_transport_notify_send_pre_enqueue(struct vsock_sock *vsk, 1164 struct vsock_transport_send_notify_data *data) 1165 { 1166 return 0; 1167 } 1168 EXPORT_SYMBOL_GPL(virtio_transport_notify_send_pre_enqueue); 1169 1170 int virtio_transport_notify_send_post_enqueue(struct vsock_sock *vsk, 1171 ssize_t written, struct vsock_transport_send_notify_data *data) 1172 { 1173 return 0; 1174 } 1175 EXPORT_SYMBOL_GPL(virtio_transport_notify_send_post_enqueue); 1176 1177 u64 virtio_transport_stream_rcvhiwat(struct vsock_sock *vsk) 1178 { 1179 return vsk->buffer_size; 1180 } 1181 EXPORT_SYMBOL_GPL(virtio_transport_stream_rcvhiwat); 1182 1183 bool virtio_transport_stream_is_active(struct vsock_sock *vsk) 1184 { 1185 return true; 1186 } 1187 EXPORT_SYMBOL_GPL(virtio_transport_stream_is_active); 1188 1189 int virtio_transport_dgram_bind(struct vsock_sock *vsk, 1190 struct sockaddr_vm *addr) 1191 { 1192 return -EOPNOTSUPP; 1193 } 1194 EXPORT_SYMBOL_GPL(virtio_transport_dgram_bind); 1195 1196 bool virtio_transport_dgram_allow(struct vsock_sock *vsk, u32 cid, u32 port) 1197 { 1198 return false; 1199 } 1200 EXPORT_SYMBOL_GPL(virtio_transport_dgram_allow); 1201 1202 int virtio_transport_connect(struct vsock_sock *vsk) 1203 { 1204 struct virtio_vsock_pkt_info info = { 1205 .op = VIRTIO_VSOCK_OP_REQUEST, 1206 .vsk = vsk, 1207 .net = sock_net(sk_vsock(vsk)), 1208 }; 1209 1210 return virtio_transport_send_pkt_info(vsk, &info); 1211 } 1212 EXPORT_SYMBOL_GPL(virtio_transport_connect); 1213 1214 int virtio_transport_shutdown(struct vsock_sock *vsk, int mode) 1215 { 1216 struct virtio_vsock_pkt_info info = { 1217 .op = VIRTIO_VSOCK_OP_SHUTDOWN, 1218 .flags = (mode & RCV_SHUTDOWN ? 1219 VIRTIO_VSOCK_SHUTDOWN_RCV : 0) | 1220 (mode & SEND_SHUTDOWN ? 1221 VIRTIO_VSOCK_SHUTDOWN_SEND : 0), 1222 .vsk = vsk, 1223 .net = sock_net(sk_vsock(vsk)), 1224 }; 1225 1226 return virtio_transport_send_pkt_info(vsk, &info); 1227 } 1228 EXPORT_SYMBOL_GPL(virtio_transport_shutdown); 1229 1230 int 1231 virtio_transport_dgram_enqueue(struct vsock_sock *vsk, 1232 struct sockaddr_vm *remote_addr, 1233 struct msghdr *msg, 1234 size_t dgram_len) 1235 { 1236 return -EOPNOTSUPP; 1237 } 1238 EXPORT_SYMBOL_GPL(virtio_transport_dgram_enqueue); 1239 1240 ssize_t 1241 virtio_transport_stream_enqueue(struct vsock_sock *vsk, 1242 struct msghdr *msg, 1243 size_t len) 1244 { 1245 struct virtio_vsock_pkt_info info = { 1246 .op = VIRTIO_VSOCK_OP_RW, 1247 .msg = msg, 1248 .pkt_len = len, 1249 .vsk = vsk, 1250 .net = sock_net(sk_vsock(vsk)), 1251 }; 1252 1253 return virtio_transport_send_pkt_info(vsk, &info); 1254 } 1255 EXPORT_SYMBOL_GPL(virtio_transport_stream_enqueue); 1256 1257 void virtio_transport_destruct(struct vsock_sock *vsk) 1258 { 1259 struct virtio_vsock_sock *vvs = vsk->trans; 1260 1261 virtio_transport_cancel_close_work(vsk, true); 1262 1263 kfree(vvs); 1264 vsk->trans = NULL; 1265 } 1266 EXPORT_SYMBOL_GPL(virtio_transport_destruct); 1267 1268 ssize_t virtio_transport_unsent_bytes(struct vsock_sock *vsk) 1269 { 1270 struct virtio_vsock_sock *vvs = vsk->trans; 1271 size_t ret; 1272 1273 spin_lock_bh(&vvs->tx_lock); 1274 ret = vvs->bytes_unsent; 1275 spin_unlock_bh(&vvs->tx_lock); 1276 1277 return ret; 1278 } 1279 EXPORT_SYMBOL_GPL(virtio_transport_unsent_bytes); 1280 1281 static int virtio_transport_reset(struct vsock_sock *vsk, 1282 struct sk_buff *skb) 1283 { 1284 struct virtio_vsock_pkt_info info = { 1285 .op = VIRTIO_VSOCK_OP_RST, 1286 .reply = !!skb, 1287 .vsk = vsk, 1288 .net = sock_net(sk_vsock(vsk)), 1289 }; 1290 1291 /* Send RST only if the original pkt is not a RST pkt */ 1292 if (skb && le16_to_cpu(virtio_vsock_hdr(skb)->op) == VIRTIO_VSOCK_OP_RST) 1293 return 0; 1294 1295 return virtio_transport_send_pkt_info(vsk, &info); 1296 } 1297 1298 /* Normally packets are associated with a socket. There may be no socket if an 1299 * attempt was made to connect to a socket that does not exist. 1300 * 1301 * net refers to the namespace of whoever sent the invalid message. For 1302 * loopback, this is the namespace of the socket. For vhost, this is the 1303 * namespace of the VM (i.e., vhost_vsock). 1304 */ 1305 static int virtio_transport_reset_no_sock(const struct virtio_transport *t, 1306 struct sk_buff *skb, struct net *net) 1307 { 1308 struct virtio_vsock_hdr *hdr = virtio_vsock_hdr(skb); 1309 struct virtio_vsock_pkt_info info = { 1310 .op = VIRTIO_VSOCK_OP_RST, 1311 .type = le16_to_cpu(hdr->type), 1312 .reply = true, 1313 1314 /* Set sk owner to socket we are replying to (may be NULL for 1315 * non-loopback). This keeps a reference to the sock and 1316 * sock_net(sk) until the reply skb is freed. 1317 */ 1318 .vsk = vsock_sk(skb->sk), 1319 1320 /* net is not defined here because we pass it directly to 1321 * t->send_pkt(), instead of relying on 1322 * virtio_transport_send_pkt_info() to pass it. It is not needed 1323 * by virtio_transport_alloc_skb(). 1324 */ 1325 }; 1326 struct sk_buff *reply; 1327 1328 /* Send RST only if the original pkt is not a RST pkt */ 1329 if (le16_to_cpu(hdr->op) == VIRTIO_VSOCK_OP_RST) 1330 return 0; 1331 1332 if (!t) 1333 return -ENOTCONN; 1334 1335 reply = virtio_transport_alloc_skb(&info, 0, false, NULL, 1336 le64_to_cpu(hdr->dst_cid), 1337 le32_to_cpu(hdr->dst_port), 1338 le64_to_cpu(hdr->src_cid), 1339 le32_to_cpu(hdr->src_port)); 1340 if (!reply) 1341 return -ENOMEM; 1342 1343 return t->send_pkt(reply, net); 1344 } 1345 1346 /* This function should be called with sk_lock held and SOCK_DONE set */ 1347 static void virtio_transport_remove_sock(struct vsock_sock *vsk) 1348 { 1349 struct virtio_vsock_sock *vvs = vsk->trans; 1350 1351 /* We don't need to take rx_lock, as the socket is closing and we are 1352 * removing it. 1353 */ 1354 __skb_queue_purge(&vvs->rx_queue); 1355 vsock_remove_sock(vsk); 1356 } 1357 1358 static void virtio_transport_cancel_close_work(struct vsock_sock *vsk, 1359 bool cancel_timeout) 1360 { 1361 struct sock *sk = sk_vsock(vsk); 1362 1363 if (vsk->close_work_scheduled && 1364 (!cancel_timeout || cancel_delayed_work(&vsk->close_work))) { 1365 vsk->close_work_scheduled = false; 1366 1367 virtio_transport_remove_sock(vsk); 1368 1369 /* Release refcnt obtained when we scheduled the timeout */ 1370 sock_put(sk); 1371 } 1372 } 1373 1374 static void virtio_transport_do_close(struct vsock_sock *vsk, 1375 bool cancel_timeout) 1376 { 1377 struct sock *sk = sk_vsock(vsk); 1378 1379 sock_set_flag(sk, SOCK_DONE); 1380 WRITE_ONCE(vsk->peer_shutdown, SHUTDOWN_MASK); 1381 if (vsock_stream_has_data(vsk) <= 0) 1382 sk->sk_state = TCP_CLOSING; 1383 sk->sk_state_change(sk); 1384 1385 virtio_transport_cancel_close_work(vsk, cancel_timeout); 1386 } 1387 1388 static void virtio_transport_close_timeout(struct work_struct *work) 1389 { 1390 struct vsock_sock *vsk = 1391 container_of(work, struct vsock_sock, close_work.work); 1392 struct sock *sk = sk_vsock(vsk); 1393 1394 sock_hold(sk); 1395 lock_sock(sk); 1396 1397 if (!sock_flag(sk, SOCK_DONE)) { 1398 (void)virtio_transport_reset(vsk, NULL); 1399 1400 virtio_transport_do_close(vsk, false); 1401 } 1402 1403 vsk->close_work_scheduled = false; 1404 1405 release_sock(sk); 1406 sock_put(sk); 1407 } 1408 1409 /* User context, vsk->sk is locked */ 1410 static bool virtio_transport_close(struct vsock_sock *vsk) 1411 { 1412 struct sock *sk = &vsk->sk; 1413 1414 if (!(sk->sk_state == TCP_ESTABLISHED || 1415 sk->sk_state == TCP_CLOSING)) 1416 return true; 1417 1418 /* Already received SHUTDOWN from peer, reply with RST */ 1419 if ((vsk->peer_shutdown & SHUTDOWN_MASK) == SHUTDOWN_MASK) { 1420 (void)virtio_transport_reset(vsk, NULL); 1421 return true; 1422 } 1423 1424 if ((sk->sk_shutdown & SHUTDOWN_MASK) != SHUTDOWN_MASK) 1425 (void)virtio_transport_shutdown(vsk, SHUTDOWN_MASK); 1426 1427 if (!(current->flags & PF_EXITING)) 1428 vsock_linger(sk); 1429 1430 if (sock_flag(sk, SOCK_DONE)) { 1431 return true; 1432 } 1433 1434 sock_hold(sk); 1435 INIT_DELAYED_WORK(&vsk->close_work, 1436 virtio_transport_close_timeout); 1437 vsk->close_work_scheduled = true; 1438 schedule_delayed_work(&vsk->close_work, VSOCK_CLOSE_TIMEOUT); 1439 return false; 1440 } 1441 1442 void virtio_transport_release(struct vsock_sock *vsk) 1443 { 1444 struct sock *sk = &vsk->sk; 1445 bool remove_sock = true; 1446 1447 if (sk->sk_type == SOCK_STREAM || sk->sk_type == SOCK_SEQPACKET) 1448 remove_sock = virtio_transport_close(vsk); 1449 1450 if (remove_sock) { 1451 sock_set_flag(sk, SOCK_DONE); 1452 virtio_transport_remove_sock(vsk); 1453 } 1454 } 1455 EXPORT_SYMBOL_GPL(virtio_transport_release); 1456 1457 static int 1458 virtio_transport_recv_connecting(struct sock *sk, 1459 struct sk_buff *skb) 1460 { 1461 struct virtio_vsock_hdr *hdr = virtio_vsock_hdr(skb); 1462 struct vsock_sock *vsk = vsock_sk(sk); 1463 int skerr; 1464 int err; 1465 1466 switch (le16_to_cpu(hdr->op)) { 1467 case VIRTIO_VSOCK_OP_RESPONSE: 1468 sk->sk_state = TCP_ESTABLISHED; 1469 sk->sk_socket->state = SS_CONNECTED; 1470 vsock_insert_connected(vsk); 1471 sk->sk_state_change(sk); 1472 break; 1473 case VIRTIO_VSOCK_OP_INVALID: 1474 break; 1475 case VIRTIO_VSOCK_OP_RST: 1476 skerr = ECONNRESET; 1477 err = 0; 1478 goto destroy; 1479 default: 1480 skerr = EPROTO; 1481 err = -EINVAL; 1482 goto destroy; 1483 } 1484 return 0; 1485 1486 destroy: 1487 virtio_transport_reset(vsk, skb); 1488 sk->sk_state = TCP_CLOSE; 1489 sk->sk_err = skerr; 1490 sk_error_report(sk); 1491 return err; 1492 } 1493 1494 static bool 1495 virtio_transport_recv_enqueue(struct vsock_sock *vsk, 1496 struct sk_buff *skb) 1497 { 1498 struct virtio_vsock_sock *vvs = vsk->trans; 1499 bool can_enqueue, free_pkt = false; 1500 u32 len, queue_max, queue_len; 1501 struct virtio_vsock_hdr *hdr; 1502 1503 hdr = virtio_vsock_hdr(skb); 1504 len = le32_to_cpu(hdr->len); 1505 1506 /* virtio_transport_inc_rx_pkt() rejects packets when the per-skb 1507 * overhead (skb_queue_len * SKB_TRUESIZE(0)) exceeds buf_alloc. 1508 * Proactively collapse the queue before that happens. 1509 * No rx_lock needed: lock_sock is held by caller, preventing 1510 * concurrent enqueue or dequeue. 1511 */ 1512 queue_max = vvs->buf_alloc / SKB_TRUESIZE(0); 1513 queue_len = skb_queue_len(&vvs->rx_queue); 1514 if (queue_len >= queue_max) { 1515 /* Walking a large queue may take a significant amount of time 1516 * and cache misses, causing traffic burstiness. Limit the 1517 * collapse to freeing room for this packet and the next one. 1518 * It may free more to fill each collapsed skb to capacity. 1519 */ 1520 virtio_transport_collapse_rx_queue(vvs, queue_len + 2 - queue_max); 1521 } 1522 1523 spin_lock_bh(&vvs->rx_lock); 1524 1525 can_enqueue = virtio_transport_inc_rx_pkt(vvs, len); 1526 if (!can_enqueue) 1527 goto out; 1528 1529 if (le32_to_cpu(hdr->flags) & VIRTIO_VSOCK_SEQ_EOM) 1530 vvs->msg_count++; 1531 1532 /* Try to copy small packets into the buffer of last packet queued, 1533 * to avoid wasting memory queueing the entire buffer with a small 1534 * payload. Skip non-linear (e.g. zerocopy) skbs; these carry payload 1535 * in skb_shinfo. 1536 */ 1537 if (len <= GOOD_COPY_LEN && !skb_queue_empty(&vvs->rx_queue) && 1538 !skb_is_nonlinear(skb)) { 1539 struct virtio_vsock_hdr *last_hdr; 1540 struct sk_buff *last_skb; 1541 1542 last_skb = skb_peek_tail(&vvs->rx_queue); 1543 last_hdr = virtio_vsock_hdr(last_skb); 1544 1545 /* If there is space in the last packet queued, we copy the 1546 * new packet in its buffer. We avoid this if the last packet 1547 * queued has VIRTIO_VSOCK_SEQ_EOM set, because this is 1548 * delimiter of SEQPACKET message, so 'pkt' is the first packet 1549 * of a new message. 1550 */ 1551 if (skb->len < skb_tailroom(last_skb) && 1552 !(le32_to_cpu(last_hdr->flags) & VIRTIO_VSOCK_SEQ_EOM)) { 1553 memcpy(skb_put(last_skb, skb->len), skb->data, skb->len); 1554 free_pkt = true; 1555 last_hdr->flags |= hdr->flags; 1556 le32_add_cpu(&last_hdr->len, len); 1557 goto out; 1558 } 1559 } 1560 1561 __skb_queue_tail(&vvs->rx_queue, skb); 1562 1563 out: 1564 spin_unlock_bh(&vvs->rx_lock); 1565 if (free_pkt) 1566 kfree_skb(skb); 1567 1568 return can_enqueue; 1569 } 1570 1571 static int 1572 virtio_transport_recv_connected(struct sock *sk, 1573 struct sk_buff *skb) 1574 { 1575 struct virtio_vsock_hdr *hdr = virtio_vsock_hdr(skb); 1576 struct vsock_sock *vsk = vsock_sk(sk); 1577 int err = 0; 1578 1579 switch (le16_to_cpu(hdr->op)) { 1580 case VIRTIO_VSOCK_OP_RW: 1581 if (!virtio_transport_recv_enqueue(vsk, skb)) { 1582 /* There is no more space to queue the packet, so let's 1583 * close the connection; otherwise, we'll lose data. 1584 */ 1585 (void)virtio_transport_reset(vsk, skb); 1586 virtio_transport_do_close(vsk, true); 1587 sk->sk_err = ENOBUFS; 1588 sk_error_report(sk); 1589 vsock_remove_sock(vsk); 1590 break; 1591 } 1592 vsock_data_ready(sk); 1593 return err; 1594 case VIRTIO_VSOCK_OP_CREDIT_REQUEST: 1595 virtio_transport_send_credit_update(vsk); 1596 break; 1597 case VIRTIO_VSOCK_OP_CREDIT_UPDATE: 1598 sk->sk_write_space(sk); 1599 break; 1600 case VIRTIO_VSOCK_OP_SHUTDOWN: { 1601 u32 peer_shutdown = READ_ONCE(vsk->peer_shutdown); 1602 1603 if (le32_to_cpu(hdr->flags) & VIRTIO_VSOCK_SHUTDOWN_RCV) 1604 peer_shutdown |= RCV_SHUTDOWN; 1605 if (le32_to_cpu(hdr->flags) & VIRTIO_VSOCK_SHUTDOWN_SEND) 1606 peer_shutdown |= SEND_SHUTDOWN; 1607 WRITE_ONCE(vsk->peer_shutdown, peer_shutdown); 1608 if (peer_shutdown == SHUTDOWN_MASK) { 1609 if (vsock_stream_has_data(vsk) <= 0 && !sock_flag(sk, SOCK_DONE)) { 1610 (void)virtio_transport_reset(vsk, NULL); 1611 virtio_transport_do_close(vsk, true); 1612 } 1613 /* Remove this socket anyway because the remote peer sent 1614 * the shutdown. This way a new connection will succeed 1615 * if the remote peer uses the same source port, 1616 * even if the old socket is still unreleased, but now disconnected. 1617 */ 1618 vsock_remove_sock(vsk); 1619 } 1620 if (le32_to_cpu(virtio_vsock_hdr(skb)->flags)) 1621 sk->sk_state_change(sk); 1622 break; 1623 } 1624 case VIRTIO_VSOCK_OP_RST: 1625 virtio_transport_do_close(vsk, true); 1626 break; 1627 default: 1628 err = -EINVAL; 1629 break; 1630 } 1631 1632 kfree_skb(skb); 1633 return err; 1634 } 1635 1636 static void 1637 virtio_transport_recv_disconnecting(struct sock *sk, 1638 struct sk_buff *skb) 1639 { 1640 struct virtio_vsock_hdr *hdr = virtio_vsock_hdr(skb); 1641 struct vsock_sock *vsk = vsock_sk(sk); 1642 1643 if (le16_to_cpu(hdr->op) == VIRTIO_VSOCK_OP_RST) 1644 virtio_transport_do_close(vsk, true); 1645 } 1646 1647 static int 1648 virtio_transport_send_response(struct vsock_sock *vsk, 1649 struct sk_buff *skb) 1650 { 1651 struct virtio_vsock_hdr *hdr = virtio_vsock_hdr(skb); 1652 struct virtio_vsock_pkt_info info = { 1653 .op = VIRTIO_VSOCK_OP_RESPONSE, 1654 .remote_cid = le64_to_cpu(hdr->src_cid), 1655 .remote_port = le32_to_cpu(hdr->src_port), 1656 .reply = true, 1657 .vsk = vsk, 1658 .net = sock_net(sk_vsock(vsk)), 1659 }; 1660 1661 return virtio_transport_send_pkt_info(vsk, &info); 1662 } 1663 1664 static bool virtio_transport_space_update(struct sock *sk, 1665 struct sk_buff *skb) 1666 { 1667 struct virtio_vsock_hdr *hdr = virtio_vsock_hdr(skb); 1668 struct vsock_sock *vsk = vsock_sk(sk); 1669 struct virtio_vsock_sock *vvs = vsk->trans; 1670 bool space_available; 1671 1672 /* Listener sockets are not associated with any transport, so we are 1673 * not able to take the state to see if there is space available in the 1674 * remote peer, but since they are only used to receive requests, we 1675 * can assume that there is always space available in the other peer. 1676 */ 1677 if (!vvs) 1678 return true; 1679 1680 /* buf_alloc and fwd_cnt is always included in the hdr */ 1681 spin_lock_bh(&vvs->tx_lock); 1682 vvs->peer_buf_alloc = le32_to_cpu(hdr->buf_alloc); 1683 vvs->peer_fwd_cnt = le32_to_cpu(hdr->fwd_cnt); 1684 space_available = virtio_transport_has_space(vvs); 1685 spin_unlock_bh(&vvs->tx_lock); 1686 return space_available; 1687 } 1688 1689 /* Handle server socket */ 1690 static int 1691 virtio_transport_recv_listen(struct sock *sk, struct sk_buff *skb, 1692 struct virtio_transport *t) 1693 { 1694 struct virtio_vsock_hdr *hdr = virtio_vsock_hdr(skb); 1695 struct vsock_sock *vsk = vsock_sk(sk); 1696 struct vsock_sock *vchild; 1697 struct sock *child; 1698 int ret; 1699 1700 if (le16_to_cpu(hdr->op) != VIRTIO_VSOCK_OP_REQUEST) { 1701 virtio_transport_reset_no_sock(t, skb, sock_net(sk)); 1702 return -EINVAL; 1703 } 1704 1705 if (sk_acceptq_is_full(sk)) { 1706 virtio_transport_reset_no_sock(t, skb, sock_net(sk)); 1707 return -ENOMEM; 1708 } 1709 1710 /* __vsock_release() might have already flushed accept_queue. 1711 * Subsequent enqueues would lead to a memory leak. 1712 */ 1713 if (sk->sk_shutdown == SHUTDOWN_MASK) { 1714 virtio_transport_reset_no_sock(t, skb, sock_net(sk)); 1715 return -ESHUTDOWN; 1716 } 1717 1718 child = vsock_create_connected(sk); 1719 if (!child) { 1720 virtio_transport_reset_no_sock(t, skb, sock_net(sk)); 1721 return -ENOMEM; 1722 } 1723 1724 lock_sock_nested(child, SINGLE_DEPTH_NESTING); 1725 1726 child->sk_state = TCP_ESTABLISHED; 1727 1728 vchild = vsock_sk(child); 1729 vsock_addr_init(&vchild->local_addr, le64_to_cpu(hdr->dst_cid), 1730 le32_to_cpu(hdr->dst_port)); 1731 vsock_addr_init(&vchild->remote_addr, le64_to_cpu(hdr->src_cid), 1732 le32_to_cpu(hdr->src_port)); 1733 1734 ret = vsock_assign_transport(vchild, vsk); 1735 /* Transport assigned (looking at remote_addr) must be the same 1736 * where we received the request. 1737 */ 1738 if (ret || vchild->transport != &t->transport) { 1739 release_sock(child); 1740 virtio_transport_reset_no_sock(t, skb, sock_net(sk)); 1741 sock_put(child); 1742 return ret; 1743 } 1744 1745 if (virtio_transport_space_update(child, skb)) 1746 child->sk_write_space(child); 1747 1748 vsock_insert_connected(vchild); 1749 vsock_enqueue_accept(sk, child); 1750 virtio_transport_send_response(vchild, skb); 1751 1752 release_sock(child); 1753 1754 sk->sk_data_ready(sk); 1755 return 0; 1756 } 1757 1758 static bool virtio_transport_valid_type(u16 type) 1759 { 1760 return (type == VIRTIO_VSOCK_TYPE_STREAM) || 1761 (type == VIRTIO_VSOCK_TYPE_SEQPACKET); 1762 } 1763 1764 /* We are under the virtio-vsock's vsock->rx_lock or vhost-vsock's vq->mutex 1765 * lock. 1766 */ 1767 void virtio_transport_recv_pkt(struct virtio_transport *t, 1768 struct sk_buff *skb, struct net *net) 1769 { 1770 struct virtio_vsock_hdr *hdr = virtio_vsock_hdr(skb); 1771 struct sockaddr_vm src, dst; 1772 struct vsock_sock *vsk; 1773 struct sock *sk; 1774 bool space_available; 1775 1776 vsock_addr_init(&src, le64_to_cpu(hdr->src_cid), 1777 le32_to_cpu(hdr->src_port)); 1778 vsock_addr_init(&dst, le64_to_cpu(hdr->dst_cid), 1779 le32_to_cpu(hdr->dst_port)); 1780 1781 trace_virtio_transport_recv_pkt(src.svm_cid, src.svm_port, 1782 dst.svm_cid, dst.svm_port, 1783 le32_to_cpu(hdr->len), 1784 le16_to_cpu(hdr->type), 1785 le16_to_cpu(hdr->op), 1786 le32_to_cpu(hdr->flags), 1787 le32_to_cpu(hdr->buf_alloc), 1788 le32_to_cpu(hdr->fwd_cnt)); 1789 1790 if (!virtio_transport_valid_type(le16_to_cpu(hdr->type))) { 1791 (void)virtio_transport_reset_no_sock(t, skb, net); 1792 goto free_pkt; 1793 } 1794 1795 /* The socket must be in connected or bound table 1796 * otherwise send reset back 1797 */ 1798 sk = vsock_find_connected_socket_net(&src, &dst, net); 1799 if (!sk) { 1800 sk = vsock_find_bound_socket_net(&dst, net); 1801 if (!sk) { 1802 (void)virtio_transport_reset_no_sock(t, skb, net); 1803 goto free_pkt; 1804 } 1805 } 1806 1807 if (virtio_transport_get_type(sk) != le16_to_cpu(hdr->type)) { 1808 (void)virtio_transport_reset_no_sock(t, skb, net); 1809 sock_put(sk); 1810 goto free_pkt; 1811 } 1812 1813 if (!skb_set_owner_sk_safe(skb, sk)) { 1814 WARN_ONCE(1, "receiving vsock socket has sk_refcnt == 0\n"); 1815 goto free_pkt; 1816 } 1817 1818 vsk = vsock_sk(sk); 1819 1820 lock_sock(sk); 1821 1822 /* Check if sk has been closed or assigned to another transport before 1823 * lock_sock (note: listener sockets are not assigned to any transport) 1824 */ 1825 if (sock_flag(sk, SOCK_DONE) || 1826 (sk->sk_state != TCP_LISTEN && vsk->transport != &t->transport)) { 1827 (void)virtio_transport_reset_no_sock(t, skb, net); 1828 release_sock(sk); 1829 sock_put(sk); 1830 goto free_pkt; 1831 } 1832 1833 space_available = virtio_transport_space_update(sk, skb); 1834 1835 /* Update CID in case it has changed after a transport reset event */ 1836 if (vsk->local_addr.svm_cid != VMADDR_CID_ANY) 1837 vsk->local_addr.svm_cid = dst.svm_cid; 1838 1839 if (space_available) 1840 sk->sk_write_space(sk); 1841 1842 switch (sk->sk_state) { 1843 case TCP_LISTEN: 1844 virtio_transport_recv_listen(sk, skb, t); 1845 kfree_skb(skb); 1846 break; 1847 case TCP_SYN_SENT: 1848 virtio_transport_recv_connecting(sk, skb); 1849 kfree_skb(skb); 1850 break; 1851 case TCP_ESTABLISHED: 1852 virtio_transport_recv_connected(sk, skb); 1853 break; 1854 case TCP_CLOSING: 1855 virtio_transport_recv_disconnecting(sk, skb); 1856 kfree_skb(skb); 1857 break; 1858 default: 1859 (void)virtio_transport_reset_no_sock(t, skb, net); 1860 kfree_skb(skb); 1861 break; 1862 } 1863 1864 release_sock(sk); 1865 1866 /* Release refcnt obtained when we fetched this socket out of the 1867 * bound or connected list. 1868 */ 1869 sock_put(sk); 1870 return; 1871 1872 free_pkt: 1873 kfree_skb(skb); 1874 } 1875 EXPORT_SYMBOL_GPL(virtio_transport_recv_pkt); 1876 1877 /* Remove skbs found in a queue that have a vsk that matches. 1878 * 1879 * Each skb is freed. 1880 * 1881 * Returns the count of skbs that were reply packets. 1882 */ 1883 int virtio_transport_purge_skbs(void *vsk, struct sk_buff_head *queue) 1884 { 1885 struct sk_buff_head freeme; 1886 struct sk_buff *skb, *tmp; 1887 int cnt = 0; 1888 1889 skb_queue_head_init(&freeme); 1890 1891 spin_lock_bh(&queue->lock); 1892 skb_queue_walk_safe(queue, skb, tmp) { 1893 if (vsock_sk(skb->sk) != vsk) 1894 continue; 1895 1896 __skb_unlink(skb, queue); 1897 __skb_queue_tail(&freeme, skb); 1898 1899 if (virtio_vsock_skb_reply(skb)) 1900 cnt++; 1901 } 1902 spin_unlock_bh(&queue->lock); 1903 1904 __skb_queue_purge(&freeme); 1905 1906 return cnt; 1907 } 1908 EXPORT_SYMBOL_GPL(virtio_transport_purge_skbs); 1909 1910 int virtio_transport_read_skb(struct vsock_sock *vsk, skb_read_actor_t recv_actor) 1911 { 1912 struct virtio_vsock_sock *vvs = vsk->trans; 1913 struct sock *sk = sk_vsock(vsk); 1914 struct virtio_vsock_hdr *hdr; 1915 struct sk_buff *skb; 1916 u32 pkt_len; 1917 int off = 0; 1918 int err; 1919 1920 spin_lock_bh(&vvs->rx_lock); 1921 /* Use __skb_recv_datagram() for race-free handling of the receive. It 1922 * works for types other than dgrams. 1923 */ 1924 skb = __skb_recv_datagram(sk, &vvs->rx_queue, MSG_DONTWAIT, &off, &err); 1925 if (!skb) { 1926 spin_unlock_bh(&vvs->rx_lock); 1927 return err; 1928 } 1929 1930 hdr = virtio_vsock_hdr(skb); 1931 if (le32_to_cpu(hdr->flags) & VIRTIO_VSOCK_SEQ_EOM) 1932 vvs->msg_count--; 1933 1934 pkt_len = le32_to_cpu(hdr->len); 1935 virtio_transport_dec_rx_pkt(vvs, pkt_len, pkt_len); 1936 spin_unlock_bh(&vvs->rx_lock); 1937 1938 virtio_transport_send_credit_update(vsk); 1939 1940 return recv_actor(sk, skb); 1941 } 1942 EXPORT_SYMBOL_GPL(virtio_transport_read_skb); 1943 1944 int virtio_transport_notify_set_rcvlowat(struct vsock_sock *vsk, int val) 1945 { 1946 struct virtio_vsock_sock *vvs = vsk->trans; 1947 bool send_update; 1948 1949 spin_lock_bh(&vvs->rx_lock); 1950 1951 /* If number of available bytes is less than new SO_RCVLOWAT value, 1952 * kick sender to send more data, because sender may sleep in its 1953 * 'send()' syscall waiting for enough space at our side. Also 1954 * don't send credit update when peer already knows actual value - 1955 * such transmission will be useless. 1956 */ 1957 send_update = (vvs->rx_bytes < val) && 1958 (vvs->fwd_cnt != vvs->last_fwd_cnt); 1959 1960 spin_unlock_bh(&vvs->rx_lock); 1961 1962 if (send_update) { 1963 int err; 1964 1965 err = virtio_transport_send_credit_update(vsk); 1966 if (err < 0) 1967 return err; 1968 } 1969 1970 return 0; 1971 } 1972 EXPORT_SYMBOL_GPL(virtio_transport_notify_set_rcvlowat); 1973 1974 MODULE_LICENSE("GPL v2"); 1975 MODULE_AUTHOR("Asias He"); 1976 MODULE_DESCRIPTION("common code for virtio vsock"); 1977