de5730eaef
-----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAl2FslsACgkQONu9yGCS aT4kYBAAkOZ1wVwFD4mFkUmKvLmsGlwwkY/5/kQneBDUj4VQG9/1PFSN7Cfb9DdJ zdIcsdsfx/J+41FKJe9rxgJL6ttB1L8ob6GYdCI/8uA23TUGCQB5RSF/cwGeZUSz RRvqm1gstRimh4c+kibgkr3yxwBIUTzBMlBz1OMTsbP9YVzheGPahml2/mJAyb6C z6ETlLmrw0VixyyyvAF6r210K9qftjK4nMMDeFvftgU/eJUr59jBhSkEirS3jo5G KKP0kD3wDiOzqhZ83qU0bEG9EIiayap6k9H3r1u4Qu0xjyc095Jta+3JFpOqd66u CLfAKO0wf/jVx3/3EzWLtnxfXIpcfWi7Vj6rcTjASOsH8PrCLageHbyoA5JmKGsW gp4HUgwdgQPtMU7rFXCVEcoLqu0uU3PUGkOQlcx9AYLoaE2LsTijcLLJqb0tZztr IetrhXFVmeMnz2/ejqvORZw3mLNYMTD6OfNATMEgh1LkXqaCCWXdTVj2Bsp4IcD8 d63E8ftILxxanfNjRS0T5+kc+yCkQs8oNRqZGXQQ9zjVzXiu0kyKDIh93lC7V+yF EM4pO/+kEljtc6vP+2hdpCG7buwvhSklOs2TvWJpU7umwEfHfxeetvnQajDzk5n0 XLPDc+B/ZThND8+DrlhHvkx4dMU7xtR6IDvix9XpME65pWiB7nk= =ebAT -----END PGP SIGNATURE----- Merge 4.19.75 into android-4.19 Changes in 4.19.75 netfilter: nf_flow_table: set default timeout after successful insertion HID: wacom: generic: read HID_DG_CONTACTMAX from any feature report RDMA/restrack: Release task struct which was hold by CM_ID object Input: elan_i2c - remove Lenovo Legion Y7000 PnpID powerpc/mm/radix: Use the right page size for vmemmap mapping USB: usbcore: Fix slab-out-of-bounds bug during device reset media: tm6000: double free if usb disconnect while streaming phy: renesas: rcar-gen3-usb2: Disable clearing VBUS in over-current ip6_gre: fix a dst leak in ip6erspan_tunnel_xmit udp: correct reuseport selection with connected sockets xen-netfront: do not assume sk_buff_head list is empty in error handling net_sched: let qdisc_put() accept NULL pointer KVM: coalesced_mmio: add bounds checking firmware: google: check if size is valid when decoding VPD data serial: sprd: correct the wrong sequence of arguments tty/serial: atmel: reschedule TX after RX was started mwifiex: Fix three heap overflow at parsing element in cfg80211_ap_settings nl80211: Fix possible Spectre-v1 for CQM RSSI thresholds ieee802154: hwsim: Fix error handle path in hwsim_init_module ieee802154: hwsim: unregister hw while hwsim_subscribe_all_others fails ARM: dts: am57xx: Disable voltage switching for SD card ARM: OMAP2+: Fix missing SYSC_HAS_RESET_STATUS for dra7 epwmss bus: ti-sysc: Fix using configured sysc mask value s390/bpf: fix lcgr instruction encoding ARM: OMAP2+: Fix omap4 errata warning on other SoCs ARM: dts: dra74x: Fix iodelay configuration for mmc3 ARM: OMAP1: ams-delta-fiq: Fix missing irq_ack bus: ti-sysc: Simplify cleanup upon failures in sysc_probe() s390/bpf: use 32-bit index for tail calls selftests/bpf: fix "bind{4, 6} deny specific IP & port" on s390 tools: bpftool: close prog FD before exit on showing a single program fpga: altera-ps-spi: Fix getting of optional confd gpio netfilter: ebtables: Fix argument order to ADD_COUNTER netfilter: nft_flow_offload: missing netlink attribute policy netfilter: xt_nfacct: Fix alignment mismatch in xt_nfacct_match_info NFSv4: Fix return values for nfs4_file_open() NFSv4: Fix return value in nfs_finish_open() NFS: Fix initialisation of I/O result struct in nfs_pgio_rpcsetup Kconfig: Fix the reference to the IDT77105 Phy driver in the description of ATM_NICSTAR_USE_IDT77105 xdp: unpin xdp umem pages in error path qed: Add cleanup in qed_slowpath_start() ARM: 8874/1: mm: only adjust sections of valid mm structures batman-adv: Only read OGM2 tvlv_len after buffer len check bpf: allow narrow loads of some sk_reuseport_md fields with offset > 0 r8152: Set memory to all 0xFFs on failed reg reads x86/apic: Fix arch_dynirq_lower_bound() bug for DT enabled machines netfilter: xt_physdev: Fix spurious error message in physdev_mt_check netfilter: nf_conntrack_ftp: Fix debug output NFSv2: Fix eof handling NFSv2: Fix write regression kallsyms: Don't let kallsyms_lookup_size_offset() fail on retrieving the first symbol cifs: set domainName when a domain-key is used in multiuser cifs: Use kzfree() to zero out the password usb: host: xhci-tegra: Set DMA mask correctly ARM: 8901/1: add a criteria for pfn_valid of arm ibmvnic: Do not process reset during or after device removal sky2: Disable MSI on yet another ASUS boards (P6Xxxx) i2c: designware: Synchronize IRQs when unregistering slave client perf/x86/intel: Restrict period on Nehalem perf/x86/amd/ibs: Fix sample bias for dispatched micro-ops amd-xgbe: Fix error path in xgbe_mod_init() tools/power x86_energy_perf_policy: Fix "uninitialized variable" warnings at -O2 tools/power x86_energy_perf_policy: Fix argument parsing tools/power turbostat: fix buffer overrun net: aquantia: fix out of memory condition on rx side net: seeq: Fix the function used to release some memory in an error handling path dmaengine: ti: dma-crossbar: Fix a memory leak bug dmaengine: ti: omap-dma: Add cleanup in omap_dma_probe() x86/uaccess: Don't leak the AC flags into __get_user() argument evaluation x86/hyper-v: Fix overflow bug in fill_gva_list() keys: Fix missing null pointer check in request_key_auth_describe() iommu/amd: Flush old domains in kdump kernel iommu/amd: Fix race in increase_address_space() PCI: kirin: Fix section mismatch warning ovl: fix regression caused by overlapping layers detection floppy: fix usercopy direction binfmt_elf: move brk out of mmap when doing direct loader exec arm64: kpti: Whitelist Cortex-A CPUs that don't implement the CSV3 field media: technisat-usb2: break out of loop at end of buffer Linux 4.19.75 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com> Change-Id: I1dd841f112ee81497cd085b102979f45ee5e6b9d
123 lines
2.9 KiB
C
123 lines
2.9 KiB
C
/*
|
|
*
|
|
* Copyright (C) 2011 Novell Inc.
|
|
* Copyright (C) 2016 Red Hat, Inc.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License version 2 as published by
|
|
* the Free Software Foundation.
|
|
*/
|
|
|
|
struct ovl_config {
|
|
char *lowerdir;
|
|
char *upperdir;
|
|
char *workdir;
|
|
bool default_permissions;
|
|
bool redirect_dir;
|
|
bool redirect_follow;
|
|
const char *redirect_mode;
|
|
bool index;
|
|
bool nfs_export;
|
|
int xino;
|
|
bool metacopy;
|
|
bool override_creds;
|
|
};
|
|
|
|
struct ovl_sb {
|
|
struct super_block *sb;
|
|
dev_t pseudo_dev;
|
|
};
|
|
|
|
struct ovl_layer {
|
|
struct vfsmount *mnt;
|
|
/* Trap in ovl inode cache */
|
|
struct inode *trap;
|
|
struct ovl_sb *fs;
|
|
/* Index of this layer in fs root (upper idx == 0) */
|
|
int idx;
|
|
/* One fsid per unique underlying sb (upper fsid == 0) */
|
|
int fsid;
|
|
};
|
|
|
|
struct ovl_path {
|
|
struct ovl_layer *layer;
|
|
struct dentry *dentry;
|
|
};
|
|
|
|
/* private information held for overlayfs's superblock */
|
|
struct ovl_fs {
|
|
struct vfsmount *upper_mnt;
|
|
unsigned int numlower;
|
|
/* Number of unique lower sb that differ from upper sb */
|
|
unsigned int numlowerfs;
|
|
struct ovl_layer *lower_layers;
|
|
struct ovl_sb *lower_fs;
|
|
/* workbasedir is the path at workdir= mount option */
|
|
struct dentry *workbasedir;
|
|
/* workdir is the 'work' directory under workbasedir */
|
|
struct dentry *workdir;
|
|
/* index directory listing overlay inodes by origin file handle */
|
|
struct dentry *indexdir;
|
|
long namelen;
|
|
/* pathnames of lower and upper dirs, for show_options */
|
|
struct ovl_config config;
|
|
/* creds of process who forced instantiation of super block */
|
|
const struct cred *creator_cred;
|
|
bool tmpfile;
|
|
bool noxattr;
|
|
/* Did we take the inuse lock? */
|
|
bool upperdir_locked;
|
|
bool workdir_locked;
|
|
/* Traps in ovl inode cache */
|
|
struct inode *upperdir_trap;
|
|
struct inode *workbasedir_trap;
|
|
struct inode *workdir_trap;
|
|
struct inode *indexdir_trap;
|
|
/* Inode numbers in all layers do not use the high xino_bits */
|
|
unsigned int xino_bits;
|
|
};
|
|
|
|
/* private information held for every overlayfs dentry */
|
|
struct ovl_entry {
|
|
union {
|
|
struct {
|
|
unsigned long flags;
|
|
};
|
|
struct rcu_head rcu;
|
|
};
|
|
unsigned numlower;
|
|
struct ovl_path lowerstack[];
|
|
};
|
|
|
|
struct ovl_entry *ovl_alloc_entry(unsigned int numlower);
|
|
|
|
static inline struct ovl_entry *OVL_E(struct dentry *dentry)
|
|
{
|
|
return (struct ovl_entry *) dentry->d_fsdata;
|
|
}
|
|
|
|
struct ovl_inode {
|
|
union {
|
|
struct ovl_dir_cache *cache; /* directory */
|
|
struct inode *lowerdata; /* regular file */
|
|
};
|
|
const char *redirect;
|
|
u64 version;
|
|
unsigned long flags;
|
|
struct inode vfs_inode;
|
|
struct dentry *__upperdentry;
|
|
struct inode *lower;
|
|
|
|
/* synchronize copy up and more */
|
|
struct mutex lock;
|
|
};
|
|
|
|
static inline struct ovl_inode *OVL_I(struct inode *inode)
|
|
{
|
|
return container_of(inode, struct ovl_inode, vfs_inode);
|
|
}
|
|
|
|
static inline struct dentry *ovl_upperdentry_dereference(struct ovl_inode *oi)
|
|
{
|
|
return READ_ONCE(oi->__upperdentry);
|
|
}
|