1. 02 Aug, 2024 2 commits
  2. 01 Aug, 2024 26 commits
  3. 31 Jul, 2024 8 commits
    • Kuniyuki Iwashima's avatar
      netfilter: iptables: Fix potential null-ptr-deref in ip6table_nat_table_init(). · c22921df
      Kuniyuki Iwashima authored
      ip6table_nat_table_init() accesses net->gen->ptr[ip6table_nat_net_ops.id],
      but the function is exposed to user space before the entry is allocated
      via register_pernet_subsys().
      
      Let's call register_pernet_subsys() before xt_register_template().
      
      Fixes: fdacd57c ("netfilter: x_tables: never register tables by default")
      Signed-off-by: default avatarKuniyuki Iwashima <kuniyu@amazon.com>
      Reviewed-by: default avatarFlorian Westphal <fw@strlen.de>
      Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
      c22921df
    • Kuniyuki Iwashima's avatar
      netfilter: iptables: Fix null-ptr-deref in iptable_nat_table_init(). · 5830aa86
      Kuniyuki Iwashima authored
      We had a report that iptables-restore sometimes triggered null-ptr-deref
      at boot time. [0]
      
      The problem is that iptable_nat_table_init() is exposed to user space
      before the kernel fully initialises netns.
      
      In the small race window, a user could call iptable_nat_table_init()
      that accesses net_generic(net, iptable_nat_net_id), which is available
      only after registering iptable_nat_net_ops.
      
      Let's call register_pernet_subsys() before xt_register_template().
      
      [0]:
      bpfilter: Loaded bpfilter_umh pid 11702
      Started bpfilter
      BUG: kernel NULL pointer dereference, address: 0000000000000013
       PF: supervisor write access in kernel mode
       PF: error_code(0x0002) - not-present page
      PGD 0 P4D 0
      PREEMPT SMP NOPTI
      CPU: 2 PID: 11879 Comm: iptables-restor Not tainted 6.1.92-99.174.amzn2023.x86_64 #1
      Hardware name: Amazon EC2 c6i.4xlarge/, BIOS 1.0 10/16/2017
      RIP: 0010:iptable_nat_table_init (net/ipv4/netfilter/iptable_nat.c:87 net/ipv4/netfilter/iptable_nat.c:121) iptable_nat
      Code: 10 4c 89 f6 48 89 ef e8 0b 19 bb ff 41 89 c4 85 c0 75 38 41 83 c7 01 49 83 c6 28 41 83 ff 04 75 dc 48 8b 44 24 08 48 8b 0c 24 <48> 89 08 4c 89 ef e8 a2 3b a2 cf 48 83 c4 10 44 89 e0 5b 5d 41 5c
      RSP: 0018:ffffbef902843cd0 EFLAGS: 00010246
      RAX: 0000000000000013 RBX: ffff9f4b052caa20 RCX: ffff9f4b20988d80
      RDX: 0000000000000000 RSI: 0000000000000064 RDI: ffffffffc04201c0
      RBP: ffff9f4b29394000 R08: ffff9f4b07f77258 R09: ffff9f4b07f77240
      R10: 0000000000000000 R11: ffff9f4b09635388 R12: 0000000000000000
      R13: ffff9f4b1a3c6c00 R14: ffff9f4b20988e20 R15: 0000000000000004
      FS:  00007f6284340000(0000) GS:ffff9f51fe280000(0000) knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 0000000000000013 CR3: 00000001d10a6005 CR4: 00000000007706e0
      DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
      PKRU: 55555554
      Call Trace:
       <TASK>
       ? show_trace_log_lvl (arch/x86/kernel/dumpstack.c:259)
       ? show_trace_log_lvl (arch/x86/kernel/dumpstack.c:259)
       ? xt_find_table_lock (net/netfilter/x_tables.c:1259)
       ? __die_body.cold (arch/x86/kernel/dumpstack.c:478 arch/x86/kernel/dumpstack.c:420)
       ? page_fault_oops (arch/x86/mm/fault.c:727)
       ? exc_page_fault (./arch/x86/include/asm/irqflags.h:40 ./arch/x86/include/asm/irqflags.h:75 arch/x86/mm/fault.c:1470 arch/x86/mm/fault.c:1518)
       ? asm_exc_page_fault (./arch/x86/include/asm/idtentry.h:570)
       ? iptable_nat_table_init (net/ipv4/netfilter/iptable_nat.c:87 net/ipv4/netfilter/iptable_nat.c:121) iptable_nat
       xt_find_table_lock (net/netfilter/x_tables.c:1259)
       xt_request_find_table_lock (net/netfilter/x_tables.c:1287)
       get_info (net/ipv4/netfilter/ip_tables.c:965)
       ? security_capable (security/security.c:809 (discriminator 13))
       ? ns_capable (kernel/capability.c:376 kernel/capability.c:397)
       ? do_ipt_get_ctl (net/ipv4/netfilter/ip_tables.c:1656)
       ? bpfilter_send_req (net/bpfilter/bpfilter_kern.c:52) bpfilter
       nf_getsockopt (net/netfilter/nf_sockopt.c:116)
       ip_getsockopt (net/ipv4/ip_sockglue.c:1827)
       __sys_getsockopt (net/socket.c:2327)
       __x64_sys_getsockopt (net/socket.c:2342 net/socket.c:2339 net/socket.c:2339)
       do_syscall_64 (arch/x86/entry/common.c:51 arch/x86/entry/common.c:81)
       entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:121)
      RIP: 0033:0x7f62844685ee
      Code: 48 8b 0d 45 28 0f 00 f7 d8 64 89 01 48 83 c8 ff c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa 49 89 ca b8 37 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 0a c3 66 0f 1f 84 00 00 00 00 00 48 8b 15 09
      RSP: 002b:00007ffd1f83d638 EFLAGS: 00000246 ORIG_RAX: 0000000000000037
      RAX: ffffffffffffffda RBX: 00007ffd1f83d680 RCX: 00007f62844685ee
      RDX: 0000000000000040 RSI: 0000000000000000 RDI: 0000000000000004
      RBP: 0000000000000004 R08: 00007ffd1f83d670 R09: 0000558798ffa2a0
      R10: 00007ffd1f83d680 R11: 0000000000000246 R12: 00007ffd1f83e3b2
      R13: 00007f628455baa0 R14: 00007ffd1f83d7b0 R15: 00007f628457a008
       </TASK>
      Modules linked in: iptable_nat(+) bpfilter rpcsec_gss_krb5 auth_rpcgss nfsv4 dns_resolver nfs lockd grace fscache veth xt_state xt_connmark xt_nat xt_statistic xt_MASQUERADE xt_mark xt_addrtype ipt_REJECT nf_reject_ipv4 nft_chain_nat nf_nat xt_conntrack nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 xt_comment nft_compat nf_tables nfnetlink overlay nls_ascii nls_cp437 vfat fat ghash_clmulni_intel aesni_intel ena crypto_simd ptp cryptd i8042 pps_core serio button sunrpc sch_fq_codel configfs loop dm_mod fuse dax dmi_sysfs crc32_pclmul crc32c_intel efivarfs
      CR2: 0000000000000013
      
      Fixes: fdacd57c ("netfilter: x_tables: never register tables by default")
      Reported-by: default avatarTakahiro Kawahara <takawaha@amazon.co.jp>
      Signed-off-by: default avatarKuniyuki Iwashima <kuniyu@amazon.com>
      Reviewed-by: default avatarFlorian Westphal <fw@strlen.de>
      Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
      5830aa86
    • Linus Torvalds's avatar
      minmax: fix up min3() and max3() too · 21b136cc
      Linus Torvalds authored
      David Laight pointed out that we should deal with the min3() and max3()
      mess too, which still does excessive expansion.
      
      And our current macros are actually rather broken.
      
      In particular, the macros did this:
      
        #define min3(x, y, z) min((typeof(x))min(x, y), z)
        #define max3(x, y, z) max((typeof(x))max(x, y), z)
      
      and that not only is a nested expansion of possibly very complex
      arguments with all that involves, the typing with that "typeof()" cast
      is completely wrong.
      
      For example, imagine what happens in max3() if 'x' happens to be a
      'unsigned char', but 'y' and 'z' are 'unsigned long'.  The types are
      compatible, and there's no warning - but the result is just random
      garbage.
      
      No, I don't think we've ever hit that issue in practice, but since we
      now have sane infrastructure for doing this right, let's just use it.
      It fixes any excessive expansion, and also avoids these kinds of broken
      type issues.
      Requested-by: default avatarDavid Laight <David.Laight@aculab.com>
      Acked-by: default avatarArnd Bergmann <arnd@kernel.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      21b136cc
    • Linus Torvalds's avatar
      Merge tag 'for-6.11-rc1-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux · e4fc196f
      Linus Torvalds authored
      Pull btrfs fixes from David Sterba:
      
       - fix regression in extent map rework when handling insertion of
         overlapping compressed extent
      
       - fix unexpected file length when appending to a file using direct io
         and buffer not faulted in
      
       - in zoned mode, fix accounting of unusable space when flipping
         read-only block group back to read-write
      
       - fix page locking when COWing an inline range, assertion failure found
         by syzbot
      
       - fix calculation of space info in debugging print
      
       - tree-checker, add validation of data reference item
      
       - fix a few -Wmaybe-uninitialized build warnings
      
      * tag 'for-6.11-rc1-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux:
        btrfs: initialize location to fix -Wmaybe-uninitialized in btrfs_lookup_dentry()
        btrfs: fix corruption after buffer fault in during direct IO append write
        btrfs: zoned: fix zone_unusable accounting on making block group read-write again
        btrfs: do not subtract delalloc from avail bytes
        btrfs: make cow_file_range_inline() honor locked_page on error
        btrfs: fix corrupt read due to bad offset of a compressed extent map
        btrfs: tree-checker: validate dref root and objectid
      e4fc196f
    • Linus Torvalds's avatar
      Merge tag 'perf-tools-fixes-for-v6.11-2024-07-30' of... · e254e0c5
      Linus Torvalds authored
      Merge tag 'perf-tools-fixes-for-v6.11-2024-07-30' of git://git.kernel.org/pub/scm/linux/kernel/git/perf/perf-tools
      
      Pull perf tools fixes from Namhyung Kim:
       "Some more build fixes and a random crash fix:
      
         - Fix cross-build by setting pkg-config env according to the arch
      
         - Fix static build for missing library dependencies
      
         - Fix Segfault when callchain has no symbols"
      
      * tag 'perf-tools-fixes-for-v6.11-2024-07-30' of git://git.kernel.org/pub/scm/linux/kernel/git/perf/perf-tools:
        perf docs: Document cross compilation
        perf: build: Link lib 'zstd' for static build
        perf: build: Link lib 'lzma' for static build
        perf: build: Only link libebl.a for old libdw
        perf: build: Set Python configuration for cross compilation
        perf: build: Setup PKG_CONFIG_LIBDIR for cross compilation
        perf tool: fix dereferencing NULL al->maps
      e254e0c5
    • Jakub Kicinski's avatar
      Merge branch '100GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/net-queue · 0bf50cea
      Jakub Kicinski authored
      Tony Nguyen says:
      
      ====================
      ice: fix AF_XDP ZC timeout and concurrency issues
      
      Maciej Fijalkowski says:
      
      Changes included in this patchset address an issue that customer has
      been facing when AF_XDP ZC Tx sockets were used in combination with flow
      control and regular Tx traffic.
      
      After executing:
      ethtool --set-priv-flags $dev link-down-on-close on
      ethtool -A $dev rx on tx on
      
      launching multiple ZC Tx sockets on $dev + pinging remote interface (so
      that regular Tx traffic is present) and then going through down/up of
      $dev, Tx timeout occurred and then most of the time ice driver was unable
      to recover from that state.
      
      These patches combined together solve the described above issue on
      customer side. Main focus here is to forbid producing Tx descriptors when
      either carrier is not yet initialized or process of bringing interface
      down has already started.
      
      v1: https://lore.kernel.org/netdev/20240708221416.625850-1-anthony.l.nguyen@intel.com/
      
      * '100GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/net-queue:
        ice: xsk: fix txq interrupt mapping
        ice: add missing WRITE_ONCE when clearing ice_rx_ring::xdp_prog
        ice: improve updating ice_{t,r}x_ring::xsk_pool
        ice: toggle netif_carrier when setting up XSK pool
        ice: modify error handling when setting XSK pool in ndo_bpf
        ice: replace synchronize_rcu with synchronize_net
        ice: don't busy wait for Rx queue disable in ice_qp_dis()
        ice: respect netif readiness in AF_XDP ZC related ndo's
      ====================
      
      Link: https://patch.msgid.link/20240729200716.681496-1-anthony.l.nguyen@intel.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      0bf50cea
    • Willem de Bruijn's avatar
      net: drop bad gso csum_start and offset in virtio_net_hdr · 89add400
      Willem de Bruijn authored
      Tighten csum_start and csum_offset checks in virtio_net_hdr_to_skb
      for GSO packets.
      
      The function already checks that a checksum requested with
      VIRTIO_NET_HDR_F_NEEDS_CSUM is in skb linear. But for GSO packets
      this might not hold for segs after segmentation.
      
      Syzkaller demonstrated to reach this warning in skb_checksum_help
      
      	offset = skb_checksum_start_offset(skb);
      	ret = -EINVAL;
      	if (WARN_ON_ONCE(offset >= skb_headlen(skb)))
      
      By injecting a TSO packet:
      
      WARNING: CPU: 1 PID: 3539 at net/core/dev.c:3284 skb_checksum_help+0x3d0/0x5b0
       ip_do_fragment+0x209/0x1b20 net/ipv4/ip_output.c:774
       ip_finish_output_gso net/ipv4/ip_output.c:279 [inline]
       __ip_finish_output+0x2bd/0x4b0 net/ipv4/ip_output.c:301
       iptunnel_xmit+0x50c/0x930 net/ipv4/ip_tunnel_core.c:82
       ip_tunnel_xmit+0x2296/0x2c70 net/ipv4/ip_tunnel.c:813
       __gre_xmit net/ipv4/ip_gre.c:469 [inline]
       ipgre_xmit+0x759/0xa60 net/ipv4/ip_gre.c:661
       __netdev_start_xmit include/linux/netdevice.h:4850 [inline]
       netdev_start_xmit include/linux/netdevice.h:4864 [inline]
       xmit_one net/core/dev.c:3595 [inline]
       dev_hard_start_xmit+0x261/0x8c0 net/core/dev.c:3611
       __dev_queue_xmit+0x1b97/0x3c90 net/core/dev.c:4261
       packet_snd net/packet/af_packet.c:3073 [inline]
      
      The geometry of the bad input packet at tcp_gso_segment:
      
      [   52.003050][ T8403] skb len=12202 headroom=244 headlen=12093 tailroom=0
      [   52.003050][ T8403] mac=(168,24) mac_len=24 net=(192,52) trans=244
      [   52.003050][ T8403] shinfo(txflags=0 nr_frags=1 gso(size=1552 type=3 segs=0))
      [   52.003050][ T8403] csum(0x60000c7 start=199 offset=1536
      ip_summed=3 complete_sw=0 valid=0 level=0)
      
      Mitigate with stricter input validation.
      
      csum_offset: for GSO packets, deduce the correct value from gso_type.
      This is already done for USO. Extend it to TSO. Let UFO be:
      udp[46]_ufo_fragment ignores these fields and always computes the
      checksum in software.
      
      csum_start: finding the real offset requires parsing to the transport
      header. Do not add a parser, use existing segmentation parsing. Thanks
      to SKB_GSO_DODGY, that also catches bad packets that are hw offloaded.
      Again test both TSO and USO. Do not test UFO for the above reason, and
      do not test UDP tunnel offload.
      
      GSO packet are almost always CHECKSUM_PARTIAL. USO packets may be
      CHECKSUM_NONE since commit 10154dbd ("udp: Allow GSO transmit
      from devices with no checksum offload"), but then still these fields
      are initialized correctly in udp4_hwcsum/udp6_hwcsum_outgoing. So no
      need to test for ip_summed == CHECKSUM_PARTIAL first.
      
      This revises an existing fix mentioned in the Fixes tag, which broke
      small packets with GSO offload, as detected by kselftests.
      
      Link: https://syzkaller.appspot.com/bug?extid=e1db31216c789f552871
      Link: https://lore.kernel.org/netdev/20240723223109.2196886-1-kuba@kernel.org
      Fixes: e269d79c ("net: missing check virtio")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarWillem de Bruijn <willemb@google.com>
      Link: https://patch.msgid.link/20240729201108.1615114-1-willemdebruijn.kernel@gmail.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      89add400
    • Bartosz Golaszewski's avatar
      net: phy: aquantia: only poll GLOBAL_CFG regs on aqr113, aqr113c and aqr115c · a7f3abcf
      Bartosz Golaszewski authored
      Commit 708405f3 ("net: phy: aquantia: wait for the GLOBAL_CFG to
      start returning real values") introduced a workaround for an issue
      observed on aqr115c. However there were never any reports of it
      happening on other models and the workaround has been reported to cause
      and issue on aqr113c (and it may cause the same on any other model not
      supporting 10M mode).
      
      Let's limit the impact of the workaround to aqr113, aqr113c and aqr115c
      and poll the 100M GLOBAL_CFG register instead as both models are known
      to support it correctly.
      Reported-by: default avatarJon Hunter <jonathanh@nvidia.com>
      Closes: https://lore.kernel.org/lkml/7c0140be-4325-4005-9068-7e0fc5ff344d@nvidia.com/
      Fixes: 708405f3 ("net: phy: aquantia: wait for the GLOBAL_CFG to start returning real values")
      Tested-by: default avatarJon Hunter <jonathanh@nvidia.com>
      Signed-off-by: default avatarBartosz Golaszewski <bartosz.golaszewski@linaro.org>
      Reviewed-by: default avatarAntoine Tenart <atenart@kernel.org>
      Link: https://patch.msgid.link/20240729150315.65798-1-brgl@bgdev.plSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      a7f3abcf
  4. 30 Jul, 2024 4 commits
    • Raju Lakkaraju's avatar
      net: phy: micrel: Fix the KSZ9131 MDI-X status issue · 84383b5e
      Raju Lakkaraju authored
      The MDIX status is not accurately reflecting the current state after the link
      partner has manually altered its MDIX configuration while operating in forced
      mode.
      
      Access information about Auto mdix completion and pair selection from the
      KSZ9131's Auto/MDI/MDI-X status register
      
      Fixes: b64e6a87 ("net: phy: micrel: Add PHY Auto/MDI/MDI-X set driver for KSZ9131")
      Signed-off-by: default avatarRaju Lakkaraju <Raju.Lakkaraju@microchip.com>
      Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
      Link: https://patch.msgid.link/20240725071125.13960-1-Raju.Lakkaraju@microchip.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      84383b5e
    • Jiri Olsa's avatar
      bpf/selftests: Fix ASSERT_OK condition check in uprobe_syscall test · 7764b962
      Jiri Olsa authored
      Fixing ASSERT_OK condition check in uprobe_syscall test,
      otherwise we return from test on pipe success.
      Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
      Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
      Acked-by: default avatarYonghong Song <yonghong.song@linux.dev>
      Link: https://lore.kernel.org/bpf/20240726180847.684584-1-jolsa@kernel.org
      7764b962
    • Linus Torvalds's avatar
      Merge tag 'chrome-platform-fixes-for-v6.11-rc2' of... · c91a7dee
      Linus Torvalds authored
      Merge tag 'chrome-platform-fixes-for-v6.11-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/chrome-platform/linux
      
      Pull chrome-platform fix from Tzung-Bi Shih:
       "Fix a race condition that sends multiple host commands at a time"
      
      * tag 'chrome-platform-fixes-for-v6.11-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/chrome-platform/linux:
        platform/chrome: cros_ec_proto: Lock device when updating MKBP version
      c91a7dee
    • Linus Torvalds's avatar
      minmax: improve macro expansion and type checking · 22f54687
      Linus Torvalds authored
      This clarifies the rules for min()/max()/clamp() type checking and makes
      them a much more efficient macro expansion.
      
      In particular, we now look at the type and range of the inputs to see
      whether they work together, generating a mask of acceptable comparisons,
      and then just verifying that the inputs have a shared case:
      
       - an expression with a signed type can be used for
          (1) signed comparisons
          (2) unsigned comparisons if it is statically known to have a
              non-negative value
      
       - an expression with an unsigned type can be used for
          (3) unsigned comparison
          (4) signed comparisons if the type is smaller than 'int' and thus
              the C integer promotion rules will make it signed anyway
      
      Here rule (1) and (3) are obvious, and rule (2) is important in order to
      allow obvious trivial constants to be used together with unsigned
      values.
      
      Rule (4) is not necessarily a good idea, but matches what we used to do,
      and we have extant cases of this situation in the kernel.  Notably with
      bcachefs having an expression like
      
      	min(bch2_bucket_sectors_dirty(a), ca->mi.bucket_size)
      
      where bch2_bucket_sectors_dirty() returns an 's64', and
      'ca->mi.bucket_size' is of type 'u16'.
      
      Technically that bcachefs comparison is clearly sensible on a C type
      level, because the 'u16' will go through the normal C integer promotion,
      and become 'int', and then we're comparing two signed values and
      everything looks sane.
      
      However, it's not entirely clear that a 'min(s64,u16)' operation makes a
      lot of conceptual sense, and it's possible that we will remove rule (4).
      After all, the _reason_ we have these complicated type checks is exactly
      that the C type promotion rules are not very intuitive.
      
      But at least for now the rule is in place for backwards compatibility.
      
      Also note that rule (2) existed before, but is hugely relaxed by this
      commit.  It used to be true only for the simplest compile-time
      non-negative integer constants.  The new macro model will allow cases
      where the compiler can trivially see that an expression is non-negative
      even if it isn't necessarily a constant.
      
      For example, the amdgpu driver does
      
      	min_t(size_t, sizeof(fru_info->serial), pia[addr] & 0x3F));
      
      because our old 'min()' macro would see that 'pia[addr] & 0x3F' is of
      type 'int' and clearly not a C constant expression, so doing a 'min()'
      with a 'size_t' is a signedness violation.
      
      Our new 'min()' macro still sees that 'pia[addr] & 0x3F' is of type
      'int', but is smart enough to also see that it is clearly non-negative,
      and thus would allow that case without any complaints.
      
      Cc: Arnd Bergmann <arnd@kernel.org>
      Cc: David Laight <David.Laight@aculab.com>
      Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      22f54687