linux/drivers/net/wireguard/receive.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
   4 */
   5
   6#include "queueing.h"
   7#include "device.h"
   8#include "peer.h"
   9#include "timers.h"
  10#include "messages.h"
  11#include "cookie.h"
  12#include "socket.h"
  13
  14#include <linux/ip.h>
  15#include <linux/ipv6.h>
  16#include <linux/udp.h>
  17#include <net/ip_tunnels.h>
  18
  19/* Must be called with bh disabled. */
  20static void update_rx_stats(struct wg_peer *peer, size_t len)
  21{
  22        struct pcpu_sw_netstats *tstats =
  23                get_cpu_ptr(peer->device->dev->tstats);
  24
  25        u64_stats_update_begin(&tstats->syncp);
  26        ++tstats->rx_packets;
  27        tstats->rx_bytes += len;
  28        peer->rx_bytes += len;
  29        u64_stats_update_end(&tstats->syncp);
  30        put_cpu_ptr(tstats);
  31}
  32
  33#define SKB_TYPE_LE32(skb) (((struct message_header *)(skb)->data)->type)
  34
  35static size_t validate_header_len(struct sk_buff *skb)
  36{
  37        if (unlikely(skb->len < sizeof(struct message_header)))
  38                return 0;
  39        if (SKB_TYPE_LE32(skb) == cpu_to_le32(MESSAGE_DATA) &&
  40            skb->len >= MESSAGE_MINIMUM_LENGTH)
  41                return sizeof(struct message_data);
  42        if (SKB_TYPE_LE32(skb) == cpu_to_le32(MESSAGE_HANDSHAKE_INITIATION) &&
  43            skb->len == sizeof(struct message_handshake_initiation))
  44                return sizeof(struct message_handshake_initiation);
  45        if (SKB_TYPE_LE32(skb) == cpu_to_le32(MESSAGE_HANDSHAKE_RESPONSE) &&
  46            skb->len == sizeof(struct message_handshake_response))
  47                return sizeof(struct message_handshake_response);
  48        if (SKB_TYPE_LE32(skb) == cpu_to_le32(MESSAGE_HANDSHAKE_COOKIE) &&
  49            skb->len == sizeof(struct message_handshake_cookie))
  50                return sizeof(struct message_handshake_cookie);
  51        return 0;
  52}
  53
  54static int prepare_skb_header(struct sk_buff *skb, struct wg_device *wg)
  55{
  56        size_t data_offset, data_len, header_len;
  57        struct udphdr *udp;
  58
  59        if (unlikely(!wg_check_packet_protocol(skb) ||
  60                     skb_transport_header(skb) < skb->head ||
  61                     (skb_transport_header(skb) + sizeof(struct udphdr)) >
  62                             skb_tail_pointer(skb)))
  63                return -EINVAL; /* Bogus IP header */
  64        udp = udp_hdr(skb);
  65        data_offset = (u8 *)udp - skb->data;
  66        if (unlikely(data_offset > U16_MAX ||
  67                     data_offset + sizeof(struct udphdr) > skb->len))
  68                /* Packet has offset at impossible location or isn't big enough
  69                 * to have UDP fields.
  70                 */
  71                return -EINVAL;
  72        data_len = ntohs(udp->len);
  73        if (unlikely(data_len < sizeof(struct udphdr) ||
  74                     data_len > skb->len - data_offset))
  75                /* UDP packet is reporting too small of a size or lying about
  76                 * its size.
  77                 */
  78                return -EINVAL;
  79        data_len -= sizeof(struct udphdr);
  80        data_offset = (u8 *)udp + sizeof(struct udphdr) - skb->data;
  81        if (unlikely(!pskb_may_pull(skb,
  82                                data_offset + sizeof(struct message_header)) ||
  83                     pskb_trim(skb, data_len + data_offset) < 0))
  84                return -EINVAL;
  85        skb_pull(skb, data_offset);
  86        if (unlikely(skb->len != data_len))
  87                /* Final len does not agree with calculated len */
  88                return -EINVAL;
  89        header_len = validate_header_len(skb);
  90        if (unlikely(!header_len))
  91                return -EINVAL;
  92        __skb_push(skb, data_offset);
  93        if (unlikely(!pskb_may_pull(skb, data_offset + header_len)))
  94                return -EINVAL;
  95        __skb_pull(skb, data_offset);
  96        return 0;
  97}
  98
  99static void wg_receive_handshake_packet(struct wg_device *wg,
 100                                        struct sk_buff *skb)
 101{
 102        enum cookie_mac_state mac_state;
 103        struct wg_peer *peer = NULL;
 104        /* This is global, so that our load calculation applies to the whole
 105         * system. We don't care about races with it at all.
 106         */
 107        static u64 last_under_load;
 108        bool packet_needs_cookie;
 109        bool under_load;
 110
 111        if (SKB_TYPE_LE32(skb) == cpu_to_le32(MESSAGE_HANDSHAKE_COOKIE)) {
 112                net_dbg_skb_ratelimited("%s: Receiving cookie response from %pISpfsc\n",
 113                                        wg->dev->name, skb);
 114                wg_cookie_message_consume(
 115                        (struct message_handshake_cookie *)skb->data, wg);
 116                return;
 117        }
 118
 119        under_load = atomic_read(&wg->handshake_queue_len) >=
 120                        MAX_QUEUED_INCOMING_HANDSHAKES / 8;
 121        if (under_load) {
 122                last_under_load = ktime_get_coarse_boottime_ns();
 123        } else if (last_under_load) {
 124                under_load = !wg_birthdate_has_expired(last_under_load, 1);
 125                if (!under_load)
 126                        last_under_load = 0;
 127        }
 128        mac_state = wg_cookie_validate_packet(&wg->cookie_checker, skb,
 129                                              under_load);
 130        if ((under_load && mac_state == VALID_MAC_WITH_COOKIE) ||
 131            (!under_load && mac_state == VALID_MAC_BUT_NO_COOKIE)) {
 132                packet_needs_cookie = false;
 133        } else if (under_load && mac_state == VALID_MAC_BUT_NO_COOKIE) {
 134                packet_needs_cookie = true;
 135        } else {
 136                net_dbg_skb_ratelimited("%s: Invalid MAC of handshake, dropping packet from %pISpfsc\n",
 137                                        wg->dev->name, skb);
 138                return;
 139        }
 140
 141        switch (SKB_TYPE_LE32(skb)) {
 142        case cpu_to_le32(MESSAGE_HANDSHAKE_INITIATION): {
 143                struct message_handshake_initiation *message =
 144                        (struct message_handshake_initiation *)skb->data;
 145
 146                if (packet_needs_cookie) {
 147                        wg_packet_send_handshake_cookie(wg, skb,
 148                                                        message->sender_index);
 149                        return;
 150                }
 151                peer = wg_noise_handshake_consume_initiation(message, wg);
 152                if (unlikely(!peer)) {
 153                        net_dbg_skb_ratelimited("%s: Invalid handshake initiation from %pISpfsc\n",
 154                                                wg->dev->name, skb);
 155                        return;
 156                }
 157                wg_socket_set_peer_endpoint_from_skb(peer, skb);
 158                net_dbg_ratelimited("%s: Receiving handshake initiation from peer %llu (%pISpfsc)\n",
 159                                    wg->dev->name, peer->internal_id,
 160                                    &peer->endpoint.addr);
 161                wg_packet_send_handshake_response(peer);
 162                break;
 163        }
 164        case cpu_to_le32(MESSAGE_HANDSHAKE_RESPONSE): {
 165                struct message_handshake_response *message =
 166                        (struct message_handshake_response *)skb->data;
 167
 168                if (packet_needs_cookie) {
 169                        wg_packet_send_handshake_cookie(wg, skb,
 170                                                        message->sender_index);
 171                        return;
 172                }
 173                peer = wg_noise_handshake_consume_response(message, wg);
 174                if (unlikely(!peer)) {
 175                        net_dbg_skb_ratelimited("%s: Invalid handshake response from %pISpfsc\n",
 176                                                wg->dev->name, skb);
 177                        return;
 178                }
 179                wg_socket_set_peer_endpoint_from_skb(peer, skb);
 180                net_dbg_ratelimited("%s: Receiving handshake response from peer %llu (%pISpfsc)\n",
 181                                    wg->dev->name, peer->internal_id,
 182                                    &peer->endpoint.addr);
 183                if (wg_noise_handshake_begin_session(&peer->handshake,
 184                                                     &peer->keypairs)) {
 185                        wg_timers_session_derived(peer);
 186                        wg_timers_handshake_complete(peer);
 187                        /* Calling this function will either send any existing
 188                         * packets in the queue and not send a keepalive, which
 189                         * is the best case, Or, if there's nothing in the
 190                         * queue, it will send a keepalive, in order to give
 191                         * immediate confirmation of the session.
 192                         */
 193                        wg_packet_send_keepalive(peer);
 194                }
 195                break;
 196        }
 197        }
 198
 199        if (unlikely(!peer)) {
 200                WARN(1, "Somehow a wrong type of packet wound up in the handshake queue!\n");
 201                return;
 202        }
 203
 204        local_bh_disable();
 205        update_rx_stats(peer, skb->len);
 206        local_bh_enable();
 207
 208        wg_timers_any_authenticated_packet_received(peer);
 209        wg_timers_any_authenticated_packet_traversal(peer);
 210        wg_peer_put(peer);
 211}
 212
 213void wg_packet_handshake_receive_worker(struct work_struct *work)
 214{
 215        struct crypt_queue *queue = container_of(work, struct multicore_worker, work)->ptr;
 216        struct wg_device *wg = container_of(queue, struct wg_device, handshake_queue);
 217        struct sk_buff *skb;
 218
 219        while ((skb = ptr_ring_consume_bh(&queue->ring)) != NULL) {
 220                wg_receive_handshake_packet(wg, skb);
 221                dev_kfree_skb(skb);
 222                atomic_dec(&wg->handshake_queue_len);
 223                cond_resched();
 224        }
 225}
 226
 227static void keep_key_fresh(struct wg_peer *peer)
 228{
 229        struct noise_keypair *keypair;
 230        bool send;
 231
 232        if (peer->sent_lastminute_handshake)
 233                return;
 234
 235        rcu_read_lock_bh();
 236        keypair = rcu_dereference_bh(peer->keypairs.current_keypair);
 237        send = keypair && READ_ONCE(keypair->sending.is_valid) &&
 238               keypair->i_am_the_initiator &&
 239               wg_birthdate_has_expired(keypair->sending.birthdate,
 240                        REJECT_AFTER_TIME - KEEPALIVE_TIMEOUT - REKEY_TIMEOUT);
 241        rcu_read_unlock_bh();
 242
 243        if (unlikely(send)) {
 244                peer->sent_lastminute_handshake = true;
 245                wg_packet_send_queued_handshake_initiation(peer, false);
 246        }
 247}
 248
 249static bool decrypt_packet(struct sk_buff *skb, struct noise_keypair *keypair)
 250{
 251        struct scatterlist sg[MAX_SKB_FRAGS + 8];
 252        struct sk_buff *trailer;
 253        unsigned int offset;
 254        int num_frags;
 255
 256        if (unlikely(!keypair))
 257                return false;
 258
 259        if (unlikely(!READ_ONCE(keypair->receiving.is_valid) ||
 260                  wg_birthdate_has_expired(keypair->receiving.birthdate, REJECT_AFTER_TIME) ||
 261                  keypair->receiving_counter.counter >= REJECT_AFTER_MESSAGES)) {
 262                WRITE_ONCE(keypair->receiving.is_valid, false);
 263                return false;
 264        }
 265
 266        PACKET_CB(skb)->nonce =
 267                le64_to_cpu(((struct message_data *)skb->data)->counter);
 268
 269        /* We ensure that the network header is part of the packet before we
 270         * call skb_cow_data, so that there's no chance that data is removed
 271         * from the skb, so that later we can extract the original endpoint.
 272         */
 273        offset = skb->data - skb_network_header(skb);
 274        skb_push(skb, offset);
 275        num_frags = skb_cow_data(skb, 0, &trailer);
 276        offset += sizeof(struct message_data);
 277        skb_pull(skb, offset);
 278        if (unlikely(num_frags < 0 || num_frags > ARRAY_SIZE(sg)))
 279                return false;
 280
 281        sg_init_table(sg, num_frags);
 282        if (skb_to_sgvec(skb, sg, 0, skb->len) <= 0)
 283                return false;
 284
 285        if (!chacha20poly1305_decrypt_sg_inplace(sg, skb->len, NULL, 0,
 286                                                 PACKET_CB(skb)->nonce,
 287                                                 keypair->receiving.key))
 288                return false;
 289
 290        /* Another ugly situation of pushing and pulling the header so as to
 291         * keep endpoint information intact.
 292         */
 293        skb_push(skb, offset);
 294        if (pskb_trim(skb, skb->len - noise_encrypted_len(0)))
 295                return false;
 296        skb_pull(skb, offset);
 297
 298        return true;
 299}
 300
 301/* This is RFC6479, a replay detection bitmap algorithm that avoids bitshifts */
 302static bool counter_validate(struct noise_replay_counter *counter, u64 their_counter)
 303{
 304        unsigned long index, index_current, top, i;
 305        bool ret = false;
 306
 307        spin_lock_bh(&counter->lock);
 308
 309        if (unlikely(counter->counter >= REJECT_AFTER_MESSAGES + 1 ||
 310                     their_counter >= REJECT_AFTER_MESSAGES))
 311                goto out;
 312
 313        ++their_counter;
 314
 315        if (unlikely((COUNTER_WINDOW_SIZE + their_counter) <
 316                     counter->counter))
 317                goto out;
 318
 319        index = their_counter >> ilog2(BITS_PER_LONG);
 320
 321        if (likely(their_counter > counter->counter)) {
 322                index_current = counter->counter >> ilog2(BITS_PER_LONG);
 323                top = min_t(unsigned long, index - index_current,
 324                            COUNTER_BITS_TOTAL / BITS_PER_LONG);
 325                for (i = 1; i <= top; ++i)
 326                        counter->backtrack[(i + index_current) &
 327                                ((COUNTER_BITS_TOTAL / BITS_PER_LONG) - 1)] = 0;
 328                counter->counter = their_counter;
 329        }
 330
 331        index &= (COUNTER_BITS_TOTAL / BITS_PER_LONG) - 1;
 332        ret = !test_and_set_bit(their_counter & (BITS_PER_LONG - 1),
 333                                &counter->backtrack[index]);
 334
 335out:
 336        spin_unlock_bh(&counter->lock);
 337        return ret;
 338}
 339
 340#include "selftest/counter.c"
 341
 342static void wg_packet_consume_data_done(struct wg_peer *peer,
 343                                        struct sk_buff *skb,
 344                                        struct endpoint *endpoint)
 345{
 346        struct net_device *dev = peer->device->dev;
 347        unsigned int len, len_before_trim;
 348        struct wg_peer *routed_peer;
 349
 350        wg_socket_set_peer_endpoint(peer, endpoint);
 351
 352        if (unlikely(wg_noise_received_with_keypair(&peer->keypairs,
 353                                                    PACKET_CB(skb)->keypair))) {
 354                wg_timers_handshake_complete(peer);
 355                wg_packet_send_staged_packets(peer);
 356        }
 357
 358        keep_key_fresh(peer);
 359
 360        wg_timers_any_authenticated_packet_received(peer);
 361        wg_timers_any_authenticated_packet_traversal(peer);
 362
 363        /* A packet with length 0 is a keepalive packet */
 364        if (unlikely(!skb->len)) {
 365                update_rx_stats(peer, message_data_len(0));
 366                net_dbg_ratelimited("%s: Receiving keepalive packet from peer %llu (%pISpfsc)\n",
 367                                    dev->name, peer->internal_id,
 368                                    &peer->endpoint.addr);
 369                goto packet_processed;
 370        }
 371
 372        wg_timers_data_received(peer);
 373
 374        if (unlikely(skb_network_header(skb) < skb->head))
 375                goto dishonest_packet_size;
 376        if (unlikely(!(pskb_network_may_pull(skb, sizeof(struct iphdr)) &&
 377                       (ip_hdr(skb)->version == 4 ||
 378                        (ip_hdr(skb)->version == 6 &&
 379                         pskb_network_may_pull(skb, sizeof(struct ipv6hdr)))))))
 380                goto dishonest_packet_type;
 381
 382        skb->dev = dev;
 383        /* We've already verified the Poly1305 auth tag, which means this packet
 384         * was not modified in transit. We can therefore tell the networking
 385         * stack that all checksums of every layer of encapsulation have already
 386         * been checked "by the hardware" and therefore is unnecessary to check
 387         * again in software.
 388         */
 389        skb->ip_summed = CHECKSUM_UNNECESSARY;
 390        skb->csum_level = ~0; /* All levels */
 391        skb->protocol = ip_tunnel_parse_protocol(skb);
 392        if (skb->protocol == htons(ETH_P_IP)) {
 393                len = ntohs(ip_hdr(skb)->tot_len);
 394                if (unlikely(len < sizeof(struct iphdr)))
 395                        goto dishonest_packet_size;
 396                INET_ECN_decapsulate(skb, PACKET_CB(skb)->ds, ip_hdr(skb)->tos);
 397        } else if (skb->protocol == htons(ETH_P_IPV6)) {
 398                len = ntohs(ipv6_hdr(skb)->payload_len) +
 399                      sizeof(struct ipv6hdr);
 400                INET_ECN_decapsulate(skb, PACKET_CB(skb)->ds, ipv6_get_dsfield(ipv6_hdr(skb)));
 401        } else {
 402                goto dishonest_packet_type;
 403        }
 404
 405        if (unlikely(len > skb->len))
 406                goto dishonest_packet_size;
 407        len_before_trim = skb->len;
 408        if (unlikely(pskb_trim(skb, len)))
 409                goto packet_processed;
 410
 411        routed_peer = wg_allowedips_lookup_src(&peer->device->peer_allowedips,
 412                                               skb);
 413        wg_peer_put(routed_peer); /* We don't need the extra reference. */
 414
 415        if (unlikely(routed_peer != peer))
 416                goto dishonest_packet_peer;
 417
 418        napi_gro_receive(&peer->napi, skb);
 419        update_rx_stats(peer, message_data_len(len_before_trim));
 420        return;
 421
 422dishonest_packet_peer:
 423        net_dbg_skb_ratelimited("%s: Packet has unallowed src IP (%pISc) from peer %llu (%pISpfsc)\n",
 424                                dev->name, skb, peer->internal_id,
 425                                &peer->endpoint.addr);
 426        ++dev->stats.rx_errors;
 427        ++dev->stats.rx_frame_errors;
 428        goto packet_processed;
 429dishonest_packet_type:
 430        net_dbg_ratelimited("%s: Packet is neither ipv4 nor ipv6 from peer %llu (%pISpfsc)\n",
 431                            dev->name, peer->internal_id, &peer->endpoint.addr);
 432        ++dev->stats.rx_errors;
 433        ++dev->stats.rx_frame_errors;
 434        goto packet_processed;
 435dishonest_packet_size:
 436        net_dbg_ratelimited("%s: Packet has incorrect size from peer %llu (%pISpfsc)\n",
 437                            dev->name, peer->internal_id, &peer->endpoint.addr);
 438        ++dev->stats.rx_errors;
 439        ++dev->stats.rx_length_errors;
 440        goto packet_processed;
 441packet_processed:
 442        dev_kfree_skb(skb);
 443}
 444
 445int wg_packet_rx_poll(struct napi_struct *napi, int budget)
 446{
 447        struct wg_peer *peer = container_of(napi, struct wg_peer, napi);
 448        struct noise_keypair *keypair;
 449        struct endpoint endpoint;
 450        enum packet_state state;
 451        struct sk_buff *skb;
 452        int work_done = 0;
 453        bool free;
 454
 455        if (unlikely(budget <= 0))
 456                return 0;
 457
 458        while ((skb = wg_prev_queue_peek(&peer->rx_queue)) != NULL &&
 459               (state = atomic_read_acquire(&PACKET_CB(skb)->state)) !=
 460                       PACKET_STATE_UNCRYPTED) {
 461                wg_prev_queue_drop_peeked(&peer->rx_queue);
 462                keypair = PACKET_CB(skb)->keypair;
 463                free = true;
 464
 465                if (unlikely(state != PACKET_STATE_CRYPTED))
 466                        goto next;
 467
 468                if (unlikely(!counter_validate(&keypair->receiving_counter,
 469                                               PACKET_CB(skb)->nonce))) {
 470                        net_dbg_ratelimited("%s: Packet has invalid nonce %llu (max %llu)\n",
 471                                            peer->device->dev->name,
 472                                            PACKET_CB(skb)->nonce,
 473                                            keypair->receiving_counter.counter);
 474                        goto next;
 475                }
 476
 477                if (unlikely(wg_socket_endpoint_from_skb(&endpoint, skb)))
 478                        goto next;
 479
 480                wg_reset_packet(skb, false);
 481                wg_packet_consume_data_done(peer, skb, &endpoint);
 482                free = false;
 483
 484next:
 485                wg_noise_keypair_put(keypair, false);
 486                wg_peer_put(peer);
 487                if (unlikely(free))
 488                        dev_kfree_skb(skb);
 489
 490                if (++work_done >= budget)
 491                        break;
 492        }
 493
 494        if (work_done < budget)
 495                napi_complete_done(napi, work_done);
 496
 497        return work_done;
 498}
 499
 500void wg_packet_decrypt_worker(struct work_struct *work)
 501{
 502        struct crypt_queue *queue = container_of(work, struct multicore_worker,
 503                                                 work)->ptr;
 504        struct sk_buff *skb;
 505
 506        while ((skb = ptr_ring_consume_bh(&queue->ring)) != NULL) {
 507                enum packet_state state =
 508                        likely(decrypt_packet(skb, PACKET_CB(skb)->keypair)) ?
 509                                PACKET_STATE_CRYPTED : PACKET_STATE_DEAD;
 510                wg_queue_enqueue_per_peer_rx(skb, state);
 511                if (need_resched())
 512                        cond_resched();
 513        }
 514}
 515
 516static void wg_packet_consume_data(struct wg_device *wg, struct sk_buff *skb)
 517{
 518        __le32 idx = ((struct message_data *)skb->data)->key_idx;
 519        struct wg_peer *peer = NULL;
 520        int ret;
 521
 522        rcu_read_lock_bh();
 523        PACKET_CB(skb)->keypair =
 524                (struct noise_keypair *)wg_index_hashtable_lookup(
 525                        wg->index_hashtable, INDEX_HASHTABLE_KEYPAIR, idx,
 526                        &peer);
 527        if (unlikely(!wg_noise_keypair_get(PACKET_CB(skb)->keypair)))
 528                goto err_keypair;
 529
 530        if (unlikely(READ_ONCE(peer->is_dead)))
 531                goto err;
 532
 533        ret = wg_queue_enqueue_per_device_and_peer(&wg->decrypt_queue, &peer->rx_queue, skb,
 534                                                   wg->packet_crypt_wq, &wg->decrypt_queue.last_cpu);
 535        if (unlikely(ret == -EPIPE))
 536                wg_queue_enqueue_per_peer_rx(skb, PACKET_STATE_DEAD);
 537        if (likely(!ret || ret == -EPIPE)) {
 538                rcu_read_unlock_bh();
 539                return;
 540        }
 541err:
 542        wg_noise_keypair_put(PACKET_CB(skb)->keypair, false);
 543err_keypair:
 544        rcu_read_unlock_bh();
 545        wg_peer_put(peer);
 546        dev_kfree_skb(skb);
 547}
 548
 549void wg_packet_receive(struct wg_device *wg, struct sk_buff *skb)
 550{
 551        if (unlikely(prepare_skb_header(skb, wg) < 0))
 552                goto err;
 553        switch (SKB_TYPE_LE32(skb)) {
 554        case cpu_to_le32(MESSAGE_HANDSHAKE_INITIATION):
 555        case cpu_to_le32(MESSAGE_HANDSHAKE_RESPONSE):
 556        case cpu_to_le32(MESSAGE_HANDSHAKE_COOKIE): {
 557                int cpu, ret = -EBUSY;
 558
 559                if (unlikely(!rng_is_initialized()))
 560                        goto drop;
 561                if (atomic_read(&wg->handshake_queue_len) > MAX_QUEUED_INCOMING_HANDSHAKES / 2) {
 562                        if (spin_trylock_bh(&wg->handshake_queue.ring.producer_lock)) {
 563                                ret = __ptr_ring_produce(&wg->handshake_queue.ring, skb);
 564                                spin_unlock_bh(&wg->handshake_queue.ring.producer_lock);
 565                        }
 566                } else
 567                        ret = ptr_ring_produce_bh(&wg->handshake_queue.ring, skb);
 568                if (ret) {
 569        drop:
 570                        net_dbg_skb_ratelimited("%s: Dropping handshake packet from %pISpfsc\n",
 571                                                wg->dev->name, skb);
 572                        goto err;
 573                }
 574                atomic_inc(&wg->handshake_queue_len);
 575                cpu = wg_cpumask_next_online(&wg->handshake_queue.last_cpu);
 576                /* Queues up a call to packet_process_queued_handshake_packets(skb): */
 577                queue_work_on(cpu, wg->handshake_receive_wq,
 578                              &per_cpu_ptr(wg->handshake_queue.worker, cpu)->work);
 579                break;
 580        }
 581        case cpu_to_le32(MESSAGE_DATA):
 582                PACKET_CB(skb)->ds = ip_tunnel_get_dsfield(ip_hdr(skb), skb);
 583                wg_packet_consume_data(wg, skb);
 584                break;
 585        default:
 586                WARN(1, "Non-exhaustive parsing of packet header lead to unknown packet type!\n");
 587                goto err;
 588        }
 589        return;
 590
 591err:
 592        dev_kfree_skb(skb);
 593}
 594