All of lore.kernel.org
 help / color / mirror / Atom feed
From: gregkh@linuxfoundation.org
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	stable@vger.kernel.org, David Howells <dhowells@redhat.com>,
	Al Viro <viro@zeniv.linux.org.uk>,
	linux-fsdevel@vger.kernel.org, Christoph Hellwig <hch@lst.de>,
	Christian Brauner <christian.brauner@ubuntu.com>
Subject: [PATCH 5.4 023/168] mount: fix mounting of detached mounts onto targets that reside on shared mounts
Date: Mon, 15 Mar 2021 14:54:15 +0100	[thread overview]
Message-ID: <20210315135551.116785615@linuxfoundation.org> (raw)
In-Reply-To: <20210315135550.333963635@linuxfoundation.org>

From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

From: Christian Brauner <christian.brauner@ubuntu.com>

commit ee2e3f50629f17b0752b55b2566c15ce8dafb557 upstream.

Creating a series of detached mounts, attaching them to the filesystem,
and unmounting them can be used to trigger an integer overflow in
ns->mounts causing the kernel to block any new mounts in count_mounts()
and returning ENOSPC because it falsely assumes that the maximum number
of mounts in the mount namespace has been reached, i.e. it thinks it
can't fit the new mounts into the mount namespace anymore.

Depending on the number of mounts in your system, this can be reproduced
on any kernel that supportes open_tree() and move_mount() by compiling
and running the following program:

  /* SPDX-License-Identifier: LGPL-2.1+ */

  #define _GNU_SOURCE
  #include <errno.h>
  #include <fcntl.h>
  #include <getopt.h>
  #include <limits.h>
  #include <stdbool.h>
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
  #include <sys/mount.h>
  #include <sys/stat.h>
  #include <sys/syscall.h>
  #include <sys/types.h>
  #include <unistd.h>

  /* open_tree() */
  #ifndef OPEN_TREE_CLONE
  #define OPEN_TREE_CLONE 1
  #endif

  #ifndef OPEN_TREE_CLOEXEC
  #define OPEN_TREE_CLOEXEC O_CLOEXEC
  #endif

  #ifndef __NR_open_tree
          #if defined __alpha__
                  #define __NR_open_tree 538
          #elif defined _MIPS_SIM
                  #if _MIPS_SIM == _MIPS_SIM_ABI32        /* o32 */
                          #define __NR_open_tree 4428
                  #endif
                  #if _MIPS_SIM == _MIPS_SIM_NABI32       /* n32 */
                          #define __NR_open_tree 6428
                  #endif
                  #if _MIPS_SIM == _MIPS_SIM_ABI64        /* n64 */
                          #define __NR_open_tree 5428
                  #endif
          #elif defined __ia64__
                  #define __NR_open_tree (428 + 1024)
          #else
                  #define __NR_open_tree 428
          #endif
  #endif

  /* move_mount() */
  #ifndef MOVE_MOUNT_F_EMPTY_PATH
  #define MOVE_MOUNT_F_EMPTY_PATH 0x00000004 /* Empty from path permitted */
  #endif

  #ifndef __NR_move_mount
          #if defined __alpha__
                  #define __NR_move_mount 539
          #elif defined _MIPS_SIM
                  #if _MIPS_SIM == _MIPS_SIM_ABI32        /* o32 */
                          #define __NR_move_mount 4429
                  #endif
                  #if _MIPS_SIM == _MIPS_SIM_NABI32       /* n32 */
                          #define __NR_move_mount 6429
                  #endif
                  #if _MIPS_SIM == _MIPS_SIM_ABI64        /* n64 */
                          #define __NR_move_mount 5429
                  #endif
          #elif defined __ia64__
                  #define __NR_move_mount (428 + 1024)
          #else
                  #define __NR_move_mount 429
          #endif
  #endif

  static inline int sys_open_tree(int dfd, const char *filename, unsigned int flags)
  {
          return syscall(__NR_open_tree, dfd, filename, flags);
  }

  static inline int sys_move_mount(int from_dfd, const char *from_pathname, int to_dfd,
                                   const char *to_pathname, unsigned int flags)
  {
          return syscall(__NR_move_mount, from_dfd, from_pathname, to_dfd, to_pathname, flags);
  }

  static bool is_shared_mountpoint(const char *path)
  {
          bool shared = false;
          FILE *f = NULL;
          char *line = NULL;
          int i;
          size_t len = 0;

          f = fopen("/proc/self/mountinfo", "re");
          if (!f)
                  return 0;

          while (getline(&line, &len, f) > 0) {
                  char *slider1, *slider2;

                  for (slider1 = line, i = 0; slider1 && i < 4; i++)
                          slider1 = strchr(slider1 + 1, ' ');

                  if (!slider1)
                          continue;

                  slider2 = strchr(slider1 + 1, ' ');
                  if (!slider2)
                          continue;

                  *slider2 = '\0';
                  if (strcmp(slider1 + 1, path) == 0) {
                          /* This is the path. Is it shared? */
                          slider1 = strchr(slider2 + 1, ' ');
                          if (slider1 && strstr(slider1, "shared:")) {
                                  shared = true;
                                  break;
                          }
                  }
          }
          fclose(f);
          free(line);

          return shared;
  }

  static void usage(void)
  {
          const char *text = "mount-new [--recursive] <base-dir>\n";
          fprintf(stderr, "%s", text);
          _exit(EXIT_SUCCESS);
  }

  #define exit_usage(format, ...)                              \
          ({                                                   \
                  fprintf(stderr, format "\n", ##__VA_ARGS__); \
                  usage();                                     \
          })

  #define exit_log(format, ...)                                \
          ({                                                   \
                  fprintf(stderr, format "\n", ##__VA_ARGS__); \
                  exit(EXIT_FAILURE);                          \
          })

  static const struct option longopts[] = {
          {"help",        no_argument,            0,      'a'},
          { NULL,         no_argument,            0,       0 },
  };

  int main(int argc, char *argv[])
  {
          int exit_code = EXIT_SUCCESS, index = 0;
          int dfd, fd_tree, new_argc, ret;
          char *base_dir;
          char *const *new_argv;
          char target[PATH_MAX];

          while ((ret = getopt_long_only(argc, argv, "", longopts, &index)) != -1) {
                  switch (ret) {
                  case 'a':
                          /* fallthrough */
                  default:
                          usage();
                  }
          }

          new_argv = &argv[optind];
          new_argc = argc - optind;
          if (new_argc < 1)
                  exit_usage("Missing base directory\n");
          base_dir = new_argv[0];

          if (*base_dir != '/')
                  exit_log("Please specify an absolute path");

          /* Ensure that target is a shared mountpoint. */
          if (!is_shared_mountpoint(base_dir))
                  exit_log("Please ensure that \"%s\" is a shared mountpoint", base_dir);

          dfd = open(base_dir, O_RDONLY | O_DIRECTORY | O_CLOEXEC);
          if (dfd < 0)
                  exit_log("%m - Failed to open base directory \"%s\"", base_dir);

          ret = mkdirat(dfd, "detached-move-mount", 0755);
          if (ret < 0)
                  exit_log("%m - Failed to create required temporary directories");

          ret = snprintf(target, sizeof(target), "%s/detached-move-mount", base_dir);
          if (ret < 0 || (size_t)ret >= sizeof(target))
                  exit_log("%m - Failed to assemble target path");

          /*
           * Having a mount table with 10000 mounts is already quite excessive
           * and shoult account even for weird test systems.
           */
          for (size_t i = 0; i < 10000; i++) {
                  fd_tree = sys_open_tree(dfd, "detached-move-mount",
                                          OPEN_TREE_CLONE |
                                          OPEN_TREE_CLOEXEC |
                                          AT_EMPTY_PATH);
                  if (fd_tree < 0) {
                          fprintf(stderr, "%m - Failed to open %d(detached-move-mount)", dfd);
                          exit_code = EXIT_FAILURE;
                          break;
                  }

                  ret = sys_move_mount(fd_tree, "", dfd, "detached-move-mount", MOVE_MOUNT_F_EMPTY_PATH);
                  if (ret < 0) {
                          if (errno == ENOSPC)
                                  fprintf(stderr, "%m - Buggy mount counting");
                          else
                                  fprintf(stderr, "%m - Failed to attach mount to %d(detached-move-mount)", dfd);
                          exit_code = EXIT_FAILURE;
                          break;
                  }
                  close(fd_tree);

                  ret = umount2(target, MNT_DETACH);
                  if (ret < 0) {
                          fprintf(stderr, "%m - Failed to unmount %s", target);
                          exit_code = EXIT_FAILURE;
                          break;
                  }
          }

          (void)unlinkat(dfd, "detached-move-mount", AT_REMOVEDIR);
          close(dfd);

          exit(exit_code);
  }

and wait for the kernel to refuse any new mounts by returning ENOSPC.
How many iterations are needed depends on the number of mounts in your
system. Assuming you have something like 50 mounts on a standard system
it should be almost instantaneous.

The root cause of this is that detached mounts aren't handled correctly
when source and target mount are identical and reside on a shared mount
causing a broken mount tree where the detached source itself is
propagated which propagation prevents for regular bind-mounts and new
mounts. This ultimately leads to a miscalculation of the number of
mounts in the mount namespace.

Detached mounts created via
open_tree(fd, path, OPEN_TREE_CLONE)
are essentially like an unattached new mount, or an unattached
bind-mount. They can then later on be attached to the filesystem via
move_mount() which calls into attach_recursive_mount(). Part of
attaching it to the filesystem is making sure that mounts get correctly
propagated in case the destination mountpoint is MS_SHARED, i.e. is a
shared mountpoint. This is done by calling into propagate_mnt() which
walks the list of peers calling propagate_one() on each mount in this
list making sure it receives the propagation event.
The propagate_one() functions thereby skips both new mounts and bind
mounts to not propagate them "into themselves". Both are identified by
checking whether the mount is already attached to any mount namespace in
mnt->mnt_ns. The is what the IS_MNT_NEW() helper is responsible for.

However, detached mounts have an anonymous mount namespace attached to
them stashed in mnt->mnt_ns which means that IS_MNT_NEW() doesn't
realize they need to be skipped causing the mount to propagate "into
itself" breaking the mount table and causing a disconnect between the
number of mounts recorded as being beneath or reachable from the target
mountpoint and the number of mounts actually recorded/counted in
ns->mounts ultimately causing an overflow which in turn prevents any new
mounts via the ENOSPC issue.

So teach propagation to handle detached mounts by making it aware of
them. I've been tracking this issue down for the last couple of days and
then verifying that the fix is correct by
unmounting everything in my current mount table leaving only /proc and
/sys mounted and running the reproducer above overnight verifying the
number of mounts counted in ns->mounts. With this fix the counts are
correct and the ENOSPC issue can't be reproduced.

This change will only have an effect on mounts created with the new
mount API since detached mounts cannot be created with the old mount API
so regressions are extremely unlikely.

Link: https://lore.kernel.org/r/20210306101010.243666-1-christian.brauner@ubuntu.com
Fixes: 2db154b3ea8e ("vfs: syscall: Add move_mount(2) to move mounts around")
Cc: David Howells <dhowells@redhat.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: linux-fsdevel@vger.kernel.org
Cc: <stable@vger.kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 fs/pnode.h |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/fs/pnode.h
+++ b/fs/pnode.h
@@ -12,7 +12,7 @@
 
 #define IS_MNT_SHARED(m) ((m)->mnt.mnt_flags & MNT_SHARED)
 #define IS_MNT_SLAVE(m) ((m)->mnt_master)
-#define IS_MNT_NEW(m)  (!(m)->mnt_ns)
+#define IS_MNT_NEW(m)  (!(m)->mnt_ns || is_anon_ns((m)->mnt_ns))
 #define CLEAR_MNT_SHARED(m) ((m)->mnt.mnt_flags &= ~MNT_SHARED)
 #define IS_MNT_UNBINDABLE(m) ((m)->mnt.mnt_flags & MNT_UNBINDABLE)
 #define IS_MNT_MARKED(m) ((m)->mnt.mnt_flags & MNT_MARKED)



  parent reply	other threads:[~2021-03-15 14:05 UTC|newest]

Thread overview: 177+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-15 13:53 [PATCH 5.4 000/168] 5.4.106-rc1 review gregkh
2021-03-15 13:53 ` [PATCH 5.4 001/168] uapi: nfnetlink_cthelper.h: fix userspace compilation error gregkh
2021-03-15 13:53 ` [PATCH 5.4 002/168] powerpc/pseries: Dont enforce MSI affinity with kdump gregkh
2021-03-15 13:53 ` [PATCH 5.4 003/168] ethernet: alx: fix order of calls on resume gregkh
2021-03-15 13:53 ` [PATCH 5.4 004/168] ath9k: fix transmitting to stations in dynamic SMPS mode gregkh
2021-03-15 13:53 ` [PATCH 5.4 005/168] net: Fix gro aggregation for udp encaps with zero csum gregkh
2021-03-15 13:53 ` [PATCH 5.4 006/168] net: check if protocol extracted by virtio_net_hdr_set_proto is correct gregkh
2021-03-15 13:53 ` [PATCH 5.4 007/168] net: avoid infinite loop in mpls_gso_segment when mpls_hlen == 0 gregkh
2021-03-15 13:54 ` [PATCH 5.4 008/168] sh_eth: fix TRSCER mask for SH771x gregkh
2021-03-15 13:54 ` [PATCH 5.4 009/168] can: skb: can_skb_set_owner(): fix ref counting if socket was closed before setting skb ownership gregkh
2021-03-15 13:54 ` [PATCH 5.4 010/168] can: flexcan: assert FRZ bit in flexcan_chip_freeze() gregkh
2021-03-15 13:54 ` [PATCH 5.4 011/168] can: flexcan: enable RX FIFO after FRZ/HALT valid gregkh
2021-03-15 13:54 ` [PATCH 5.4 012/168] can: flexcan: invoke flexcan_chip_freeze() to enter freeze mode gregkh
2021-03-15 13:54 ` [PATCH 5.4 013/168] can: tcan4x5x: tcan4x5x_init(): fix initialization - clear MRAM before entering Normal Mode gregkh
2021-03-15 13:54 ` [PATCH 5.4 014/168] tcp: add sanity tests to TCP_QUEUE_SEQ gregkh
2021-03-15 13:54 ` [PATCH 5.4 015/168] netfilter: nf_nat: undo erroneous tcp edemux lookup gregkh
2021-03-15 13:54 ` [PATCH 5.4 016/168] netfilter: x_tables: gpf inside xt_find_revision() gregkh
2021-03-15 13:54 ` [PATCH 5.4 017/168] selftests/bpf: No need to drop the packet when there is no geneve opt gregkh
2021-03-15 13:54 ` [PATCH 5.4 018/168] selftests/bpf: Mask bpf_csum_diff() return value to 16 bits in test_verifier gregkh
2021-03-15 13:54 ` [PATCH 5.4 019/168] samples, bpf: Add missing munmap in xdpsock gregkh
2021-03-15 13:54 ` [PATCH 5.4 020/168] ibmvnic: always store valid MAC address gregkh
2021-03-15 13:54 ` [PATCH 5.4 021/168] mt76: dma: do not report truncated frames to mac80211 gregkh
2021-03-15 13:54 ` [PATCH 5.4 022/168] powerpc/603: Fix protection of user pages mapped with PROT_NONE gregkh
2021-03-15 13:54 ` gregkh [this message]
2021-03-15 13:54 ` [PATCH 5.4 024/168] cifs: return proper error code in statfs(2) gregkh
2021-03-15 13:54 ` [PATCH 5.4 025/168] Revert "mm, slub: consider rest of partial list if acquire_slab() fails" gregkh
2021-03-15 13:54 ` [PATCH 5.4 026/168] net: enetc: dont overwrite the RSS indirection table when initializing gregkh
2021-03-15 13:54 ` [PATCH 5.4 027/168] net/mlx4_en: update moderation when config reset gregkh
2021-03-15 13:54 ` [PATCH 5.4 028/168] net: stmmac: fix incorrect DMA channel intr enable setting of EQoS v4.10 gregkh
2021-03-15 13:54 ` [PATCH 5.4 029/168] nexthop: Do not flush blackhole nexthops when loopback goes down gregkh
2021-03-15 13:54 ` [PATCH 5.4 030/168] net: sched: avoid duplicates in classes dump gregkh
2021-03-15 13:54 ` [PATCH 5.4 031/168] net: usb: qmi_wwan: allow qmimux add/del with master up gregkh
2021-03-15 13:54 ` [PATCH 5.4 032/168] netdevsim: init u64 stats for 32bit hardware gregkh
2021-03-15 13:54 ` [PATCH 5.4 033/168] cipso,calipso: resolve a number of problems with the DOI refcounts gregkh
2021-03-15 13:54 ` [PATCH 5.4 034/168] net: lapbether: Remove netif_start_queue / netif_stop_queue gregkh
2021-03-15 13:54 ` [PATCH 5.4 035/168] net: davicom: Fix regulator not turned off on failed probe gregkh
2021-03-15 13:54 ` [PATCH 5.4 036/168] net: davicom: Fix regulator not turned off on driver removal gregkh
2021-03-15 13:54 ` [PATCH 5.4 037/168] net: qrtr: fix error return code of qrtr_sendmsg() gregkh
2021-03-15 13:54 ` [PATCH 5.4 038/168] ixgbe: fail to create xfrm offload of IPsec tunnel mode SA gregkh
2021-03-15 13:54 ` [PATCH 5.4 039/168] net: stmmac: stop each tx channel independently gregkh
2021-03-15 13:54 ` [PATCH 5.4 040/168] net: stmmac: fix watchdog timeout during suspend/resume stress test gregkh
2021-03-15 13:54 ` [PATCH 5.4 041/168] selftests: forwarding: Fix race condition in mirror installation gregkh
2021-03-15 13:54 ` [PATCH 5.4 042/168] perf traceevent: Ensure read cmdlines are null terminated gregkh
2021-03-15 13:54 ` [PATCH 5.4 043/168] net: hns3: fix query vlan mask value error for flow director gregkh
2021-03-15 13:54 ` [PATCH 5.4 044/168] net: hns3: fix bug when calculating the TCAM table info gregkh
2021-03-15 13:54 ` [PATCH 5.4 045/168] s390/cio: return -EFAULT if copy_to_user() fails again gregkh
2021-03-15 13:54 ` [PATCH 5.4 046/168] bnxt_en: reliably allocate IRQ table on reset to avoid crash gregkh
2021-03-15 13:54 ` [PATCH 5.4 047/168] drm/compat: Clear bounce structures gregkh
2021-03-15 13:54 ` [PATCH 5.4 048/168] drm/shmem-helper: Check for purged buffers in fault handler gregkh
2021-03-15 13:54 ` [PATCH 5.4 049/168] drm/shmem-helper: Dont remove the offset in vm_area_struct pgoff gregkh
2021-03-15 13:54 ` [PATCH 5.4 050/168] drm: meson_drv add shutdown function gregkh
2021-03-15 13:54 ` [PATCH 5.4 051/168] s390/cio: return -EFAULT if copy_to_user() fails gregkh
2021-03-15 13:54 ` [PATCH 5.4 052/168] s390/crypto: " gregkh
2021-03-15 13:54 ` [PATCH 5.4 053/168] qxl: Fix uninitialised struct field head.surface_id gregkh
2021-03-15 13:54 ` [PATCH 5.4 054/168] sh_eth: fix TRSCER mask for R7S9210 gregkh
2021-03-15 13:54 ` [PATCH 5.4 055/168] media: usbtv: Fix deadlock on suspend gregkh
2021-03-15 13:54 ` [PATCH 5.4 056/168] media: v4l: vsp1: Fix uif null pointer access gregkh
2021-03-15 13:54 ` [PATCH 5.4 057/168] media: v4l: vsp1: Fix bru " gregkh
2021-03-15 13:54 ` [PATCH 5.4 058/168] media: rc: compile rc-cec.c into rc-core gregkh
2021-03-15 13:54 ` [PATCH 5.4 059/168] net: hns3: fix error mask definition of flow director gregkh
2021-03-15 13:54 ` [PATCH 5.4 060/168] net: enetc: initialize RFS/RSS memories for unused ports too gregkh
2021-03-15 13:54 ` [PATCH 5.4 061/168] net: phy: fix save wrong speed and duplex problem if autoneg is on gregkh
2021-03-15 13:54 ` [PATCH 5.4 062/168] i2c: rcar: faster irq code to minimize HW race condition gregkh
2021-03-15 13:54 ` [PATCH 5.4 063/168] i2c: rcar: optimize cacheline " gregkh
2021-03-15 13:54 ` [PATCH 5.4 064/168] udf: fix silent AED tagLocation corruption gregkh
2021-03-15 13:54 ` [PATCH 5.4 065/168] mmc: mxs-mmc: Fix a resource leak in an error handling path in mxs_mmc_probe() gregkh
2021-03-15 13:54 ` [PATCH 5.4 066/168] mmc: mediatek: fix race condition between msdc_request_timeout and irq gregkh
2021-03-15 13:54 ` [PATCH 5.4 067/168] Platform: OLPC: Fix probe error handling gregkh
2021-03-15 13:55 ` [PATCH 5.4 068/168] powerpc/pci: Add ppc_md.discover_phbs() gregkh
2021-03-15 13:55 ` [PATCH 5.4 069/168] spi: stm32: make spurious and overrun interrupts visible gregkh
2021-03-15 13:55 ` [PATCH 5.4 070/168] powerpc: improve handling of unrecoverable system reset gregkh
2021-03-15 13:55 ` [PATCH 5.4 071/168] powerpc/perf: Record counter overflow always if SAMPLE_IP is unset gregkh
2021-03-15 13:55 ` [PATCH 5.4 072/168] HID: logitech-dj: add support for the new lightspeed connection iteration gregkh
2021-03-15 13:55 ` [PATCH 5.4 073/168] powerpc/64: Fix stack trace not displaying final frame gregkh
2021-03-15 13:55 ` [PATCH 5.4 074/168] iommu/amd: Fix performance counter initialization gregkh
2021-03-15 13:55 ` [PATCH 5.4 075/168] sparc32: Limit memblock allocation to low memory gregkh
2021-03-15 13:55 ` [PATCH 5.4 076/168] sparc64: Use arch_validate_flags() to validate ADI flag gregkh
2021-03-15 13:55 ` [PATCH 5.4 077/168] Input: applespi - dont wait for responses to commands indefinitely gregkh
2021-03-15 13:55 ` [PATCH 5.4 078/168] PCI: xgene-msi: Fix race in installing chained irq handler gregkh
2021-03-15 13:55 ` [PATCH 5.4 079/168] PCI: mediatek: Add missing of_node_put() to fix reference leak gregkh
2021-03-15 13:55 ` [PATCH 5.4 080/168] kbuild: clamp SUBLEVEL to 255 gregkh
2021-03-15 13:55 ` [PATCH 5.4 081/168] PCI: Fix pci_register_io_range() memory leak gregkh
2021-03-15 13:55 ` [PATCH 5.4 082/168] i40e: Fix memory leak in i40e_probe gregkh
2021-03-15 13:55 ` [PATCH 5.4 083/168] s390/smp: __smp_rescan_cpus() - move cpumask away from stack gregkh
2021-03-15 13:55 ` [PATCH 5.4 084/168] sysctl.c: fix underflow value setting risk in vm_table gregkh
2021-03-15 13:55 ` [PATCH 5.4 085/168] scsi: libiscsi: Fix iscsi_prep_scsi_cmd_pdu() error handling gregkh
2021-03-15 13:55 ` [PATCH 5.4 086/168] scsi: target: core: Add cmd length set before cmd complete gregkh
2021-03-15 13:55 ` [PATCH 5.4 087/168] scsi: target: core: Prevent underflow for service actions gregkh
2021-03-15 13:55 ` [PATCH 5.4 088/168] ALSA: usb: Add Plantronics C320-M USB ctrl msg delay quirk gregkh
2021-03-15 13:55 ` [PATCH 5.4 089/168] ALSA: hda/hdmi: Cancel pending works before suspend gregkh
2021-03-15 13:55 ` [PATCH 5.4 090/168] ALSA: hda/ca0132: Add Sound BlasterX AE-5 Plus support gregkh
2021-03-15 13:55 ` [PATCH 5.4 091/168] ALSA: hda: Drop the BATCH workaround for AMD controllers gregkh
2021-03-15 13:55 ` [PATCH 5.4 092/168] ALSA: hda: Flush pending unsolicited events before suspend gregkh
2021-03-15 13:55 ` [PATCH 5.4 093/168] ALSA: hda: Avoid spurious unsol event handling during S3/S4 gregkh
2021-03-15 13:55 ` [PATCH 5.4 094/168] ALSA: usb-audio: Fix "cannot get freq eq" errors on Dell AE515 sound bar gregkh
2021-03-15 13:55 ` [PATCH 5.4 095/168] ALSA: usb-audio: Apply the control quirk to Plantronics headsets gregkh
2021-03-15 13:55 ` [PATCH 5.4 096/168] Revert 95ebabde382c ("capabilities: Dont allow writing ambiguous v3 file capabilities") gregkh
2021-03-15 13:55 ` [PATCH 5.4 097/168] arm64: kasan: fix page_alloc tagging with DEBUG_VIRTUAL gregkh
2021-03-15 13:55 ` [PATCH 5.4 098/168] s390/dasd: fix hanging DASD driver unbind gregkh
2021-03-15 13:55 ` [PATCH 5.4 099/168] s390/dasd: fix hanging IO request during " gregkh
2021-03-15 13:55 ` [PATCH 5.4 100/168] software node: Fix node registration gregkh
2021-03-15 13:55 ` [PATCH 5.4 101/168] mmc: core: Fix partition switch time for eMMC gregkh
2021-03-15 13:55 ` [PATCH 5.4 102/168] mmc: cqhci: Fix random crash when remove mmc module/card gregkh
2021-03-15 13:55 ` [PATCH 5.4 103/168] Goodix Fingerprint device is not a modem gregkh
2021-03-15 13:55 ` [PATCH 5.4 104/168] USB: gadget: u_ether: Fix a configfs return code gregkh
2021-03-15 13:55 ` [PATCH 5.4 105/168] usb: gadget: f_uac2: always increase endpoint max_packet_size by one audio slot gregkh
2021-03-15 13:55 ` [PATCH 5.4 106/168] usb: gadget: f_uac1: stop playback on function disable gregkh
2021-03-15 13:55 ` [PATCH 5.4 107/168] usb: dwc3: qcom: Add missing DWC3 OF node refcount decrement gregkh
2021-03-15 13:55 ` [PATCH 5.4 108/168] usb: dwc3: qcom: Honor wakeup enabled/disabled state gregkh
2021-03-15 13:55 ` [PATCH 5.4 109/168] USB: usblp: fix a hang in poll() if disconnected gregkh
2021-03-15 13:55 ` [PATCH 5.4 110/168] usb: renesas_usbhs: Clear PIPECFG for re-enabling pipe with other EPNUM gregkh
2021-03-15 13:55 ` [PATCH 5.4 111/168] usb: xhci: do not perform Soft Retry for some xHCI hosts gregkh
2021-03-15 13:55 ` [PATCH 5.4 112/168] xhci: Improve detection of device initiated wake signal gregkh
2021-03-15 13:55 ` [PATCH 5.4 113/168] usb: xhci: Fix ASMedia ASM1042A and ASM3242 DMA addressing gregkh
2021-03-15 13:55 ` [PATCH 5.4 114/168] xhci: Fix repeated xhci wake after suspend due to uncleared internal wake state gregkh
2021-03-15 13:55 ` [PATCH 5.4 115/168] USB: serial: io_edgeport: fix memory leak in edge_startup gregkh
2021-03-15 13:55 ` [PATCH 5.4 116/168] USB: serial: ch341: add new Product ID gregkh
2021-03-15 13:55 ` [PATCH 5.4 117/168] USB: serial: cp210x: add ID for Acuity Brands nLight Air Adapter gregkh
2021-03-15 13:55 ` [PATCH 5.4 118/168] USB: serial: cp210x: add some more GE USB IDs gregkh
2021-03-15 13:55 ` [PATCH 5.4 119/168] usbip: fix stub_dev to check for stream socket gregkh
2021-03-15 13:55 ` [PATCH 5.4 120/168] usbip: fix vhci_hcd " gregkh
2021-03-15 13:55 ` [PATCH 5.4 121/168] usbip: fix vudc " gregkh
2021-03-15 13:55 ` [PATCH 5.4 122/168] usbip: fix stub_dev usbip_sockfd_store() races leading to gpf gregkh
2021-03-15 13:55 ` [PATCH 5.4 123/168] usbip: fix vhci_hcd attach_store() " gregkh
2021-03-15 13:55 ` [PATCH 5.4 124/168] usbip: fix vudc usbip_sockfd_store " gregkh
2021-03-15 13:55 ` [PATCH 5.4 125/168] misc/pvpanic: Export module FDT device table gregkh
2021-03-15 13:55 ` [PATCH 5.4 126/168] misc: fastrpc: restrict user apps from sending kernel RPC messages gregkh
2021-03-15 13:55 ` [PATCH 5.4 127/168] staging: rtl8192u: fix ->ssid overflow in r8192_wx_set_scan() gregkh
2021-03-15 13:56 ` [PATCH 5.4 128/168] staging: rtl8188eu: prevent ->ssid overflow in rtw_wx_set_scan() gregkh
2021-03-15 13:56 ` [PATCH 5.4 129/168] staging: rtl8712: unterminated string leads to read overflow gregkh
2021-03-15 13:56 ` [PATCH 5.4 130/168] staging: rtl8188eu: fix potential memory corruption in rtw_check_beacon_data() gregkh
2021-03-15 13:56 ` [PATCH 5.4 131/168] staging: ks7010: prevent buffer overflow in ks_wlan_set_scan() gregkh
2021-03-15 13:56 ` [PATCH 5.4 132/168] staging: rtl8712: Fix possible buffer overflow in r8712_sitesurvey_cmd gregkh
2021-03-15 13:56 ` [PATCH 5.4 133/168] staging: rtl8192e: Fix possible buffer overflow in _rtl92e_wx_set_scan gregkh
2021-03-15 13:56 ` [PATCH 5.4 134/168] staging: comedi: addi_apci_1032: Fix endian problem for COS sample gregkh
2021-03-15 13:56 ` [PATCH 5.4 135/168] staging: comedi: addi_apci_1500: Fix endian problem for command sample gregkh
2021-03-15 13:56 ` [PATCH 5.4 136/168] staging: comedi: adv_pci1710: Fix endian problem for AI command data gregkh
2021-03-15 13:56 ` [PATCH 5.4 137/168] staging: comedi: das6402: " gregkh
2021-03-15 13:56 ` [PATCH 5.4 138/168] staging: comedi: das800: " gregkh
2021-03-15 13:56 ` [PATCH 5.4 139/168] staging: comedi: dmm32at: " gregkh
2021-03-15 13:56 ` [PATCH 5.4 140/168] staging: comedi: me4000: " gregkh
2021-03-15 13:56 ` [PATCH 5.4 141/168] staging: comedi: pcl711: " gregkh
2021-03-15 13:56 ` [PATCH 5.4 142/168] staging: comedi: pcl818: " gregkh
2021-03-15 13:56 ` [PATCH 5.4 143/168] sh_eth: fix TRSCER mask for R7S72100 gregkh
2021-03-15 13:56 ` [PATCH 5.4 144/168] arm64/mm: Fix pfn_valid() for ZONE_DEVICE based memory gregkh
2021-03-15 13:56   ` gregkh
2021-03-15 13:56 ` [PATCH 5.4 145/168] SUNRPC: Set memalloc_nofs_save() for sync tasks gregkh
2021-03-15 13:56 ` [PATCH 5.4 146/168] NFS: Dont revalidate the directory permissions on a lookup failure gregkh
2021-03-15 13:56 ` [PATCH 5.4 147/168] NFS: Dont gratuitously clear the inode cache when lookup failed gregkh
2021-03-15 13:56 ` [PATCH 5.4 148/168] NFSv4.2: fix return value of _nfs4_get_security_label() gregkh
2021-03-15 13:56 ` [PATCH 5.4 149/168] block: rsxx: fix error return code of rsxx_pci_probe() gregkh
2021-03-15 13:56 ` [PATCH 5.4 150/168] configfs: fix a use-after-free in __configfs_open_file gregkh
2021-03-15 13:56 ` [PATCH 5.4 151/168] arm64: mm: use a 48-bit ID map when possible on 52-bit VA builds gregkh
2021-03-15 13:56 ` [PATCH 5.4 152/168] hrtimer: Update softirq_expires_next correctly after __hrtimer_get_next_event() gregkh
2021-03-15 13:56 ` [PATCH 5.4 153/168] stop_machine: mark helpers __always_inline gregkh
2021-03-15 13:56 ` [PATCH 5.4 154/168] include/linux/sched/mm.h: use rcu_dereference in in_vfork() gregkh
2021-03-15 13:56 ` [PATCH 5.4 155/168] prctl: fix PR_SET_MM_AUXV kernel stack leak gregkh
2021-03-15 13:56 ` [PATCH 5.4 156/168] zram: fix return value on writeback_store gregkh
2021-03-15 13:56 ` [PATCH 5.4 157/168] sched/membarrier: fix missing local execution of ipi_sync_rq_state() gregkh
2021-03-15 13:56 ` [PATCH 5.4 158/168] powerpc/64s: Fix instruction encoding for lis in ppc_function_entry() gregkh
2021-03-15 13:56 ` [PATCH 5.4 159/168] binfmt_misc: fix possible deadlock in bm_register_write gregkh
2021-03-15 13:56 ` [PATCH 5.4 160/168] x86/unwind/orc: Disable KASAN checking in the ORC unwinder, part 2 gregkh
2021-03-15 13:56 ` [PATCH 5.4 161/168] KVM: arm64: Fix exclusive limit for IPA size gregkh
2021-03-15 13:56 ` [PATCH 5.4 162/168] nvme: unlink head after removing last namespace gregkh
2021-03-15 13:56 ` [PATCH 5.4 163/168] nvme: release namespace head reference on error gregkh
2021-03-15 13:56 ` [PATCH 5.4 164/168] KVM: arm64: Ensure I-cache isolation between vcpus of a same VM gregkh
2021-03-15 13:56 ` [PATCH 5.4 165/168] KVM: arm64: Reject VM creation when the default IPA size is unsupported gregkh
2021-03-15 13:56 ` [PATCH 5.4 166/168] xen/events: reset affinity of 2-level event when tearing it down gregkh
2021-03-15 13:56 ` [PATCH 5.4 167/168] xen/events: dont unmask an event channel when an eoi is pending gregkh
2021-03-15 13:56 ` [PATCH 5.4 168/168] xen/events: avoid handling the same event on two cpus at the same time gregkh
2021-03-15 17:07 ` [PATCH 5.4 000/168] 5.4.106-rc1 review Jon Hunter
2021-03-15 20:22 ` Florian Fainelli
2021-03-15 22:57 ` Jason Self
2021-03-16  5:27 ` Naresh Kamboju
2021-03-16 21:13 ` Guenter Roeck
2021-03-17  1:11 ` Samuel Zou
2021-03-17  3:00 ` Ross Schmidt

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210315135551.116785615@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=christian.brauner@ubuntu.com \
    --cc=dhowells@redhat.com \
    --cc=hch@lst.de \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=stable@vger.kernel.org \
    --cc=viro@zeniv.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.