Merge branch 'android11-5.4' into 'android11-5.4-lts'
Sync up with android11-5.4 for the following commits:617c7432b5
ANDROID: GKI: Enable CONFIG_SERIAL_8250_RUNTIME_UARTS=0813b12454e
ANDROID: GKI: db845c: Update symbols list and ABI15dd5a8bc0
ANDROID: Increase x86 cmdline size to 4k4ec7ffac46
UPSTREAM: cgroup-v1: Require capabilities to set release_agentfe0c18d0f0
ANDROID: incremental-fs: remove index and incomplete dir on umount7aedba616c
UPSTREAM: binder: fix async_free_space accounting for empty parcelsf1a1171f3c
UPSTREAM: tee: handle lookup of shm with reference count 0693158f765
UPSTREAM: bpf: Fix integer overflow in argument calculation for bpf_map_area_allocb9d179c605
UPSTREAM: driver core: Fix possible memory leak in device_link_add()3aeff14796
UPSTREAM: blk-mq: fix kernel panic during iterating over flush request54e1868c8b
UPSTREAM: net: xfrm: fix memory leak in xfrm_user_rcv_msga4e84758f0
UPSTREAM: binder: fix the missing BR_FROZEN_REPLY in binder_return_strings013b7ed754
ANDROID: incremental-fs: fix mount_fs issueba4942c83d
Merge tag 'android11-5.4.161_r00' into android11-5.4202bc8432c
UPSTREAM: vfs: fs_context: fix up param length parsing in legacy_parse_param New symbols tracked due to them being added in the android11-5.4 branch: Leaf changes summary: 1 artifact changed Changed leaf types summary: 0 leaf type changed Removed/Changed/Added functions summary: 0 Removed, 0 Changed, 1 Added function Removed/Changed/Added variables summary: 0 Removed, 0 Changed, 0 Added variable 1 Added function: [A] 'function void kill_anon_super(super_block*)' Signed-off-by: Greg Kroah-Hartman <gregkh@google.com> Change-Id: I89df6d21c7c36bb6b2a9047b1f7e2988f48a5637
This commit is contained in:
commit
82b6e1787f
File diff suppressed because it is too large
Load Diff
@ -583,6 +583,7 @@
|
||||
__kfifo_alloc
|
||||
__kfifo_free
|
||||
kmalloc_order_trace
|
||||
ktime_get_with_offset
|
||||
__local_bh_enable_ip
|
||||
memmove
|
||||
param_ops_ulong
|
||||
@ -590,6 +591,7 @@
|
||||
__rcu_read_lock
|
||||
__rcu_read_unlock
|
||||
regulatory_hint
|
||||
rfc1042_header
|
||||
skb_copy
|
||||
skb_realloc_headroom
|
||||
strlcat
|
||||
@ -660,6 +662,7 @@
|
||||
phy_pm_runtime_get_sync
|
||||
phy_pm_runtime_put_sync
|
||||
platform_get_irq_byname_optional
|
||||
pm_runtime_barrier
|
||||
system_freezable_wq
|
||||
usb_add_gadget_udc
|
||||
usb_decode_ctrl
|
||||
@ -733,7 +736,6 @@
|
||||
generic_file_read_iter
|
||||
generic_file_splice_read
|
||||
generic_read_dir
|
||||
generic_shutdown_super
|
||||
__get_free_pages
|
||||
get_zeroed_page
|
||||
iget5_locked
|
||||
@ -745,6 +747,7 @@
|
||||
kernel_read
|
||||
kernel_write
|
||||
kern_path
|
||||
kill_anon_super
|
||||
kobject_create_and_add
|
||||
kobject_put
|
||||
lockref_get
|
||||
|
@ -317,6 +317,7 @@ CONFIG_SERIAL_8250=y
|
||||
# CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
# CONFIG_SERIAL_8250_EXAR is not set
|
||||
CONFIG_SERIAL_8250_RUNTIME_UARTS=0
|
||||
CONFIG_SERIAL_OF_PLATFORM=y
|
||||
CONFIG_SERIAL_AMBA_PL011=y
|
||||
CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
|
||||
|
@ -289,6 +289,7 @@ CONFIG_INPUT_UINPUT=y
|
||||
CONFIG_SERIAL_8250=y
|
||||
# CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_SERIAL_8250_RUNTIME_UARTS=0
|
||||
CONFIG_SERIAL_OF_PLATFORM=y
|
||||
CONFIG_SERIAL_DEV_BUS=y
|
||||
CONFIG_HW_RANDOM=y
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
#include <uapi/asm/setup.h>
|
||||
|
||||
#define COMMAND_LINE_SIZE 2048
|
||||
#define COMMAND_LINE_SIZE 4096
|
||||
|
||||
#include <linux/linkage.h>
|
||||
#include <asm/page_types.h>
|
||||
|
@ -120,7 +120,6 @@ void blk_rq_init(struct request_queue *q, struct request *rq)
|
||||
rq->internal_tag = -1;
|
||||
rq->start_time_ns = ktime_get_ns();
|
||||
rq->part = NULL;
|
||||
refcount_set(&rq->ref, 1);
|
||||
}
|
||||
EXPORT_SYMBOL(blk_rq_init);
|
||||
|
||||
|
@ -325,6 +325,14 @@ static void blk_kick_flush(struct request_queue *q, struct blk_flush_queue *fq,
|
||||
flush_rq->rq_flags |= RQF_FLUSH_SEQ;
|
||||
flush_rq->rq_disk = first_rq->rq_disk;
|
||||
flush_rq->end_io = flush_end_io;
|
||||
/*
|
||||
* Order WRITE ->end_io and WRITE rq->ref, and its pair is the one
|
||||
* implied in refcount_inc_not_zero() called from
|
||||
* blk_mq_find_and_get_req(), which orders WRITE/READ flush_rq->ref
|
||||
* and READ flush_rq->end_io
|
||||
*/
|
||||
smp_wmb();
|
||||
refcount_set(&flush_rq->ref, 1);
|
||||
|
||||
blk_flush_queue_rq(flush_rq, false);
|
||||
}
|
||||
|
@ -5743,7 +5743,8 @@ static const char * const binder_return_strings[] = {
|
||||
"BR_FINISHED",
|
||||
"BR_DEAD_BINDER",
|
||||
"BR_CLEAR_DEATH_NOTIFICATION_DONE",
|
||||
"BR_FAILED_REPLY"
|
||||
"BR_FAILED_REPLY",
|
||||
"BR_FROZEN_REPLY",
|
||||
};
|
||||
|
||||
static const char * const binder_command_strings[] = {
|
||||
|
@ -155,7 +155,7 @@ enum binder_stat_types {
|
||||
};
|
||||
|
||||
struct binder_stats {
|
||||
atomic_t br[_IOC_NR(BR_FAILED_REPLY) + 1];
|
||||
atomic_t br[_IOC_NR(BR_FROZEN_REPLY) + 1];
|
||||
atomic_t bc[_IOC_NR(BC_REPLY_SG) + 1];
|
||||
atomic_t obj_created[BINDER_STAT_COUNT];
|
||||
atomic_t obj_deleted[BINDER_STAT_COUNT];
|
||||
|
@ -642,9 +642,7 @@ struct device_link *device_link_add(struct device *consumer,
|
||||
dev_set_name(&link->link_dev, "%s--%s",
|
||||
dev_name(supplier), dev_name(consumer));
|
||||
if (device_register(&link->link_dev)) {
|
||||
put_device(consumer);
|
||||
put_device(supplier);
|
||||
kfree(link);
|
||||
put_device(&link->link_dev);
|
||||
link = NULL;
|
||||
goto out;
|
||||
}
|
||||
|
@ -319,7 +319,6 @@ static struct mount_info *get_mount_info(struct super_block *sb)
|
||||
{
|
||||
struct mount_info *result = sb->s_fs_info;
|
||||
|
||||
WARN_ON(!result);
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -678,7 +677,7 @@ static int iterate_incfs_dir(struct file *file, struct dir_context *ctx)
|
||||
struct mount_info *mi = get_mount_info(file_superblock(file));
|
||||
bool root;
|
||||
|
||||
if (!dir) {
|
||||
if (!dir || !mi) {
|
||||
error = -EBADF;
|
||||
goto out;
|
||||
}
|
||||
@ -1842,6 +1841,9 @@ static int dir_rename(struct inode *old_dir, struct dentry *old_dentry,
|
||||
struct dentry *trap;
|
||||
int error = 0;
|
||||
|
||||
if (!mi)
|
||||
return -EBADF;
|
||||
|
||||
error = mutex_lock_interruptible(&mi->mi_dir_struct_mutex);
|
||||
if (error)
|
||||
return error;
|
||||
@ -2089,6 +2091,9 @@ static ssize_t incfs_getxattr(struct dentry *d, const char *name,
|
||||
char *stored_value;
|
||||
size_t stored_size;
|
||||
|
||||
if (!mi)
|
||||
return -EBADF;
|
||||
|
||||
if (di && di->backing_path.dentry)
|
||||
return vfs_getxattr(di->backing_path.dentry, name, value, size);
|
||||
|
||||
@ -2125,6 +2130,9 @@ static ssize_t incfs_setxattr(struct dentry *d, const char *name,
|
||||
void **stored_value;
|
||||
size_t *stored_size;
|
||||
|
||||
if (!mi)
|
||||
return -EBADF;
|
||||
|
||||
if (di && di->backing_path.dentry)
|
||||
return vfs_setxattr(di->backing_path.dentry, name, value, size,
|
||||
flags);
|
||||
@ -2165,6 +2173,11 @@ static ssize_t incfs_listxattr(struct dentry *d, char *list, size_t size)
|
||||
return vfs_listxattr(di->backing_path.dentry, list, size);
|
||||
}
|
||||
|
||||
static int incfs_test_super(struct super_block *s, void *p)
|
||||
{
|
||||
return s->s_fs_info != NULL;
|
||||
}
|
||||
|
||||
struct dentry *incfs_mount_fs(struct file_system_type *type, int flags,
|
||||
const char *dev_name, void *data)
|
||||
{
|
||||
@ -2174,7 +2187,8 @@ struct dentry *incfs_mount_fs(struct file_system_type *type, int flags,
|
||||
struct dentry *index_dir;
|
||||
struct super_block *src_fs_sb = NULL;
|
||||
struct inode *root_inode = NULL;
|
||||
struct super_block *sb = sget(type, NULL, set_anon_super, flags, NULL);
|
||||
struct super_block *sb = sget(type, incfs_test_super, set_anon_super,
|
||||
flags, NULL);
|
||||
int error = 0;
|
||||
|
||||
if (IS_ERR(sb))
|
||||
@ -2215,13 +2229,18 @@ struct dentry *incfs_mount_fs(struct file_system_type *type, int flags,
|
||||
src_fs_sb = backing_dir_path.dentry->d_sb;
|
||||
sb->s_maxbytes = src_fs_sb->s_maxbytes;
|
||||
|
||||
mi = incfs_alloc_mount_info(sb, &options, &backing_dir_path);
|
||||
if (!sb->s_fs_info) {
|
||||
mi = incfs_alloc_mount_info(sb, &options, &backing_dir_path);
|
||||
|
||||
if (IS_ERR_OR_NULL(mi)) {
|
||||
error = PTR_ERR(mi);
|
||||
pr_err("incfs: Error allocating mount info. %d\n", error);
|
||||
mi = NULL;
|
||||
goto err;
|
||||
if (IS_ERR_OR_NULL(mi)) {
|
||||
error = PTR_ERR(mi);
|
||||
pr_err("incfs: Error allocating mount info. %d\n", error);
|
||||
mi = NULL;
|
||||
goto err;
|
||||
}
|
||||
sb->s_fs_info = mi;
|
||||
} else {
|
||||
mi = sb->s_fs_info;
|
||||
}
|
||||
|
||||
index_dir = open_or_create_index_dir(backing_dir_path.dentry);
|
||||
@ -2233,23 +2252,24 @@ struct dentry *incfs_mount_fs(struct file_system_type *type, int flags,
|
||||
}
|
||||
mi->mi_index_dir = index_dir;
|
||||
|
||||
sb->s_fs_info = mi;
|
||||
root_inode = fetch_regular_inode(sb, backing_dir_path.dentry);
|
||||
if (IS_ERR(root_inode)) {
|
||||
error = PTR_ERR(root_inode);
|
||||
goto err;
|
||||
}
|
||||
|
||||
sb->s_root = d_make_root(root_inode);
|
||||
if (!sb->s_root) {
|
||||
error = -ENOMEM;
|
||||
goto err;
|
||||
sb->s_root = d_make_root(root_inode);
|
||||
if (!sb->s_root) {
|
||||
error = -ENOMEM;
|
||||
goto err;
|
||||
}
|
||||
error = incfs_init_dentry(sb->s_root, &backing_dir_path);
|
||||
if (error)
|
||||
goto err;
|
||||
}
|
||||
error = incfs_init_dentry(sb->s_root, &backing_dir_path);
|
||||
if (error)
|
||||
goto err;
|
||||
|
||||
path_put(&backing_dir_path);
|
||||
mi->mi_backing_dir_path = backing_dir_path;
|
||||
sb->s_flags |= SB_ACTIVE;
|
||||
|
||||
pr_debug("incfs: mount\n");
|
||||
@ -2268,6 +2288,9 @@ static int incfs_remount_fs(struct super_block *sb, int *flags, char *data)
|
||||
struct mount_info *mi = get_mount_info(sb);
|
||||
int err = 0;
|
||||
|
||||
if (!mi)
|
||||
return err;
|
||||
|
||||
sync_filesystem(sb);
|
||||
err = parse_options(&options, (char *)data);
|
||||
if (err)
|
||||
@ -2286,14 +2309,19 @@ void incfs_kill_sb(struct super_block *sb)
|
||||
struct mount_info *mi = sb->s_fs_info;
|
||||
|
||||
pr_debug("incfs: unmount\n");
|
||||
vfs_rmdir(d_inode(mi->mi_backing_dir_path.dentry), mi->mi_index_dir);
|
||||
kill_anon_super(sb);
|
||||
incfs_free_mount_info(mi);
|
||||
generic_shutdown_super(sb);
|
||||
sb->s_fs_info = NULL;
|
||||
}
|
||||
|
||||
static int show_options(struct seq_file *m, struct dentry *root)
|
||||
{
|
||||
struct mount_info *mi = get_mount_info(root->d_sb);
|
||||
|
||||
if (!mi)
|
||||
return -EBADF;
|
||||
|
||||
seq_printf(m, ",read_timeout_ms=%u", mi->mi_options.read_timeout_ms);
|
||||
seq_printf(m, ",readahead=%u", mi->mi_options.readahead_pages);
|
||||
if (mi->mi_options.read_log_pages != 0) {
|
||||
|
@ -2769,6 +2769,16 @@ static int xfrm_user_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh,
|
||||
|
||||
err = link->doit(skb, nlh, attrs);
|
||||
|
||||
/* We need to free skb allocated in xfrm_alloc_compat() before
|
||||
* returning from this function, because consume_skb() won't take
|
||||
* care of frag_list since netlink destructor sets
|
||||
* sbk->head to NULL. (see netlink_skb_destructor())
|
||||
*/
|
||||
if (skb_has_frag_list(skb)) {
|
||||
kfree_skb(skb_shinfo(skb)->frag_list);
|
||||
skb_shinfo(skb)->frag_list = NULL;
|
||||
}
|
||||
|
||||
err:
|
||||
kvfree(nlh64);
|
||||
return err;
|
||||
|
Loading…
Reference in New Issue
Block a user