tun.c (c3bdd5e65185f46150b3bac103b3854040487857) tun.c (c43f1255b866b423d2381f77eaa2cbc64a9c49aa)
1/*
2 * TUN - Universal TUN/TAP device driver.
3 * Copyright (C) 1999-2002 Maxim Krasnyansky <maxk@qualcomm.com>
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.

--- 592 unchanged lines hidden (view full) ---

601 prog = rcu_dereference(tun->steering_prog);
602 if (prog)
603 ret = bpf_prog_run_clear_cb(prog->prog, skb);
604
605 return ret % tun->numqueues;
606}
607
608static u16 tun_select_queue(struct net_device *dev, struct sk_buff *skb,
1/*
2 * TUN - Universal TUN/TAP device driver.
3 * Copyright (C) 1999-2002 Maxim Krasnyansky <maxk@qualcomm.com>
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.

--- 592 unchanged lines hidden (view full) ---

601 prog = rcu_dereference(tun->steering_prog);
602 if (prog)
603 ret = bpf_prog_run_clear_cb(prog->prog, skb);
604
605 return ret % tun->numqueues;
606}
607
608static u16 tun_select_queue(struct net_device *dev, struct sk_buff *skb,
609 struct net_device *sb_dev,
610 select_queue_fallback_t fallback)
609 struct net_device *sb_dev)
611{
612 struct tun_struct *tun = netdev_priv(dev);
613 u16 ret;
614
615 rcu_read_lock();
616 if (rcu_dereference(tun->steering_prog))
617 ret = tun_ebpf_select_queue(tun, skb);
618 else

--- 419 unchanged lines hidden (view full) ---

1038 netif_tx_stop_all_queues(dev);
1039 return 0;
1040}
1041
1042/* Net device start xmit */
1043static void tun_automq_xmit(struct tun_struct *tun, struct sk_buff *skb)
1044{
1045#ifdef CONFIG_RPS
610{
611 struct tun_struct *tun = netdev_priv(dev);
612 u16 ret;
613
614 rcu_read_lock();
615 if (rcu_dereference(tun->steering_prog))
616 ret = tun_ebpf_select_queue(tun, skb);
617 else

--- 419 unchanged lines hidden (view full) ---

1037 netif_tx_stop_all_queues(dev);
1038 return 0;
1039}
1040
1041/* Net device start xmit */
1042static void tun_automq_xmit(struct tun_struct *tun, struct sk_buff *skb)
1043{
1044#ifdef CONFIG_RPS
1046 if (tun->numqueues == 1 && static_key_false(&rps_needed)) {
1045 if (tun->numqueues == 1 && static_branch_unlikely(&rps_needed)) {
1047 /* Select queue was not called for the skbuff, so we extract the
1048 * RPS hash and save it into the flow_table here.
1049 */
1050 struct tun_flow_entry *e;
1051 __u32 rxhash;
1052
1053 rxhash = __skb_get_hash_symmetric(skb);
1054 e = tun_flow_find(&tun->flows[tun_hashfn(rxhash)], rxhash);

--- 703 unchanged lines hidden (view full) ---

1758 int good_linear;
1759 int copylen;
1760 bool zerocopy = false;
1761 int err;
1762 u32 rxhash = 0;
1763 int skb_xdp = 1;
1764 bool frags = tun_napi_frags_enabled(tfile);
1765
1046 /* Select queue was not called for the skbuff, so we extract the
1047 * RPS hash and save it into the flow_table here.
1048 */
1049 struct tun_flow_entry *e;
1050 __u32 rxhash;
1051
1052 rxhash = __skb_get_hash_symmetric(skb);
1053 e = tun_flow_find(&tun->flows[tun_hashfn(rxhash)], rxhash);

--- 703 unchanged lines hidden (view full) ---

1757 int good_linear;
1758 int copylen;
1759 bool zerocopy = false;
1760 int err;
1761 u32 rxhash = 0;
1762 int skb_xdp = 1;
1763 bool frags = tun_napi_frags_enabled(tfile);
1764
1766 if (!(tun->dev->flags & IFF_UP))
1767 return -EIO;
1768
1769 if (!(tun->flags & IFF_NO_PI)) {
1770 if (len < sizeof(pi))
1771 return -EINVAL;
1772 len -= sizeof(pi);
1773
1774 if (!copy_from_iter_full(&pi, sizeof(pi), from))
1775 return -EFAULT;
1776 }

--- 85 unchanged lines hidden (view full) ---

1862 }
1863
1864 if (zerocopy)
1865 err = zerocopy_sg_from_iter(skb, from);
1866 else
1867 err = skb_copy_datagram_from_iter(skb, 0, from, len);
1868
1869 if (err) {
1765 if (!(tun->flags & IFF_NO_PI)) {
1766 if (len < sizeof(pi))
1767 return -EINVAL;
1768 len -= sizeof(pi);
1769
1770 if (!copy_from_iter_full(&pi, sizeof(pi), from))
1771 return -EFAULT;
1772 }

--- 85 unchanged lines hidden (view full) ---

1858 }
1859
1860 if (zerocopy)
1861 err = zerocopy_sg_from_iter(skb, from);
1862 else
1863 err = skb_copy_datagram_from_iter(skb, 0, from, len);
1864
1865 if (err) {
1866 err = -EFAULT;
1867drop:
1870 this_cpu_inc(tun->pcpu_stats->rx_dropped);
1871 kfree_skb(skb);
1872 if (frags) {
1873 tfile->napi.skb = NULL;
1874 mutex_unlock(&tfile->napi_mutex);
1875 }
1876
1868 this_cpu_inc(tun->pcpu_stats->rx_dropped);
1869 kfree_skb(skb);
1870 if (frags) {
1871 tfile->napi.skb = NULL;
1872 mutex_unlock(&tfile->napi_mutex);
1873 }
1874
1877 return -EFAULT;
1875 return err;
1878 }
1879 }
1880
1881 if (virtio_net_hdr_to_skb(skb, &gso, tun_is_little_endian(tun))) {
1882 this_cpu_inc(tun->pcpu_stats->rx_frame_errors);
1883 kfree_skb(skb);
1884 if (frags) {
1885 tfile->napi.skb = NULL;

--- 67 unchanged lines hidden (view full) ---

1953 /* Compute the costly rx hash only if needed for flow updates.
1954 * We may get a very small possibility of OOO during switching, not
1955 * worth to optimize.
1956 */
1957 if (!rcu_access_pointer(tun->steering_prog) && tun->numqueues > 1 &&
1958 !tfile->detached)
1959 rxhash = __skb_get_hash_symmetric(skb);
1960
1876 }
1877 }
1878
1879 if (virtio_net_hdr_to_skb(skb, &gso, tun_is_little_endian(tun))) {
1880 this_cpu_inc(tun->pcpu_stats->rx_frame_errors);
1881 kfree_skb(skb);
1882 if (frags) {
1883 tfile->napi.skb = NULL;

--- 67 unchanged lines hidden (view full) ---

1951 /* Compute the costly rx hash only if needed for flow updates.
1952 * We may get a very small possibility of OOO during switching, not
1953 * worth to optimize.
1954 */
1955 if (!rcu_access_pointer(tun->steering_prog) && tun->numqueues > 1 &&
1956 !tfile->detached)
1957 rxhash = __skb_get_hash_symmetric(skb);
1958
1959 rcu_read_lock();
1960 if (unlikely(!(tun->dev->flags & IFF_UP))) {
1961 err = -EIO;
1962 rcu_read_unlock();
1963 goto drop;
1964 }
1965
1961 if (frags) {
1962 /* Exercise flow dissector code path. */
1966 if (frags) {
1967 /* Exercise flow dissector code path. */
1963 u32 headlen = eth_get_headlen(skb->data, skb_headlen(skb));
1968 u32 headlen = eth_get_headlen(tun->dev, skb->data,
1969 skb_headlen(skb));
1964
1965 if (unlikely(headlen > skb_headlen(skb))) {
1966 this_cpu_inc(tun->pcpu_stats->rx_dropped);
1967 napi_free_frags(&tfile->napi);
1970
1971 if (unlikely(headlen > skb_headlen(skb))) {
1972 this_cpu_inc(tun->pcpu_stats->rx_dropped);
1973 napi_free_frags(&tfile->napi);
1974 rcu_read_unlock();
1968 mutex_unlock(&tfile->napi_mutex);
1969 WARN_ON(1);
1970 return -ENOMEM;
1971 }
1972
1973 local_bh_disable();
1974 napi_gro_frags(&tfile->napi);
1975 local_bh_enable();

--- 11 unchanged lines hidden (view full) ---

1987 napi_schedule(&tfile->napi);
1988
1989 local_bh_enable();
1990 } else if (!IS_ENABLED(CONFIG_4KSTACKS)) {
1991 tun_rx_batched(tun, tfile, skb, more);
1992 } else {
1993 netif_rx_ni(skb);
1994 }
1975 mutex_unlock(&tfile->napi_mutex);
1976 WARN_ON(1);
1977 return -ENOMEM;
1978 }
1979
1980 local_bh_disable();
1981 napi_gro_frags(&tfile->napi);
1982 local_bh_enable();

--- 11 unchanged lines hidden (view full) ---

1994 napi_schedule(&tfile->napi);
1995
1996 local_bh_enable();
1997 } else if (!IS_ENABLED(CONFIG_4KSTACKS)) {
1998 tun_rx_batched(tun, tfile, skb, more);
1999 } else {
2000 netif_rx_ni(skb);
2001 }
2002 rcu_read_unlock();
1995
1996 stats = get_cpu_ptr(tun->pcpu_stats);
1997 u64_stats_update_begin(&stats->syncp);
1998 stats->rx_packets++;
1999 stats->rx_bytes += len;
2000 u64_stats_update_end(&stats->syncp);
2001 put_cpu_ptr(stats);
2002

--- 857 unchanged lines hidden (view full) ---

2860 security_tun_dev_free_security(tun->security);
2861err_free_stat:
2862 free_percpu(tun->pcpu_stats);
2863err_free_dev:
2864 free_netdev(dev);
2865 return err;
2866}
2867
2003
2004 stats = get_cpu_ptr(tun->pcpu_stats);
2005 u64_stats_update_begin(&stats->syncp);
2006 stats->rx_packets++;
2007 stats->rx_bytes += len;
2008 u64_stats_update_end(&stats->syncp);
2009 put_cpu_ptr(stats);
2010

--- 857 unchanged lines hidden (view full) ---

2868 security_tun_dev_free_security(tun->security);
2869err_free_stat:
2870 free_percpu(tun->pcpu_stats);
2871err_free_dev:
2872 free_netdev(dev);
2873 return err;
2874}
2875
2868static void tun_get_iff(struct net *net, struct tun_struct *tun,
2869 struct ifreq *ifr)
2876static void tun_get_iff(struct tun_struct *tun, struct ifreq *ifr)
2870{
2871 tun_debug(KERN_INFO, tun, "tun_get_iff\n");
2872
2873 strcpy(ifr->ifr_name, tun->dev->name);
2874
2875 ifr->ifr_flags = tun_flags(tun);
2876
2877}

--- 212 unchanged lines hidden (view full) ---

3090 }
3091
3092 ret = -EBADFD;
3093 if (!tun)
3094 goto unlock;
3095
3096 tun_debug(KERN_INFO, tun, "tun_chr_ioctl cmd %u\n", cmd);
3097
2877{
2878 tun_debug(KERN_INFO, tun, "tun_get_iff\n");
2879
2880 strcpy(ifr->ifr_name, tun->dev->name);
2881
2882 ifr->ifr_flags = tun_flags(tun);
2883
2884}

--- 212 unchanged lines hidden (view full) ---

3097 }
3098
3099 ret = -EBADFD;
3100 if (!tun)
3101 goto unlock;
3102
3103 tun_debug(KERN_INFO, tun, "tun_chr_ioctl cmd %u\n", cmd);
3104
3105 net = dev_net(tun->dev);
3098 ret = 0;
3099 switch (cmd) {
3100 case TUNGETIFF:
3106 ret = 0;
3107 switch (cmd) {
3108 case TUNGETIFF:
3101 tun_get_iff(current->nsproxy->net_ns, tun, &ifr);
3109 tun_get_iff(tun, &ifr);
3102
3103 if (tfile->detached)
3104 ifr.ifr_flags |= IFF_DETACH_QUEUE;
3105 if (!tfile->socket.sk->sk_filter)
3106 ifr.ifr_flags |= IFF_NOFILTER;
3107
3108 if (copy_to_user(argp, &ifr, ifreq_len))
3109 ret = -EFAULT;

--- 205 unchanged lines hidden (view full) ---

3315 case TUNSETCARRIER:
3316 ret = -EFAULT;
3317 if (copy_from_user(&carrier, argp, sizeof(carrier)))
3318 goto unlock;
3319
3320 ret = tun_net_change_carrier(tun->dev, (bool)carrier);
3321 break;
3322
3110
3111 if (tfile->detached)
3112 ifr.ifr_flags |= IFF_DETACH_QUEUE;
3113 if (!tfile->socket.sk->sk_filter)
3114 ifr.ifr_flags |= IFF_NOFILTER;
3115
3116 if (copy_to_user(argp, &ifr, ifreq_len))
3117 ret = -EFAULT;

--- 205 unchanged lines hidden (view full) ---

3323 case TUNSETCARRIER:
3324 ret = -EFAULT;
3325 if (copy_from_user(&carrier, argp, sizeof(carrier)))
3326 goto unlock;
3327
3328 ret = tun_net_change_carrier(tun->dev, (bool)carrier);
3329 break;
3330
3331 case TUNGETDEVNETNS:
3332 ret = -EPERM;
3333 if (!ns_capable(net->user_ns, CAP_NET_ADMIN))
3334 goto unlock;
3335 ret = open_related_ns(&net->ns, get_net_ns);
3336 break;
3337
3323 default:
3324 ret = -EINVAL;
3325 break;
3326 }
3327
3328 if (do_notify)
3329 netdev_state_change(tun->dev);
3330

--- 113 unchanged lines hidden (view full) ---

3444 struct tun_struct *tun;
3445 struct ifreq ifr;
3446
3447 memset(&ifr, 0, sizeof(ifr));
3448
3449 rtnl_lock();
3450 tun = tun_get(tfile);
3451 if (tun)
3338 default:
3339 ret = -EINVAL;
3340 break;
3341 }
3342
3343 if (do_notify)
3344 netdev_state_change(tun->dev);
3345

--- 113 unchanged lines hidden (view full) ---

3459 struct tun_struct *tun;
3460 struct ifreq ifr;
3461
3462 memset(&ifr, 0, sizeof(ifr));
3463
3464 rtnl_lock();
3465 tun = tun_get(tfile);
3466 if (tun)
3452 tun_get_iff(current->nsproxy->net_ns, tun, &ifr);
3467 tun_get_iff(tun, &ifr);
3453 rtnl_unlock();
3454
3455 if (tun)
3456 tun_put(tun);
3457
3458 seq_printf(m, "iff:\t%s\n", ifr.ifr_name);
3459}
3460#endif

--- 257 unchanged lines hidden ---
3468 rtnl_unlock();
3469
3470 if (tun)
3471 tun_put(tun);
3472
3473 seq_printf(m, "iff:\t%s\n", ifr.ifr_name);
3474}
3475#endif

--- 257 unchanged lines hidden ---