This is the 5.4.141 stable release

-----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAmEY9Z4ACgkQONu9yGCS
 aT6Zcw/9Hw/LCgboD9SnkaHWx1vWwXilz4uqTp6+qfCUZmtjWnvORA/wUzAqhcwu
 1pO3aveUVLS4FyGQbn4vdMs5Zv7ZkDHchJ+FnloLAPnIUI8xce1YxKkwT8ysvvOF
 jFf2vPOr7PqCxTlGZ3MitJPhl4mkVghlwq6rk/EwFuqG8JRUiwL2jeHVX24VywJI
 E+XKOMJwXHdB+VWmmP5yvqDcPcQwYVAB01BBMWYEHFa4WTrRwICsQz6Y1319YAFT
 Sb0m2g/Pwv3YEzdgtCCTrB8FOr2Bjum/KoAZd+v9tQuFkZSwp14XhAlCWlYBSHUE
 AWoVc9w6KYNt4cCdem7P8oZWqAnkR9pLTwlg1XWZCQCTzqIp8YfsjTMONyKf/94O
 fHVTHTh7x0f2taGhAmzo52dIRBUBA8bGQ8F/t1XUc51RWn9CEBc230ich8BQtH1t
 hm3X9eB1CM9FRg4imIf9RW5X8+gkTSYNfrnpBh7IEKXIPiiKpDLyO3MN4IuFLBzN
 fRPhQacTxCq8QgO6eiS8M5cafglLL3U7GsE/qyiVQjVeoGNnLZINamdfmDLsgfGH
 f67pTwVNKNcoT1XJf1MqgDM2IoAcZcQqLtNhedva9cC74SiHv+nf28eDWwJJ5u10
 fdNJowrZdF828BCuee6UYUsOXJ6r8I6UybLuzpZzpvBvvMiYZH0=
 =edfG
 -----END PGP SIGNATURE-----

Merge 5.4.141 into android11-5.4-lts

Changes in 5.4.141
	KVM: SVM: Fix off-by-one indexing when nullifying last used SEV VMCB
	tee: Correct inappropriate usage of TEE_SHM_DMA_BUF flag
	media: v4l2-mem2mem: always consider OUTPUT queue during poll
	tracing: Reject string operand in the histogram expression
	usb: dwc3: Stop active transfers before halting the controller
	usb: dwc3: gadget: Allow runtime suspend if UDC unbinded
	usb: dwc3: gadget: Restart DWC3 gadget when enabling pullup
	usb: dwc3: gadget: Prevent EP queuing while stopping transfers
	usb: dwc3: gadget: Clear DEP flags after stop transfers in ep disable
	usb: dwc3: gadget: Disable gadget IRQ during pullup disable
	usb: dwc3: gadget: Avoid runtime resume if disabling pullup
	KVM: X86: MMU: Use the correct inherited permissions to get shadow page
	USB:ehci:fix Kunpeng920 ehci hardware problem
	ALSA: hda: Add quirk for ASUS Flow x13
	ppp: Fix generating ppp unit id when ifname is not specified
	ovl: prevent private clone if bind mount is not allowed
	btrfs: make qgroup_free_reserved_data take btrfs_inode
	btrfs: make btrfs_qgroup_reserve_data take btrfs_inode
	btrfs: qgroup: allow to unreserve range without releasing other ranges
	btrfs: qgroup: try to flush qgroup space when we get -EDQUOT
	btrfs: transaction: Cleanup unused TRANS_STATE_BLOCKED
	btrfs: qgroup: remove ASYNC_COMMIT mechanism in favor of reserve retry-after-EDQUOT
	btrfs: fix lockdep splat when enabling and disabling qgroups
	net: xilinx_emaclite: Do not print real IOMEM pointer
	btrfs: qgroup: don't commit transaction when we already hold the handle
	btrfs: export and rename qgroup_reserve_meta
	btrfs: don't flush from btrfs_delayed_inode_reserve_metadata
	Linux 5.4.141

Signed-off-by: Greg Kroah-Hartman <[email protected]>
Change-Id: I859f5efd0857ba315a6f4d1a8928b407d2c8ca28
This commit is contained in:
Greg Kroah-Hartman 2021-08-15 14:07:53 +02:00
commit 7116e6b9d8
29 changed files with 467 additions and 189 deletions

View file

@ -1883,6 +1883,20 @@ void drop_collected_mounts(struct vfsmount *mnt)
namespace_unlock();
}
static bool has_locked_children(struct mount *mnt, struct dentry *dentry)
{
struct mount *child;
list_for_each_entry(child, &mnt->mnt_mounts, mnt_child) {
if (!is_subdir(child->mnt_mountpoint, dentry))
continue;
if (child->mnt.mnt_flags & MNT_LOCKED)
return true;
}
return false;
}
/**
* clone_private_mount - create a private clone of a path
*
@ -1897,14 +1911,27 @@ struct vfsmount *clone_private_mount(const struct path *path)
struct mount *old_mnt = real_mount(path->mnt);
struct mount *new_mnt;
down_read(&namespace_sem);
if (IS_MNT_UNBINDABLE(old_mnt))
return ERR_PTR(-EINVAL);
goto invalid;
if (!check_mnt(old_mnt))
goto invalid;
if (has_locked_children(old_mnt, path->dentry))
goto invalid;
new_mnt = clone_mnt(old_mnt, path->dentry, CL_PRIVATE);
up_read(&namespace_sem);
if (IS_ERR(new_mnt))
return ERR_CAST(new_mnt);
return &new_mnt->mnt;
invalid:
up_read(&namespace_sem);
return ERR_PTR(-EINVAL);
}
EXPORT_SYMBOL_GPL(clone_private_mount);
@ -2256,19 +2283,6 @@ static int do_change_type(struct path *path, int ms_flags)
return err;
}
static bool has_locked_children(struct mount *mnt, struct dentry *dentry)
{
struct mount *child;
list_for_each_entry(child, &mnt->mnt_mounts, mnt_child) {
if (!is_subdir(child->mnt_mountpoint, dentry))
continue;
if (child->mnt.mnt_flags & MNT_LOCKED)
return true;
}
return false;
}
static struct mount *__do_loopback(struct path *old_path, int recurse)
{
struct mount *mnt = ERR_PTR(-EINVAL), *old = real_mount(old_path->mnt);