Skip to content
代码片段 群组 项目

比较版本

更改显示为版本正在合并到目标版本。了解更多关于比较版本的信息。

来源

选择目标项目
No results found

目标

选择目标项目
  • wireguard/wireguard-linux-compat
  • apsara2825/wireguard-linux-compat
2 个结果
显示更改
源代码提交(14)
  • Jason A. Donenfeld's avatar
    qemu: simplify RNG seeding · ffb8cd62
    Jason A. Donenfeld 创作于
    
    We don't actualy need to write anything in the pool. Instead, we just
    force the total over 128, and we should be good to go for all old
    kernels. We also only need this on getrandom() kernels, which simplifies
    things too.
    
    Signed-off-by: default avatarJason A. Donenfeld <Jason@zx2c4.com>
    ffb8cd62
  • Wang Hai's avatar
    socket: free skb in send6 when ipv6 is disabled · fa32671b
    Wang Hai 创作于
    
    I got a memory leak report:
    
    unreferenced object 0xffff8881191fc040 (size 232):
      comm "kworker/u17:0", pid 23193, jiffies 4295238848 (age 3464.870s)
      hex dump (first 32 bytes):
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
      backtrace:
        [<ffffffff814c3ef4>] slab_post_alloc_hook+0x84/0x3b0
        [<ffffffff814c8977>] kmem_cache_alloc_node+0x167/0x340
        [<ffffffff832974fb>] __alloc_skb+0x1db/0x200
        [<ffffffff82612b5d>] wg_socket_send_buffer_to_peer+0x3d/0xc0
        [<ffffffff8260e94a>] wg_packet_send_handshake_initiation+0xfa/0x110
        [<ffffffff8260ec81>] wg_packet_handshake_send_worker+0x21/0x30
        [<ffffffff8119c558>] process_one_work+0x2e8/0x770
        [<ffffffff8119ca2a>] worker_thread+0x4a/0x4b0
        [<ffffffff811a88e0>] kthread+0x120/0x160
        [<ffffffff8100242f>] ret_from_fork+0x1f/0x30
    
    In function wg_socket_send_buffer_as_reply_to_skb() or wg_socket_send_
    buffer_to_peer(), the semantics of send6() is required to free skb. But
    when CONFIG_IPV6 is disable, kfree_skb() is missing. This patch adds it
    to fix this bug.
    
    Signed-off-by: default avatarWang Hai <wanghai38@huawei.com>
    Signed-off-by: default avatarJason A. Donenfeld <Jason@zx2c4.com>
    fa32671b
  • Jason A. Donenfeld's avatar
    socket: ignore v6 endpoints when ipv6 is disabled · ec89ca64
    Jason A. Donenfeld 创作于
    
    The previous commit fixed a memory leak on the send path in the event
    that IPv6 is disabled at compile time, but how did a packet even arrive
    there to begin with? It turns out we have previously allowed IPv6
    endpoints even when IPv6 support is disabled at compile time. This is
    awkward and inconsistent. Instead, let's just ignore all things IPv6,
    the same way we do other malformed endpoints, in the case where IPv6 is
    disabled.
    
    Signed-off-by: default avatarJason A. Donenfeld <Jason@zx2c4.com>
    ec89ca64
  • Jason A. Donenfeld's avatar
    qemu: enable ACPI for SMP · f909532a
    Jason A. Donenfeld 创作于
    
    It turns out that by having CONFIG_ACPI=n, we've been failing to boot
    additional CPUs, and so these systems were functionally UP. The code
    bloat is unfortunate for build times, but I don't see an alternative. So
    this commit sets CONFIG_ACPI=y for x86_64 and i686 configs.
    
    Signed-off-by: default avatarJason A. Donenfeld <Jason@zx2c4.com>
    f909532a
  • Nikolay Aleksandrov's avatar
    device: check for metadata_dst with skb_valid_dst() · f9d9b4db
    Nikolay Aleksandrov 创作于
    When we try to transmit an skb with md_dst attached through wireguard
    we hit a null pointer dereference in wg_xmit() due to the use of
    dst_mtu() which calls into dst_blackhole_mtu() which in turn tries to
    dereference dst->dev.
    
    Since wireguard doesn't use md_dsts we should use skb_valid_dst(), which
    checks for DST_METADATA flag, and if it's set, then falls back to
    wireguard's device mtu. That gives us the best chance of transmitting
    the packet; otherwise if the blackhole netdev is used we'd get
    ETH_MIN_MTU.
    
     [  263.693506] BUG: kernel NULL pointer dereference, address: 00000000000000e0
     [  263.693908] #PF: supervisor read access in kernel mode
     [  263.694174] #PF: error_code(0x0000) - not-present page
     [  263.694424] PGD 0 P4D 0
     [  263.694653] Oops: 0000 [#1] PREEMPT SMP NOPTI
     [  263.694876] CPU: 5 PID: 951 Comm: mausezahn Kdump: loaded Not tainted 5.18.0-rc1+ #522
     [  263.695190] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1.fc35 04/01/2014
     [  263.695529] RIP: 0010:dst_blackhole_mtu+0x17/0x20
     [  263.695770] Code: 00 00 00 0f 1f 44 00 00 c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 48 8b 47 10 48 83 e0 fc 8b 40 04 85 c0 75 09 48 8b 07 <8b> 80 e0 00 00 00 c3 66 90 0f 1f 44 00 00 48 89 d7 be 01 00 00 00
     [  263.696339] RSP: 0018:ffffa4a4422fbb28 EFLAGS: 00010246
     [  263.696600] RAX: 0000000000000000 RBX: ffff8ac9c3553000 RCX: 0000000000000000
     [  263.696891] RDX: 0000000000000401 RSI: 00000000fffffe01 RDI: ffffc4a43fb48900
     [  263.697178] RBP: ffffa4a4422fbb90 R08: ffffffff9622635e R09: 0000000000000002
     [  263.697469] R10: ffffffff9b69a6c0 R11: ffffa4a4422fbd0c R12: ffff8ac9d18b1a00
     [  263.697766] R13: ffff8ac9d0ce1840 R14: ffff8ac9d18b1a00 R15: ffff8ac9c3553000
     [  263.698054] FS:  00007f3704c337c0(0000) GS:ffff8acaebf40000(0000) knlGS:0000000000000000
     [  263.698470] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
     [  263.698826] CR2: 00000000000000e0 CR3: 0000000117a5c000 CR4: 00000000000006e0
     [  263.699214] Call Trace:
     [  263.699505]  <TASK>
     [  263.699759]  wg_xmit+0x411/0x450
     [  263.700059]  ? bpf_skb_set_tunnel_key+0x46/0x2d0
     [   263.700382]  ? dev_queue_xmit_nit+0x31/0x2b0
     [  263.700719]  dev_hard_start_xmit+0xd9/0x220
     [  263.701047]  __dev_queue_xmit+0x8b9/0xd30
     [  263.701344]  __bpf_redirect+0x1a4/0x380
     [  263.701664]  __dev_queue_xmit+0x83b/0xd30
     [  263.701961]  ? packet_parse_headers+0xb4/0xf0
     [  263.702275]  packet_sendmsg+0x9a8/0x16a0
     [  263.702596]  ? _raw_spin_unlock_irqrestore+0x23/0x40
     [  263.702933]  sock_sendmsg+0x5e/0x60
     [  263.703239]  __sys_sendto+0xf0/0x160
     [  263.703549]  __x64_sys_sendto+0x20/0x30
     [  263.703853]  do_syscall_64+0x3b/0x90
     [  263.704162]  entry_SYSCALL_64_after_hwframe+0x44/0xae
     [  263.704494] RIP: 0033:0x7f3704d50506
     [  263.704789] Code: 48 c7 c0 ff ff ff ff eb b7 66 2e 0f 1f 84 00 00 00 00 00 90 41 89 ca 64 8b 04 25 18 00 00 00 85 c0 75 11 b8 2c 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 72 c3 90 55 48 83 ec 30 44 89 4c 24 2c 4c 89
     [  263.705652] RSP: 002b:00007ffe954b0b88 EFLAGS: 00000246 ORIG_RAX: 000000000000002c
     [  263.706141] RAX: ffffffffffffffda RBX: 0000558bb259b490 RCX: 00007f3704d50506
     [  263.706544] RDX: 000000000000004a RSI: 0000558bb259b7b2 RDI: 0000000000000003
     [  263.706952] RBP: 0000000000000000 R08: 00007ffe954b0b90 R09: 0000000000000014
     [  263.707339] R10: 0000000000000000 R11: 0000000000000246 R12: 00007ffe954b0b90
     [  263.707735] R13: 000000000000004a R14: 0000558bb259b7b2 R15: 0000000000000001
     [  263.708132]  </TASK>
     [  263.708398] Modules linked in: bridge netconsole bonding [last unloaded: bridge]
     [  263.708942] CR2: 00000000000000e0
    
    Link: https://github.com/cilium/cilium/issues/19428
    
    
    Reported-by: default avatarMartynas Pumputis <m@lambda.lt>
    Signed-off-by: default avatarNikolay Aleksandrov <razor@blackwall.org>
    Acked-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    [Jason: polyfilled for < 4.3]
    Signed-off-by: default avatarJason A. Donenfeld <Jason@zx2c4.com>
    f9d9b4db
  • Jason A. Donenfeld's avatar
    netns: make routing loop test non-fatal · f8886735
    Jason A. Donenfeld 创作于
    I hate to do this, but I still do not have a good solution to actually
    fix this bug across architectures. So just disable it for now, so that
    the CI can still deliver actionable results. This commit adds a large
    red warning, so that at least the failure isn't lost forever, and
    hopefully this can be revisited down the line.
    
    Link: https://lore.kernel.org/netdev/CAHmME9pv1x6C4TNdL6648HydD8r+txpV4hTUXOBVkrapBXH4QQ@mail.gmail.com/
    Link: https://lore.kernel.org/netdev/YmszSXueTxYOC41G@zx2c4.com/
    Link: https://lore.kernel.org/wireguard/CAHmME9rNnBiNvBstb7MPwK-7AmAN0sOfnhdR=eeLrowWcKxaaQ@mail.gmail.com/
    
    
    Signed-off-by: default avatarJason A. Donenfeld <Jason@zx2c4.com>
    f8886735
  • Jason A. Donenfeld's avatar
    netns: limit parallelism to $(nproc) tests at once · 894152a5
    Jason A. Donenfeld 创作于
    
    The parallel tests were added to catch queueing issues from multiple
    cores. But what happens in reality when testing tons of processes is
    that these separate threads wind up fighting with the scheduler, and we
    wind up with contention in places we don't care about that decrease the
    chances of hitting a bug. So just do a test with the number of CPU
    cores, rather than trying to scale up arbitrarily.
    
    Signed-off-by: default avatarJason A. Donenfeld <Jason@zx2c4.com>
    894152a5
  • Jason A. Donenfeld's avatar
    qemu: use vports on arm · 33c87a11
    Jason A. Donenfeld 创作于
    
    Rather than having to hack up QEMU, just use the virtio serial device.
    
    Signed-off-by: default avatarJason A. Donenfeld <Jason@zx2c4.com>
    33c87a11
  • Jason A. Donenfeld's avatar
    qemu: set panic_on_warn=1 from cmdline · c7560fd0
    Jason A. Donenfeld 创作于
    
    Rather than setting this once init is running, set panic_on_warn from
    the kernel command line, so that it catches splats from WireGuard
    initialization code and the various crypto selftests.
    
    Signed-off-by: default avatarJason A. Donenfeld <Jason@zx2c4.com>
    c7560fd0
  • Jason A. Donenfeld's avatar
    qemu: give up on RHEL8 in CI · ba45dd6f
    Jason A. Donenfeld 创作于
    
    They keep breaking their kernel and being difficult when I send patches
    to fix it, so just give up on trying to support this in the CI. It'll
    bitrot and people will complain and we'll see what happens at that
    point.
    
    Signed-off-by: default avatarJason A. Donenfeld <Jason@zx2c4.com>
    ba45dd6f
  • Jason A. Donenfeld's avatar
    3ec3e822
  • Jason A. Donenfeld's avatar
    version: bump · 18fbcd68
    Jason A. Donenfeld 创作于
    
    Signed-off-by: default avatarJason A. Donenfeld <Jason@zx2c4.com>
    18fbcd68
  • Jason A. Donenfeld's avatar
    compat: do not backport ktime_get_coarse_boottime_ns to c8s · 99935b07
    Jason A. Donenfeld 创作于
    
    Also bump the c8s version stamp.
    
    Reported-by: default avatarVladimír Beneš <vbenes@redhat.com>
    Signed-off-by: default avatarJason A. Donenfeld <Jason@zx2c4.com>
    99935b07
  • Jason A. Donenfeld's avatar
    compat: drop CentOS 8 Stream support · 3d3c92b4
    Jason A. Donenfeld 创作于
    Nobody uses this and it's impossible to maintain given the current CI
    situation.
    
    RHEL 7 and 8 release remain for now, though that might not always be the
    case. See the link for details.
    
    Link: https://lists.zx2c4.com/pipermail/wireguard/2022-June/007664.html
    
    
    Suggested-by: default avatarPhilip J. Perry <phil@elrepo.org>
    Signed-off-by: default avatarJason A. Donenfeld <Jason@zx2c4.com>
    3d3c92b4
显示
77 个添加46 个删除
...@@ -69,6 +69,10 @@ ifeq ($(wildcard $(srctree)/arch/arm64/include/asm/neon.h)$(CONFIG_ARM64),y) ...@@ -69,6 +69,10 @@ ifeq ($(wildcard $(srctree)/arch/arm64/include/asm/neon.h)$(CONFIG_ARM64),y)
ccflags-y += -I$(kbuild-dir)/compat/neon-arm/include ccflags-y += -I$(kbuild-dir)/compat/neon-arm/include
endif endif
ifeq ($(wildcard $(srctree)/include/net/dst_metadata.h),)
ccflags-y += -I$(kbuild-dir)/compat/dstmetadata/include
endif
ifeq ($(CONFIG_X86_64),y) ifeq ($(CONFIG_X86_64),y)
ifeq ($(ssse3_instr),) ifeq ($(ssse3_instr),)
ssse3_instr := $(call as-instr,pshufb %xmm0$(comma)%xmm0,-DCONFIG_AS_SSSE3=1) ssse3_instr := $(call as-instr,pshufb %xmm0$(comma)%xmm0,-DCONFIG_AS_SSSE3=1)
......
...@@ -15,9 +15,6 @@ ...@@ -15,9 +15,6 @@
#define ISRHEL7 #define ISRHEL7
#elif RHEL_MAJOR == 8 #elif RHEL_MAJOR == 8
#define ISRHEL8 #define ISRHEL8
#if RHEL_MINOR >= 6
#define ISCENTOS8S
#endif
#endif #endif
#endif #endif
......
...@@ -16,9 +16,6 @@ ...@@ -16,9 +16,6 @@
#define ISRHEL7 #define ISRHEL7
#elif RHEL_MAJOR == 8 #elif RHEL_MAJOR == 8
#define ISRHEL8 #define ISRHEL8
#if RHEL_MINOR >= 6
#define ISCENTOS8S
#endif
#endif #endif
#endif #endif
#ifdef UTS_UBUNTU_RELEASE_ABI #ifdef UTS_UBUNTU_RELEASE_ABI
...@@ -279,7 +276,7 @@ static const struct in6_addr __compat_in6addr_any = IN6ADDR_ANY_INIT; ...@@ -279,7 +276,7 @@ static const struct in6_addr __compat_in6addr_any = IN6ADDR_ANY_INIT;
#define in6addr_any __compat_in6addr_any #define in6addr_any __compat_in6addr_any
#endif #endif
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 13, 0) && LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0) #if LINUX_VERSION_CODE < KERNEL_VERSION(4, 13, 0) && LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0) && (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 0) || LINUX_VERSION_CODE < KERNEL_VERSION(4, 9, 320))
#include <linux/completion.h> #include <linux/completion.h>
#include <linux/random.h> #include <linux/random.h>
#include <linux/errno.h> #include <linux/errno.h>
...@@ -323,7 +320,7 @@ static inline int wait_for_random_bytes(void) ...@@ -323,7 +320,7 @@ static inline int wait_for_random_bytes(void)
} }
#endif #endif
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 19, 0) && LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0) && !defined(ISRHEL8) #if LINUX_VERSION_CODE < KERNEL_VERSION(4, 19, 0) && LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0) && (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) || LINUX_VERSION_CODE < KERNEL_VERSION(4, 14, 285)) && (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 0) || LINUX_VERSION_CODE < KERNEL_VERSION(4, 9, 320)) && !defined(ISRHEL8)
#include <linux/random.h> #include <linux/random.h>
#include <linux/slab.h> #include <linux/slab.h>
struct rng_is_initialized_callback { struct rng_is_initialized_callback {
...@@ -375,7 +372,7 @@ static inline bool rng_is_initialized(void) ...@@ -375,7 +372,7 @@ static inline bool rng_is_initialized(void)
} }
#endif #endif
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 13, 0) #if LINUX_VERSION_CODE < KERNEL_VERSION(4, 13, 0) && (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 0) || LINUX_VERSION_CODE < KERNEL_VERSION(4, 9, 320))
static inline int get_random_bytes_wait(void *buf, int nbytes) static inline int get_random_bytes_wait(void *buf, int nbytes)
{ {
int ret = wait_for_random_bytes(); int ret = wait_for_random_bytes();
...@@ -724,7 +721,7 @@ static inline void *skb_put_data(struct sk_buff *skb, const void *data, unsigned ...@@ -724,7 +721,7 @@ static inline void *skb_put_data(struct sk_buff *skb, const void *data, unsigned
#endif #endif
#endif #endif
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 17, 0) #if LINUX_VERSION_CODE < KERNEL_VERSION(4, 17, 0) && (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) || LINUX_VERSION_CODE < KERNEL_VERSION(4, 14, 285)) && (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 0) || LINUX_VERSION_CODE < KERNEL_VERSION(4, 9, 320))
static inline void le32_to_cpu_array(u32 *buf, unsigned int words) static inline void le32_to_cpu_array(u32 *buf, unsigned int words)
{ {
while (words--) { while (words--) {
...@@ -895,11 +892,13 @@ static inline void skb_mark_not_on_list(struct sk_buff *skb) ...@@ -895,11 +892,13 @@ static inline void skb_mark_not_on_list(struct sk_buff *skb)
#endif #endif
#endif #endif
#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 5, 0) #if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 4, 200) || (LINUX_VERSION_CODE < KERNEL_VERSION(4, 20, 0) && LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 249)) || (LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0) && LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 285)) || (LINUX_VERSION_CODE < KERNEL_VERSION(4, 10, 0) && LINUX_VERSION_CODE >= KERNEL_VERSION(4, 9, 320))
#define blake2s_init zinc_blake2s_init #define blake2s_init zinc_blake2s_init
#define blake2s_init_key zinc_blake2s_init_key #define blake2s_init_key zinc_blake2s_init_key
#define blake2s_update zinc_blake2s_update #define blake2s_update zinc_blake2s_update
#define blake2s_final zinc_blake2s_final #define blake2s_final zinc_blake2s_final
#endif
#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 5, 0)
#define blake2s_hmac zinc_blake2s_hmac #define blake2s_hmac zinc_blake2s_hmac
#define chacha20 zinc_chacha20 #define chacha20 zinc_chacha20
#define hchacha20 zinc_hchacha20 #define hchacha20 zinc_hchacha20
......
#ifndef skb_valid_dst
#define skb_valid_dst(skb) (!!skb_dst(skb))
#endif
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
#include <linux/if_arp.h> #include <linux/if_arp.h>
#include <linux/icmp.h> #include <linux/icmp.h>
#include <linux/suspend.h> #include <linux/suspend.h>
#include <net/dst_metadata.h>
#include <net/icmp.h> #include <net/icmp.h>
#include <net/rtnetlink.h> #include <net/rtnetlink.h>
#include <net/ip_tunnels.h> #include <net/ip_tunnels.h>
...@@ -160,7 +161,7 @@ static netdev_tx_t wg_xmit(struct sk_buff *skb, struct net_device *dev) ...@@ -160,7 +161,7 @@ static netdev_tx_t wg_xmit(struct sk_buff *skb, struct net_device *dev)
goto err_peer; goto err_peer;
} }
mtu = skb_dst(skb) ? dst_mtu(skb_dst(skb)) : dev->mtu; mtu = skb_valid_dst(skb) ? dst_mtu(skb_dst(skb)) : dev->mtu;
__skb_queue_head_init(&packets); __skb_queue_head_init(&packets);
if (!skb_is_gso(skb)) { if (!skb_is_gso(skb)) {
......
PACKAGE_NAME="wireguard" PACKAGE_NAME="wireguard"
PACKAGE_VERSION="1.0.20211208" PACKAGE_VERSION="1.0.20220627"
AUTOINSTALL=yes AUTOINSTALL=yes
BUILT_MODULE_NAME="wireguard" BUILT_MODULE_NAME="wireguard"
......
...@@ -160,6 +160,7 @@ out: ...@@ -160,6 +160,7 @@ out:
rcu_read_unlock_bh(); rcu_read_unlock_bh();
return ret; return ret;
#else #else
kfree_skb(skb);
return -EAFNOSUPPORT; return -EAFNOSUPPORT;
#endif #endif
} }
...@@ -241,7 +242,7 @@ int wg_socket_endpoint_from_skb(struct endpoint *endpoint, ...@@ -241,7 +242,7 @@ int wg_socket_endpoint_from_skb(struct endpoint *endpoint,
endpoint->addr4.sin_addr.s_addr = ip_hdr(skb)->saddr; endpoint->addr4.sin_addr.s_addr = ip_hdr(skb)->saddr;
endpoint->src4.s_addr = ip_hdr(skb)->daddr; endpoint->src4.s_addr = ip_hdr(skb)->daddr;
endpoint->src_if4 = skb->skb_iif; endpoint->src_if4 = skb->skb_iif;
} else if (skb->protocol == htons(ETH_P_IPV6)) { } else if (IS_ENABLED(CONFIG_IPV6) && skb->protocol == htons(ETH_P_IPV6)) {
endpoint->addr6.sin6_family = AF_INET6; endpoint->addr6.sin6_family = AF_INET6;
endpoint->addr6.sin6_port = udp_hdr(skb)->source; endpoint->addr6.sin6_port = udp_hdr(skb)->source;
endpoint->addr6.sin6_addr = ipv6_hdr(skb)->saddr; endpoint->addr6.sin6_addr = ipv6_hdr(skb)->saddr;
...@@ -284,7 +285,7 @@ void wg_socket_set_peer_endpoint(struct wg_peer *peer, ...@@ -284,7 +285,7 @@ void wg_socket_set_peer_endpoint(struct wg_peer *peer,
peer->endpoint.addr4 = endpoint->addr4; peer->endpoint.addr4 = endpoint->addr4;
peer->endpoint.src4 = endpoint->src4; peer->endpoint.src4 = endpoint->src4;
peer->endpoint.src_if4 = endpoint->src_if4; peer->endpoint.src_if4 = endpoint->src_if4;
} else if (endpoint->addr.sa_family == AF_INET6) { } else if (IS_ENABLED(CONFIG_IPV6) && endpoint->addr.sa_family == AF_INET6) {
peer->endpoint.addr6 = endpoint->addr6; peer->endpoint.addr6 = endpoint->addr6;
peer->endpoint.src6 = endpoint->src6; peer->endpoint.src6 = endpoint->src6;
} else { } else {
......
...@@ -22,10 +22,12 @@ ...@@ -22,10 +22,12 @@
# interfaces in $ns1 and $ns2. See https://www.wireguard.com/netns/ for further # interfaces in $ns1 and $ns2. See https://www.wireguard.com/netns/ for further
# details on how this is accomplished. # details on how this is accomplished.
set -e set -e
shopt -s extglob
exec 3>&1 exec 3>&1
export LANG=C export LANG=C
export WG_HIDE_KEYS=never export WG_HIDE_KEYS=never
NPROC=( /sys/devices/system/cpu/cpu+([0-9]) ); NPROC=${#NPROC[@]}
netns0="wg-test-$$-0" netns0="wg-test-$$-0"
netns1="wg-test-$$-1" netns1="wg-test-$$-1"
netns2="wg-test-$$-2" netns2="wg-test-$$-2"
...@@ -147,17 +149,15 @@ tests() { ...@@ -147,17 +149,15 @@ tests() {
[[ $(< /proc/version) =~ ^Linux\ version\ 5\.4[.\ ] ]] || return 0 [[ $(< /proc/version) =~ ^Linux\ version\ 5\.4[.\ ] ]] || return 0
# TCP over IPv4, in parallel # TCP over IPv4, in parallel
for max in 4 5 50; do local pids=( ) i
local pids=( ) for ((i=0; i < NPROC; ++i)) do
for ((i=0; i < max; ++i)) do n2 iperf3 -p $(( 5200 + i )) -s -1 -B 192.168.241.2 &
n2 iperf3 -p $(( 5200 + i )) -s -1 -B 192.168.241.2 & pids+=( $! ); waitiperf $netns2 $! $(( 5200 + i ))
pids+=( $! ); waitiperf $netns2 $! $(( 5200 + i ))
done
for ((i=0; i < max; ++i)) do
n1 iperf3 -Z -t 3 -p $(( 5200 + i )) -c 192.168.241.2 &
done
wait "${pids[@]}"
done done
for ((i=0; i < NPROC; ++i)) do
n1 iperf3 -Z -t 3 -p $(( 5200 + i )) -c 192.168.241.2 &
done
wait "${pids[@]}"
} }
[[ $(ip1 link show dev wg0) =~ mtu\ ([0-9]+) ]] && orig_mtu="${BASH_REMATCH[1]}" [[ $(ip1 link show dev wg0) =~ mtu\ ([0-9]+) ]] && orig_mtu="${BASH_REMATCH[1]}"
...@@ -284,7 +284,19 @@ read _ _ tx_bytes_before < <(n0 wg show wg1 transfer) ...@@ -284,7 +284,19 @@ read _ _ tx_bytes_before < <(n0 wg show wg1 transfer)
! n0 ping -W 1 -c 10 -f 192.168.241.2 || false ! n0 ping -W 1 -c 10 -f 192.168.241.2 || false
sleep 1 sleep 1
read _ _ tx_bytes_after < <(n0 wg show wg1 transfer) read _ _ tx_bytes_after < <(n0 wg show wg1 transfer)
(( tx_bytes_after - tx_bytes_before < 70000 )) if ! (( tx_bytes_after - tx_bytes_before < 70000 )); then
errstart=$'\x1b[37m\x1b[41m\x1b[1m'
errend=$'\x1b[0m'
echo "${errstart} ${errend}"
echo "${errstart} E R R O R ${errend}"
echo "${errstart} ${errend}"
echo "${errstart} This architecture does not do the right thing ${errend}"
echo "${errstart} with cross-namespace routing loops. This test ${errend}"
echo "${errstart} has thus technically failed but, as this issue ${errend}"
echo "${errstart} is as yet unsolved, these tests will continue ${errend}"
echo "${errstart} onward. :( ${errend}"
echo "${errstart} ${errend}"
fi
ip0 link del wg1 ip0 link del wg1
ip1 link del wg0 ip1 link del wg0
......
...@@ -15,7 +15,7 @@ endif ...@@ -15,7 +15,7 @@ endif
ARCH := $(firstword $(subst -, ,$(CBUILD))) ARCH := $(firstword $(subst -, ,$(CBUILD)))
# Set these from the environment to override # Set these from the environment to override
KERNEL_VERSION ?= 5.4.99 KERNEL_VERSION ?= 5.4.200
KERNEL_VERSION := $(KERNEL_VERSION)$(if $(DEBUG_KERNEL),$(if $(findstring -debug,$(KERNEL_VERSION)),,-debug),) KERNEL_VERSION := $(KERNEL_VERSION)$(if $(DEBUG_KERNEL),$(if $(findstring -debug,$(KERNEL_VERSION)),,-debug),)
BUILD_PATH ?= $(PWD)/../../../qemu-build/$(ARCH) BUILD_PATH ?= $(PWD)/../../../qemu-build/$(ARCH)
DISTFILES_PATH ?= $(PWD)/distfiles DISTFILES_PATH ?= $(PWD)/distfiles
...@@ -86,8 +86,10 @@ CROSS_COMPILE_FLAG := --build=$(CBUILD) --host=$(CHOST) ...@@ -86,8 +86,10 @@ CROSS_COMPILE_FLAG := --build=$(CBUILD) --host=$(CHOST)
export CROSS_COMPILE=$(CBUILD)- export CROSS_COMPILE=$(CBUILD)-
STRIP := $(CBUILD)-strip STRIP := $(CBUILD)-strip
endif endif
QEMU_VPORT_RESULT :=
ifeq ($(ARCH),aarch64) ifeq ($(ARCH),aarch64)
QEMU_ARCH := aarch64 QEMU_ARCH := aarch64
QEMU_VPORT_RESULT := virtio-serial-device
KERNEL_ARCH := arm64 KERNEL_ARCH := arm64
KERNEL_BZIMAGE := $(KERNEL_PATH)/arch/arm64/boot/Image KERNEL_BZIMAGE := $(KERNEL_PATH)/arch/arm64/boot/Image
ifeq ($(HOST_ARCH),$(ARCH)) ifeq ($(HOST_ARCH),$(ARCH))
...@@ -98,6 +100,7 @@ CFLAGS += -march=armv8-a -mtune=cortex-a53 ...@@ -98,6 +100,7 @@ CFLAGS += -march=armv8-a -mtune=cortex-a53
endif endif
else ifeq ($(ARCH),aarch64_be) else ifeq ($(ARCH),aarch64_be)
QEMU_ARCH := aarch64 QEMU_ARCH := aarch64
QEMU_VPORT_RESULT := virtio-serial-device
KERNEL_ARCH := arm64 KERNEL_ARCH := arm64
KERNEL_BZIMAGE := $(KERNEL_PATH)/arch/arm64/boot/Image KERNEL_BZIMAGE := $(KERNEL_PATH)/arch/arm64/boot/Image
ifeq ($(HOST_ARCH),$(ARCH)) ifeq ($(HOST_ARCH),$(ARCH))
...@@ -108,6 +111,7 @@ CFLAGS += -march=armv8-a -mtune=cortex-a53 ...@@ -108,6 +111,7 @@ CFLAGS += -march=armv8-a -mtune=cortex-a53
endif endif
else ifeq ($(ARCH),arm) else ifeq ($(ARCH),arm)
QEMU_ARCH := arm QEMU_ARCH := arm
QEMU_VPORT_RESULT := virtio-serial-device
KERNEL_ARCH := arm KERNEL_ARCH := arm
KERNEL_BZIMAGE := $(KERNEL_PATH)/arch/arm/boot/zImage KERNEL_BZIMAGE := $(KERNEL_PATH)/arch/arm/boot/zImage
ifeq ($(HOST_ARCH),$(ARCH)) ifeq ($(HOST_ARCH),$(ARCH))
...@@ -118,6 +122,7 @@ CFLAGS += -march=armv7-a -mtune=cortex-a15 -mabi=aapcs-linux ...@@ -118,6 +122,7 @@ CFLAGS += -march=armv7-a -mtune=cortex-a15 -mabi=aapcs-linux
endif endif
else ifeq ($(ARCH),armeb) else ifeq ($(ARCH),armeb)
QEMU_ARCH := arm QEMU_ARCH := arm
QEMU_VPORT_RESULT := virtio-serial-device
KERNEL_ARCH := arm KERNEL_ARCH := arm
KERNEL_BZIMAGE := $(KERNEL_PATH)/arch/arm/boot/zImage KERNEL_BZIMAGE := $(KERNEL_PATH)/arch/arm/boot/zImage
ifeq ($(HOST_ARCH),$(ARCH)) ifeq ($(HOST_ARCH),$(ARCH))
...@@ -217,7 +222,7 @@ KERNEL_ARCH := m68k ...@@ -217,7 +222,7 @@ KERNEL_ARCH := m68k
KERNEL_BZIMAGE := $(KERNEL_PATH)/vmlinux KERNEL_BZIMAGE := $(KERNEL_PATH)/vmlinux
KERNEL_CMDLINE := $(shell sed -n 's/CONFIG_CMDLINE=\(.*\)/\1/p' arch/m68k.config) KERNEL_CMDLINE := $(shell sed -n 's/CONFIG_CMDLINE=\(.*\)/\1/p' arch/m68k.config)
ifeq ($(HOST_ARCH),$(ARCH)) ifeq ($(HOST_ARCH),$(ARCH))
QEMU_MACHINE := -cpu host,accel=kvm -machine q800 -smp 1 -append $(KERNEL_CMDLINE) QEMU_MACHINE := -cpu host,accel=kvm -machine q800 -append $(KERNEL_CMDLINE)
else else
QEMU_MACHINE := -machine q800 -smp 1 -append $(KERNEL_CMDLINE) QEMU_MACHINE := -machine q800 -smp 1 -append $(KERNEL_CMDLINE)
endif endif
...@@ -230,6 +235,7 @@ MUSL_CC := $(BUILD_PATH)/musl-gcc ...@@ -230,6 +235,7 @@ MUSL_CC := $(BUILD_PATH)/musl-gcc
export CC := $(MUSL_CC) export CC := $(MUSL_CC)
USERSPACE_DEPS := $(MUSL_CC) $(BUILD_PATH)/include/.installed $(BUILD_PATH)/include/linux/.installed USERSPACE_DEPS := $(MUSL_CC) $(BUILD_PATH)/include/.installed $(BUILD_PATH)/include/linux/.installed
comma := ,
build: $(KERNEL_BZIMAGE) build: $(KERNEL_BZIMAGE)
qemu: $(KERNEL_BZIMAGE) qemu: $(KERNEL_BZIMAGE)
rm -f $(BUILD_PATH)/result rm -f $(BUILD_PATH)/result
...@@ -240,7 +246,8 @@ qemu: $(KERNEL_BZIMAGE) ...@@ -240,7 +246,8 @@ qemu: $(KERNEL_BZIMAGE)
$(QEMU_MACHINE) \ $(QEMU_MACHINE) \
-m $$(grep -q CONFIG_DEBUG_KMEMLEAK=y $(KERNEL_PATH)/.config && echo 1G || echo 256M) \ -m $$(grep -q CONFIG_DEBUG_KMEMLEAK=y $(KERNEL_PATH)/.config && echo 1G || echo 256M) \
-serial stdio \ -serial stdio \
-serial file:$(BUILD_PATH)/result \ -chardev file,path=$(BUILD_PATH)/result,id=result \
$(if $(QEMU_VPORT_RESULT),-device $(QEMU_VPORT_RESULT) -device virtserialport$(comma)chardev=result,-serial chardev:result) \
-no-reboot \ -no-reboot \
-monitor none \ -monitor none \
-kernel $< -kernel $<
...@@ -277,12 +284,6 @@ $(KERNEL_PATH)/.installed: $(KERNEL_TAR) ...@@ -277,12 +284,6 @@ $(KERNEL_PATH)/.installed: $(KERNEL_TAR)
printf 'ifdef CONFIG_X86_64\nLDFLAGS += $$(call ld-option, -z max-page-size=0x200000)\nendif\n' >> $(KERNEL_PATH)/arch/x86/Makefile printf 'ifdef CONFIG_X86_64\nLDFLAGS += $$(call ld-option, -z max-page-size=0x200000)\nendif\n' >> $(KERNEL_PATH)/arch/x86/Makefile
sed -i 's/^Elf_Addr per_cpu_load_addr;$$/static \0/' $(KERNEL_PATH)/arch/x86/tools/relocs.c || true sed -i 's/^Elf_Addr per_cpu_load_addr;$$/static \0/' $(KERNEL_PATH)/arch/x86/tools/relocs.c || true
if grep -sqr UTS_UBUNTU_RELEASE_ABI $(KERNEL_PATH)/debian/rules.d; then echo 'KBUILD_CFLAGS += -DUTS_UBUNTU_RELEASE_ABI=0' >> $(KERNEL_PATH)/Makefile; fi if grep -sqr UTS_UBUNTU_RELEASE_ABI $(KERNEL_PATH)/debian/rules.d; then echo 'KBUILD_CFLAGS += -DUTS_UBUNTU_RELEASE_ABI=0' >> $(KERNEL_PATH)/Makefile; fi
if grep -sq 'RHEL_MAJOR = 8' $(KERNEL_PATH)/Makefile.rhelver; then \
sed -i '/#include <asm\//a #include <asm\/acpi.h>/' $(KERNEL_PATH)/arch/x86/kernel/{apic/apic.c,irqinit.c,kvm.c,mpparse.c} && \
sed -i '/#include <asm\//a #include <asm\/numa.h>/' $(KERNEL_PATH)/arch/x86/kernel/setup.c && \
sed -i '/irq_hv_callback_count/d' $(KERNEL_PATH)/arch/x86/kernel/kvm.c && \
sed -i '/do_vmm_communication/d' $(KERNEL_PATH)/arch/x86/entry/entry_64.S; \
fi
sed -i "/^if INET\$$/a source \"net/wireguard/Kconfig\"" $(KERNEL_PATH)/net/Kconfig sed -i "/^if INET\$$/a source \"net/wireguard/Kconfig\"" $(KERNEL_PATH)/net/Kconfig
sed -i "/^obj-\$$(CONFIG_NETFILTER).*+=/a obj-\$$(CONFIG_WIREGUARD) += wireguard/" $(KERNEL_PATH)/net/Makefile sed -i "/^obj-\$$(CONFIG_NETFILTER).*+=/a obj-\$$(CONFIG_WIREGUARD) += wireguard/" $(KERNEL_PATH)/net/Makefile
ln -sfT $(shell readlink -f ../..) $(KERNEL_PATH)/net/wireguard ln -sfT $(shell readlink -f ../..) $(KERNEL_PATH)/net/wireguard
......
CONFIG_SERIAL_AMBA_PL011=y CONFIG_SERIAL_AMBA_PL011=y
CONFIG_SERIAL_AMBA_PL011_CONSOLE=y CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
CONFIG_VIRTIO_MENU=y
CONFIG_VIRTIO_MMIO=y
CONFIG_VIRTIO_CONSOLE=y
CONFIG_CMDLINE_BOOL=y CONFIG_CMDLINE_BOOL=y
CONFIG_CMDLINE="console=ttyAMA0 wg.success=ttyAMA1" CONFIG_CMDLINE="console=ttyAMA0 wg.success=vport0p1 panic_on_warn=1"
CONFIG_FRAME_WARN=1280 CONFIG_FRAME_WARN=1280
CONFIG_CPU_BIG_ENDIAN=y CONFIG_CPU_BIG_ENDIAN=y
CONFIG_SERIAL_AMBA_PL011=y CONFIG_SERIAL_AMBA_PL011=y
CONFIG_SERIAL_AMBA_PL011_CONSOLE=y CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
CONFIG_VIRTIO_MENU=y
CONFIG_VIRTIO_MMIO=y
CONFIG_VIRTIO_CONSOLE=y
CONFIG_CMDLINE_BOOL=y CONFIG_CMDLINE_BOOL=y
CONFIG_CMDLINE="console=ttyAMA0 wg.success=ttyAMA1" CONFIG_CMDLINE="console=ttyAMA0 wg.success=vport0p1 panic_on_warn=1"
CONFIG_FRAME_WARN=1280 CONFIG_FRAME_WARN=1280
...@@ -4,6 +4,9 @@ CONFIG_ARCH_VIRT=y ...@@ -4,6 +4,9 @@ CONFIG_ARCH_VIRT=y
CONFIG_THUMB2_KERNEL=n CONFIG_THUMB2_KERNEL=n
CONFIG_SERIAL_AMBA_PL011=y CONFIG_SERIAL_AMBA_PL011=y
CONFIG_SERIAL_AMBA_PL011_CONSOLE=y CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
CONFIG_VIRTIO_MENU=y
CONFIG_VIRTIO_MMIO=y
CONFIG_VIRTIO_CONSOLE=y
CONFIG_CMDLINE_BOOL=y CONFIG_CMDLINE_BOOL=y
CONFIG_CMDLINE="console=ttyAMA0 wg.success=ttyAMA1" CONFIG_CMDLINE="console=ttyAMA0 wg.success=vport0p1 panic_on_warn=1"
CONFIG_FRAME_WARN=1024 CONFIG_FRAME_WARN=1024
...@@ -4,7 +4,10 @@ CONFIG_ARCH_VIRT=y ...@@ -4,7 +4,10 @@ CONFIG_ARCH_VIRT=y
CONFIG_THUMB2_KERNEL=n CONFIG_THUMB2_KERNEL=n
CONFIG_SERIAL_AMBA_PL011=y CONFIG_SERIAL_AMBA_PL011=y
CONFIG_SERIAL_AMBA_PL011_CONSOLE=y CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
CONFIG_VIRTIO_MENU=y
CONFIG_VIRTIO_MMIO=y
CONFIG_VIRTIO_CONSOLE=y
CONFIG_CMDLINE_BOOL=y CONFIG_CMDLINE_BOOL=y
CONFIG_CMDLINE="console=ttyAMA0 wg.success=ttyAMA1" CONFIG_CMDLINE="console=ttyAMA0 wg.success=vport0p1 panic_on_warn=1"
CONFIG_CPU_BIG_ENDIAN=y CONFIG_CPU_BIG_ENDIAN=y
CONFIG_FRAME_WARN=1024 CONFIG_FRAME_WARN=1024
CONFIG_ACPI=y
CONFIG_SERIAL_8250=y CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_CMDLINE_BOOL=y CONFIG_CMDLINE_BOOL=y
CONFIG_CMDLINE="console=ttyS0 wg.success=ttyS1" CONFIG_CMDLINE="console=ttyS0 wg.success=ttyS1 panic_on_warn=1"
CONFIG_FRAME_WARN=1024 CONFIG_FRAME_WARN=1024
...@@ -5,5 +5,5 @@ CONFIG_MAC=y ...@@ -5,5 +5,5 @@ CONFIG_MAC=y
CONFIG_SERIAL_PMACZILOG=y CONFIG_SERIAL_PMACZILOG=y
CONFIG_SERIAL_PMACZILOG_TTYS=y CONFIG_SERIAL_PMACZILOG_TTYS=y
CONFIG_SERIAL_PMACZILOG_CONSOLE=y CONFIG_SERIAL_PMACZILOG_CONSOLE=y
CONFIG_CMDLINE="console=ttyS0 wg.success=ttyS1" CONFIG_CMDLINE="console=ttyS0 wg.success=ttyS1 panic_on_warn=1"
CONFIG_FRAME_WARN=1024 CONFIG_FRAME_WARN=1024
...@@ -7,5 +7,5 @@ CONFIG_POWER_RESET_SYSCON=y ...@@ -7,5 +7,5 @@ CONFIG_POWER_RESET_SYSCON=y
CONFIG_SERIAL_8250=y CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_CMDLINE_BOOL=y CONFIG_CMDLINE_BOOL=y
CONFIG_CMDLINE="console=ttyS0 wg.success=ttyS1" CONFIG_CMDLINE="console=ttyS0 wg.success=ttyS1 panic_on_warn=1"
CONFIG_FRAME_WARN=1024 CONFIG_FRAME_WARN=1024
...@@ -10,5 +10,5 @@ CONFIG_POWER_RESET_SYSCON=y ...@@ -10,5 +10,5 @@ CONFIG_POWER_RESET_SYSCON=y
CONFIG_SERIAL_8250=y CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_CMDLINE_BOOL=y CONFIG_CMDLINE_BOOL=y
CONFIG_CMDLINE="console=ttyS0 wg.success=ttyS1" CONFIG_CMDLINE="console=ttyS0 wg.success=ttyS1 panic_on_warn=1"
CONFIG_FRAME_WARN=1280 CONFIG_FRAME_WARN=1280
...@@ -11,5 +11,5 @@ CONFIG_POWER_RESET_SYSCON=y ...@@ -11,5 +11,5 @@ CONFIG_POWER_RESET_SYSCON=y
CONFIG_SERIAL_8250=y CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_CMDLINE_BOOL=y CONFIG_CMDLINE_BOOL=y
CONFIG_CMDLINE="console=ttyS0 wg.success=ttyS1" CONFIG_CMDLINE="console=ttyS0 wg.success=ttyS1 panic_on_warn=1"
CONFIG_FRAME_WARN=1280 CONFIG_FRAME_WARN=1280
...@@ -8,5 +8,5 @@ CONFIG_POWER_RESET_SYSCON=y ...@@ -8,5 +8,5 @@ CONFIG_POWER_RESET_SYSCON=y
CONFIG_SERIAL_8250=y CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_CMDLINE_BOOL=y CONFIG_CMDLINE_BOOL=y
CONFIG_CMDLINE="console=ttyS0 wg.success=ttyS1" CONFIG_CMDLINE="console=ttyS0 wg.success=ttyS1 panic_on_warn=1"
CONFIG_FRAME_WARN=1024 CONFIG_FRAME_WARN=1024
...@@ -6,5 +6,5 @@ CONFIG_SERIAL_8250=y ...@@ -6,5 +6,5 @@ CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_MATH_EMULATION=y CONFIG_MATH_EMULATION=y
CONFIG_CMDLINE_BOOL=y CONFIG_CMDLINE_BOOL=y
CONFIG_CMDLINE="console=ttyS0 wg.success=ttyS1" CONFIG_CMDLINE="console=ttyS0 wg.success=ttyS1 panic_on_warn=1"
CONFIG_FRAME_WARN=1024 CONFIG_FRAME_WARN=1024