Merge branch 'sid'

This commit is contained in:
Ben Hutchings 2018-06-26 02:58:18 +01:00
commit 86ecf2f70f
13 changed files with 892 additions and 134 deletions

78
debian/changelog vendored
View File

@ -1,4 +1,71 @@
linux (4.17.2-1) UNRELEASED; urgency=medium
linux (4.17.3-1) UNRELEASED; urgency=medium
* New upstream stable update:
https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.17.3
- net: aquantia: fix unsigned numvecs comparison with less than zero
- bonding: re-evaluate force_primary when the primary slave name changes
- cdc_ncm: avoid padding beyond end of skb
- ipv6: allow PMTU exceptions to local routes
- [armhf,arm64] net: dsa: add error handling for pskb_trim_rcsum
- net/sched: act_simple: fix parsing of TCA_DEF_DATA
- tcp: verify the checksum of the first data segment in a new connection
- socket: close race condition between sock_close() and sockfs_setattr()
(CVE-2018-12232)
- udp: fix rx queue len reported by diag and proc interface
- net: in virtio_net_hdr only add VLAN_HLEN to csum_start if payload holds
vlan
- ACPICA: AML parser: attempt to continue loading table after error
- ext4: fix hole length detection in ext4_ind_map_blocks()
- ext4: update mtime in ext4_punch_hole even if no blocks are released
- ext4: do not allow external inodes for inline data (CVE-2018-11412)
- ext4: bubble errors from ext4_find_inline_data_nolock() up to ext4_iget()
- ext4: correctly handle a zero-length xattr with a non-zero e_value_offs
(CVE-2018-10840)
- ext4: fix fencepost error in check for inode count overflow during resize
- driver core: Don't ignore class_dir_create_and_add() failure.
- Btrfs: allow empty subvol= again
- Btrfs: fix clone vs chattr NODATASUM race
- Btrfs: fix memory and mount leak in btrfs_ioctl_rm_dev_v2()
- btrfs: return error value if create_io_em failed in cow_file_range
- btrfs: scrub: Don't use inode pages for device replace
- ALSA: usb-audio: Disable the quirk for Nura headset
- ALSA: hda - Handle kzalloc() failure in snd_hda_attach_pcm_stream()
- [x86] MCE: Fix stack out-of-bounds write in mce-inject.c: Flags_read()
- smb3: fix various xid leaks
- smb3: on reconnect set PreviousSessionId field
- CIFS: 511c54a2f69195b28afb9dd119f03787b1625bb4 adds a check for session
expiry
- cifs: For SMB2 security informaion query, check for minimum sized
security descriptor instead of sizeof FileAllInformation class
- nbd: fix nbd device deletion
- nbd: update size when connected
- nbd: use bd_set_size when updating disk size
- blk-mq: reinit q->tag_set_list entry only after grace period
- bdi: Move cgroup bdi_writeback to a dedicated low concurrency workqueue
- cpufreq: Fix new policy initialization during limits updates via sysfs
- cpufreq: governors: Fix long idle detection logic in load calculation
- libata: zpodd: small read overflow in eject_tray()
- libata: Drop SanDisk SD7UB3Q*G1001 NOLPM quirk
- nvme/pci: Sync controller reset for AER slot_reset
- [x86] vector: Fix the args of vector_alloc tracepoint
- [x86] apic/vector: Prevent hlist corruption and leaks
- [x86] apic: Provide apic_ack_irq()
- [x86] ioapic: Use apic_ack_irq()
- [x86] platform/uv: Use apic_ack_irq()
- irq_remapping: Use apic_ack_irq()
- genirq/generic_pending: Do not lose pending affinity update
- genirq/affinity: Defer affinity setting if irq chip is busy
- genirq/migration: Avoid out of line call if pending is not set
- [x86] intel_rdt: Enable CMT and MBM on new Skylake stepping
- media: uvcvideo: Prevent setting unavailable flags
- media: rc: ensure input/lirc device can be opened after register
- iwlwifi: fw: harden page loading code
- [x86] HID: intel_ish-hid: ipc: register more pm callbacks to support
hibernation
- HID: wacom: Correct logical maximum Y for 2nd-gen Intuos Pro large
- vhost: fix info leak due to uninitialized memory (CVE-2018-1118)
- fs/binfmt_misc.c: do not allow offset overflow
- mm, page_alloc: do not break __GFP_THISNODE by zonelist reset
[ Ben Hutchings ]
* [amd64,arm64,armhf] android: Build modules to support Anbox
@ -9,10 +76,19 @@ linux (4.17.2-1) UNRELEASED; urgency=medium
- Set ANDROID_BINDER_DEVICES="binder"
- Disable ANDROID_BINDER_IPC_32BIT
* [mips*] Increase RELOCATION_TABLE_SIZE to 0x00140000 (fixes FTBFS)
* Set ABI to 1
* [x86,arm64] Disable code signing for upload to unstable
* [x86] virt: vbox: Only copy_from_user the request-header once
(CVE-2018-12633)
* [x86] vboxguest: Enable VBOXGUEST and DRM_VBOXVIDEO as modules
* aufs: Update support patchset to aufs4.x-rcN-20180611
[ Romain Perier ]
* [x86] amdgpu: Enable DCN 1.0 Raven family (Closes: #901349)
[ Vagrant Cascadian ]
* [arm64] Add device-tree to support Pinebook.
-- Ben Hutchings <ben@decadent.org.uk> Fri, 22 Jun 2018 17:34:37 +0100
linux (4.17.2-1~exp1) experimental; urgency=medium

View File

@ -1648,6 +1648,11 @@ CONFIG_RTL8723BS=m
##
CONFIG_RTS5208=m
##
## file: drivers/staging/vboxvideo/Kconfig
##
CONFIG_DRM_VBOXVIDEO=m
##
## file: drivers/staging/vt6656/Kconfig
##
@ -1830,6 +1835,11 @@ CONFIG_FB_HYPERV=m
##
# CONFIG_FB_GEODE is not set
##
## file: drivers/virt/vboxguest/Kconfig
##
CONFIG_VBOXGUEST=m
##
## file: drivers/watchdog/Kconfig
##

View File

@ -1,43 +0,0 @@
From 52acf73b6e9a6962045feb2ba5a8921da2201915 Mon Sep 17 00:00:00 2001
From: Dexuan Cui <decui@microsoft.com>
Date: Wed, 6 Jun 2018 21:32:51 +0000
Subject: [PATCH] hv_netvsc: Fix a network regression after ifdown/ifup
Recently people reported the NIC stops working after
"ifdown eth0; ifup eth0". It turns out in this case the TX queues are not
enabled, after the refactoring of the common detach logic: when the NIC
has sub-channels, usually we enable all the TX queues after all
sub-channels are set up: see rndis_set_subchannel() ->
netif_device_attach(), but in the case of "ifdown eth0; ifup eth0" where
the number of channels doesn't change, we also must make sure the TX queues
are enabled. The patch fixes the regression.
Fixes: 7b2ee50c0cd5 ("hv_netvsc: common detach logic")
Signed-off-by: Dexuan Cui <decui@microsoft.com>
Cc: Stephen Hemminger <sthemmin@microsoft.com>
Cc: K. Y. Srinivasan <kys@microsoft.com>
Cc: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
---
drivers/net/hyperv/netvsc_drv.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
index bef4d55a108c..8eec156418ea 100644
--- a/drivers/net/hyperv/netvsc_drv.c
+++ b/drivers/net/hyperv/netvsc_drv.c
@@ -127,8 +127,10 @@ static int netvsc_open(struct net_device *net)
}
rdev = nvdev->extension;
- if (!rdev->link_state)
+ if (!rdev->link_state) {
netif_carrier_on(net);
+ netif_tx_wake_all_queues(net);
+ }
if (vf_netdev) {
/* Setting synthetic device up transparently sets
--
2.17.1

View File

@ -0,0 +1,43 @@
From: Wenwen Wang <wang6495@umn.edu>
Date: Tue, 8 May 2018 08:50:28 -0500
Subject: virt: vbox: Only copy_from_user the request-header once
Origin: https://git.kernel.org/linus/bd23a7269834dc7c1f93e83535d16ebc44b75eba
Bug-Debian-Security: https://security-tracker.debian.org/tracker/CVE-2018-12633
In vbg_misc_device_ioctl(), the header of the ioctl argument is copied from
the userspace pointer 'arg' and saved to the kernel object 'hdr'. Then the
'version', 'size_in', and 'size_out' fields of 'hdr' are verified.
Before this commit, after the checks a buffer for the entire request would
be allocated and then all data including the verified header would be
copied from the userspace 'arg' pointer again.
Given that the 'arg' pointer resides in userspace, a malicious userspace
process can race to change the data pointed to by 'arg' between the two
copies. By doing so, the user can bypass the verifications on the ioctl
argument.
This commit fixes this by using the already checked copy of the header
to fill the header part of the allocated buffer and only copying the
remainder of the data from userspace.
Signed-off-by: Wenwen Wang <wang6495@umn.edu>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/virt/vboxguest/vboxguest_linux.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
--- a/drivers/virt/vboxguest/vboxguest_linux.c
+++ b/drivers/virt/vboxguest/vboxguest_linux.c
@@ -121,7 +121,9 @@ static long vbg_misc_device_ioctl(struct
if (!buf)
return -ENOMEM;
- if (copy_from_user(buf, (void *)arg, hdr.size_in)) {
+ *((struct vbg_ioctl_hdr *)buf) = hdr;
+ if (copy_from_user(buf + sizeof(hdr), (void *)arg + sizeof(hdr),
+ hdr.size_in - sizeof(hdr))) {
ret = -EFAULT;
goto out;
}

View File

@ -1,19 +1,19 @@
From: J. R. Okajima <hooanon05@yahoo.co.jp>
Date: Tue Apr 3 14:43:11 2018 +0900
Subject: aufs4.16 base patch
Origin: https://github.com/sfjro/aufs4-standalone/tree/8ed212d3987b8aed42d89dd0137bd44bad4a0a6c
Date: Wed Jun 6 14:11:07 2018 +0900
Subject: aufs4.x-rcN base patch
Origin: https://github.com/sfjro/aufs4-standalone/tree/ed41e3660da6cb1b70e5adfa294f6dbc03bf6fb7
Bug-Debian: https://bugs.debian.org/541828
Patch headers added by debian/patches/features/all/aufs4/gen-patch
SPDX-License-Identifier: GPL-2.0
aufs4.16 base patch
aufs4.x-rcN base patch
diff --git a/MAINTAINERS b/MAINTAINERS
index 6e950b8..7324ece 100644
index 9c125f7..4616bbf 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2485,6 +2485,19 @@ F: include/linux/audit.h
@@ -2519,6 +2519,19 @@ F: include/linux/audit.h
F: include/uapi/linux/audit.h
F: kernel/audit*
@ -34,10 +34,10 @@ index 6e950b8..7324ece 100644
M: Miguel Ojeda Sandonis <miguel.ojeda.sandonis@gmail.com>
W: http://miguelojeda.es/auxdisplay.htm
diff --git a/drivers/block/loop.c b/drivers/block/loop.c
index ee62d2d..4ca6361 100644
index 55cf554..bc965e5 100644
--- a/drivers/block/loop.c
+++ b/drivers/block/loop.c
@@ -691,6 +691,24 @@ static inline int is_loop_device(struct file *file)
@@ -713,6 +713,24 @@ static inline int is_loop_device(struct file *file)
return i && S_ISBLK(i->i_mode) && MAJOR(i->i_rdev) == LOOP_MAJOR;
}
@ -63,10 +63,10 @@ index ee62d2d..4ca6361 100644
static ssize_t loop_attr_show(struct device *dev, char *page,
diff --git a/fs/dcache.c b/fs/dcache.c
index 8945e6c..87c19c0 100644
index 2acfc69..ff338e2 100644
--- a/fs/dcache.c
+++ b/fs/dcache.c
@@ -1205,7 +1205,7 @@ enum d_walk_ret {
@@ -1234,7 +1234,7 @@ enum d_walk_ret {
*
* The @enter() and @finish() callbacks are called with d_lock held.
*/
@ -76,7 +76,7 @@ index 8945e6c..87c19c0 100644
void (*finish)(void *))
{
diff --git a/fs/fcntl.c b/fs/fcntl.c
index 1e97f1f..8cd01f7 100644
index d737ff0..7550799 100644
--- a/fs/fcntl.c
+++ b/fs/fcntl.c
@@ -32,7 +32,7 @@
@ -98,10 +98,10 @@ index 1e97f1f..8cd01f7 100644
return error;
diff --git a/fs/inode.c b/fs/inode.c
index ef36236..929a5a3 100644
index 3b55391..e0c5255 100644
--- a/fs/inode.c
+++ b/fs/inode.c
@@ -1659,7 +1659,7 @@ EXPORT_SYMBOL(generic_update_time);
@@ -1663,7 +1663,7 @@ EXPORT_SYMBOL(generic_update_time);
* This does the actual work of updating an inodes time or version. Must have
* had called mnt_want_write() before calling this.
*/
@ -111,7 +111,7 @@ index ef36236..929a5a3 100644
int (*update_time)(struct inode *, struct timespec *, int);
diff --git a/fs/namespace.c b/fs/namespace.c
index 9d1374a..26ef600 100644
index 5f75969..61129ff 100644
--- a/fs/namespace.c
+++ b/fs/namespace.c
@@ -846,6 +846,12 @@ static inline int check_mnt(struct mount *mnt)
@ -128,10 +128,10 @@ index 9d1374a..26ef600 100644
* vfsmount lock must be held for write
*/
diff --git a/fs/read_write.c b/fs/read_write.c
index f8547b8..0a5c47b 100644
index c4eabbf..ddd6e67 100644
--- a/fs/read_write.c
+++ b/fs/read_write.c
@@ -484,6 +484,28 @@ ssize_t __vfs_write(struct file *file, const char __user *p, size_t count,
@@ -489,6 +489,28 @@ ssize_t __vfs_write(struct file *file, const char __user *p, size_t count,
return -EINVAL;
}
@ -161,7 +161,7 @@ index f8547b8..0a5c47b 100644
{
mm_segment_t old_fs;
diff --git a/fs/splice.c b/fs/splice.c
index 39e2dc0..c5fb195 100644
index 005d09c..f617ab0 100644
--- a/fs/splice.c
+++ b/fs/splice.c
@@ -837,8 +837,8 @@ EXPORT_SYMBOL(generic_splice_sendpage);
@ -189,7 +189,7 @@ index 39e2dc0..c5fb195 100644
ssize_t (*splice_read)(struct file *, loff_t *,
struct pipe_inode_info *, size_t, unsigned int);
diff --git a/fs/sync.c b/fs/sync.c
index 6e0a2cb..a6891ee 100644
index b54e054..2860782 100644
--- a/fs/sync.c
+++ b/fs/sync.c
@@ -28,7 +28,7 @@
@ -214,7 +214,7 @@ index 279720d..76e38ea 100644
static inline void fput_light(struct file *file, int fput_needed)
{
diff --git a/include/linux/fs.h b/include/linux/fs.h
index c6baf76..71dc695 100644
index 760d8da..09a2542 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -1270,6 +1270,7 @@ extern void fasync_free(struct fasync_struct *);
@ -225,7 +225,7 @@ index c6baf76..71dc695 100644
extern void __f_setown(struct file *filp, struct pid *, enum pid_type, int force);
extern int f_setown(struct file *filp, unsigned long arg, int force);
extern void f_delown(struct file *filp);
@@ -1722,6 +1723,7 @@ struct file_operations {
@@ -1724,6 +1725,7 @@ struct file_operations {
ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int);
unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
int (*check_flags)(int);
@ -233,7 +233,7 @@ index c6baf76..71dc695 100644
int (*flock) (struct file *, int, struct file_lock *);
ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t, unsigned int);
ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);
@@ -1792,6 +1794,12 @@ ssize_t rw_copy_check_uvector(int type, const struct iovec __user * uvector,
@@ -1794,6 +1796,12 @@ ssize_t rw_copy_check_uvector(int type, const struct iovec __user * uvector,
struct iovec *fast_pointer,
struct iovec **ret_pointer);
@ -246,7 +246,7 @@ index c6baf76..71dc695 100644
extern ssize_t __vfs_read(struct file *, char __user *, size_t, loff_t *);
extern ssize_t vfs_read(struct file *, char __user *, size_t, loff_t *);
extern ssize_t vfs_write(struct file *, const char __user *, size_t, loff_t *);
@@ -2196,6 +2204,7 @@ extern int current_umask(void);
@@ -2199,6 +2207,7 @@ extern int current_umask(void);
extern void ihold(struct inode * inode);
extern void iput(struct inode *);
extern int generic_update_time(struct inode *, struct timespec *, int);
@ -254,7 +254,7 @@ index c6baf76..71dc695 100644
/* /sys/fs */
extern struct kobject *fs_kobj;
@@ -2476,6 +2485,7 @@ static inline bool sb_is_blkdev_sb(struct super_block *sb)
@@ -2485,6 +2494,7 @@ static inline bool sb_is_blkdev_sb(struct super_block *sb)
return false;
}
#endif
@ -318,7 +318,7 @@ index 74b4911..19789fb 100644
+ unsigned int flags);
#endif
diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c
index 89b5f83..0dca42f 100644
index 0233863..06e0d7a 100644
--- a/kernel/locking/lockdep.c
+++ b/kernel/locking/lockdep.c
@@ -140,7 +140,7 @@ static struct lock_list list_entries[MAX_LOCKDEP_ENTRIES];

View File

@ -1,17 +1,19 @@
From: J. R. Okajima <hooanon05@yahoo.co.jp>
Date: Tue Apr 3 14:43:11 2018 +0900
Subject: aufs4.16 mmap patch
Origin: https://github.com/sfjro/aufs4-standalone/tree/8ed212d3987b8aed42d89dd0137bd44bad4a0a6c
Date: Wed Jun 6 14:11:07 2018 +0900
Subject: aufs4.x-rcN mmap patch
Origin: https://github.com/sfjro/aufs4-standalone/tree/ed41e3660da6cb1b70e5adfa294f6dbc03bf6fb7
Bug-Debian: https://bugs.debian.org/541828
Patch headers added by debian/patches/features/all/aufs4/gen-patch
SPDX-License-Identifier: GPL-2.0
aufs4.16 mmap patch
aufs4.x-rcN mmap patch
diff --git a/fs/proc/base.c b/fs/proc/base.c
index 1a76d75..77f698e 100644
--- a/fs/proc/base.c
+++ b/fs/proc/base.c
@@ -2018,7 +2018,7 @@ static int map_files_get_link(struct den
@@ -2024,7 +2024,7 @@ static int map_files_get_link(struct dentry *dentry, struct path *path)
down_read(&mm->mmap_sem);
vma = find_exact_vma(mm, vm_start, vm_end);
if (vma && vma->vm_file) {
@ -20,9 +22,11 @@ aufs4.16 mmap patch
path_get(path);
rc = 0;
}
diff --git a/fs/proc/nommu.c b/fs/proc/nommu.c
index 7563437..7c0dc0f 100644
--- a/fs/proc/nommu.c
+++ b/fs/proc/nommu.c
@@ -45,7 +45,10 @@ static int nommu_region_show(struct seq_
@@ -45,7 +45,10 @@ static int nommu_region_show(struct seq_file *m, struct vm_region *region)
file = region->vm_file;
if (file) {
@ -34,9 +38,11 @@ aufs4.16 mmap patch
dev = inode->i_sb->s_dev;
ino = inode->i_ino;
}
diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
index c486ad4..76b71f8 100644
--- a/fs/proc/task_mmu.c
+++ b/fs/proc/task_mmu.c
@@ -305,7 +305,10 @@ show_map_vma(struct seq_file *m, struct
@@ -305,7 +305,10 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma, int is_pid)
const char *name = NULL;
if (file) {
@ -48,7 +54,7 @@ aufs4.16 mmap patch
dev = inode->i_sb->s_dev;
ino = inode->i_ino;
pgoff = ((loff_t)vma->vm_pgoff) << PAGE_SHIFT;
@@ -1722,7 +1725,7 @@ static int show_numa_map(struct seq_file
@@ -1726,7 +1729,7 @@ static int show_numa_map(struct seq_file *m, void *v, int is_pid)
struct proc_maps_private *proc_priv = &numa_priv->proc_maps;
struct vm_area_struct *vma = v;
struct numa_maps *md = &numa_priv->md;
@ -57,9 +63,11 @@ aufs4.16 mmap patch
struct mm_struct *mm = vma->vm_mm;
struct mm_walk walk = {
.hugetlb_entry = gather_hugetlb_stats,
diff --git a/fs/proc/task_nommu.c b/fs/proc/task_nommu.c
index 5b62f57..dfb4a3b 100644
--- a/fs/proc/task_nommu.c
+++ b/fs/proc/task_nommu.c
@@ -156,7 +156,10 @@ static int nommu_vma_show(struct seq_fil
@@ -156,7 +156,10 @@ static int nommu_vma_show(struct seq_file *m, struct vm_area_struct *vma,
file = vma->vm_file;
if (file) {
@ -71,9 +79,11 @@ aufs4.16 mmap patch
dev = inode->i_sb->s_dev;
ino = inode->i_ino;
pgoff = (loff_t)vma->vm_pgoff << PAGE_SHIFT;
diff --git a/include/linux/mm.h b/include/linux/mm.h
index 02a616e..01b3bb9 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -1380,6 +1380,28 @@ static inline void unmap_shared_mapping_
@@ -1380,6 +1380,28 @@ static inline void unmap_shared_mapping_range(struct address_space *mapping,
unmap_mapping_range(mapping, holebegin, holelen, 0);
}
@ -102,6 +112,8 @@ aufs4.16 mmap patch
extern int access_process_vm(struct task_struct *tsk, unsigned long addr,
void *buf, int len, unsigned int gup_flags);
extern int access_remote_vm(struct mm_struct *mm, unsigned long addr,
diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
index 2161234..78aa367 100644
--- a/include/linux/mm_types.h
+++ b/include/linux/mm_types.h
@@ -251,6 +251,7 @@ struct vm_region {
@ -120,9 +132,11 @@ aufs4.16 mmap patch
void * vm_private_data; /* was vm_pte (shared mem) */
atomic_long_t swap_readahead_info;
diff --git a/kernel/fork.c b/kernel/fork.c
index a5d21c4..e965e09 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -474,7 +474,7 @@ static __latent_entropy int dup_mmap(str
@@ -473,7 +473,7 @@ static __latent_entropy int dup_mmap(struct mm_struct *mm,
struct inode *inode = file_inode(file);
struct address_space *mapping = file->f_mapping;
@ -131,9 +145,11 @@ aufs4.16 mmap patch
if (tmp->vm_flags & VM_DENYWRITE)
atomic_dec(&inode->i_writecount);
i_mmap_lock_write(mapping);
diff --git a/mm/Makefile b/mm/Makefile
index b4e54a9a..77892ae 100644
--- a/mm/Makefile
+++ b/mm/Makefile
@@ -39,7 +39,7 @@ obj-y := filemap.o mempool.o oom_kill.
@@ -39,7 +39,7 @@ obj-y := filemap.o mempool.o oom_kill.o \
mm_init.o mmu_context.o percpu.o slab_common.o \
compaction.o vmacache.o \
interval_tree.o list_lru.o workingset.o \
@ -142,9 +158,11 @@ aufs4.16 mmap patch
obj-y += init-mm.o
diff --git a/mm/filemap.c b/mm/filemap.c
index 0604cb0..45d2369 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
@@ -2701,7 +2701,7 @@ int filemap_page_mkwrite(struct vm_fault
@@ -2700,7 +2700,7 @@ int filemap_page_mkwrite(struct vm_fault *vmf)
int ret = VM_FAULT_LOCKED;
sb_start_pagefault(inode->i_sb);
@ -153,9 +171,11 @@ aufs4.16 mmap patch
lock_page(page);
if (page->mapping != inode->i_mapping) {
unlock_page(page);
diff --git a/mm/mmap.c b/mm/mmap.c
index fc41c05..e376869 100644
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -171,7 +171,7 @@ static struct vm_area_struct *remove_vma
@@ -180,7 +180,7 @@ static struct vm_area_struct *remove_vma(struct vm_area_struct *vma)
if (vma->vm_ops && vma->vm_ops->close)
vma->vm_ops->close(vma);
if (vma->vm_file)
@ -164,7 +184,7 @@ aufs4.16 mmap patch
mpol_put(vma_policy(vma));
kmem_cache_free(vm_area_cachep, vma);
return next;
@@ -896,7 +896,7 @@ again:
@@ -905,7 +905,7 @@ int __vma_adjust(struct vm_area_struct *vma, unsigned long start,
if (remove_next) {
if (file) {
uprobe_munmap(next, next->vm_start, next->vm_end);
@ -173,7 +193,7 @@ aufs4.16 mmap patch
}
if (next->anon_vma)
anon_vma_merge(vma, next);
@@ -1779,8 +1779,8 @@ out:
@@ -1820,8 +1820,8 @@ unsigned long mmap_region(struct file *file, unsigned long addr,
return addr;
unmap_and_free_vma:
@ -183,7 +203,7 @@ aufs4.16 mmap patch
/* Undo any partial mapping done by a device driver. */
unmap_region(mm, vma, prev, vma->vm_start, vma->vm_end);
@@ -2604,7 +2604,7 @@ int __split_vma(struct mm_struct *mm, st
@@ -2645,7 +2645,7 @@ int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
goto out_free_mpol;
if (new->vm_file)
@ -192,7 +212,7 @@ aufs4.16 mmap patch
if (new->vm_ops && new->vm_ops->open)
new->vm_ops->open(new);
@@ -2623,7 +2623,7 @@ int __split_vma(struct mm_struct *mm, st
@@ -2664,7 +2664,7 @@ int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
if (new->vm_ops && new->vm_ops->close)
new->vm_ops->close(new);
if (new->vm_file)
@ -201,7 +221,7 @@ aufs4.16 mmap patch
unlink_anon_vmas(new);
out_free_mpol:
mpol_put(vma_policy(new));
@@ -2785,7 +2785,7 @@ SYSCALL_DEFINE5(remap_file_pages, unsign
@@ -2826,7 +2826,7 @@ SYSCALL_DEFINE5(remap_file_pages, unsigned long, start, unsigned long, size,
struct vm_area_struct *vma;
unsigned long populate = 0;
unsigned long ret = -EINVAL;
@ -210,7 +230,7 @@ aufs4.16 mmap patch
pr_warn_once("%s (%d) uses deprecated remap_file_pages() syscall. See Documentation/vm/remap_file_pages.txt.\n",
current->comm, current->pid);
@@ -2860,10 +2860,27 @@ SYSCALL_DEFINE5(remap_file_pages, unsign
@@ -2901,10 +2901,27 @@ SYSCALL_DEFINE5(remap_file_pages, unsigned long, start, unsigned long, size,
}
}
@ -239,7 +259,7 @@ aufs4.16 mmap patch
out:
up_write(&mm->mmap_sem);
if (populate)
@@ -3171,7 +3188,7 @@ struct vm_area_struct *copy_vma(struct v
@@ -3220,7 +3237,7 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap,
if (anon_vma_clone(new_vma, vma))
goto out_free_mempol;
if (new_vma->vm_file)
@ -248,9 +268,11 @@ aufs4.16 mmap patch
if (new_vma->vm_ops && new_vma->vm_ops->open)
new_vma->vm_ops->open(new_vma);
vma_link(mm, new_vma, prev, rb_link, rb_parent);
diff --git a/mm/nommu.c b/mm/nommu.c
index 1372373..6362dde 100644
--- a/mm/nommu.c
+++ b/mm/nommu.c
@@ -629,7 +629,7 @@ static void __put_nommu_region(struct vm
@@ -629,7 +629,7 @@ static void __put_nommu_region(struct vm_region *region)
up_write(&nommu_region_sem);
if (region->vm_file)
@ -259,7 +281,7 @@ aufs4.16 mmap patch
/* IO memory and memory shared directly out of the pagecache
* from ramfs/tmpfs mustn't be released here */
@@ -767,7 +767,7 @@ static void delete_vma(struct mm_struct
@@ -767,7 +767,7 @@ static void delete_vma(struct mm_struct *mm, struct vm_area_struct *vma)
if (vma->vm_ops && vma->vm_ops->close)
vma->vm_ops->close(vma);
if (vma->vm_file)
@ -277,7 +299,7 @@ aufs4.16 mmap patch
kmem_cache_free(vm_region_jar, region);
region = pregion;
result = start;
@@ -1364,10 +1364,10 @@ error_just_free:
@@ -1364,10 +1364,10 @@ unsigned long do_mmap(struct file *file,
up_write(&nommu_region_sem);
error:
if (region->vm_file)
@ -290,6 +312,9 @@ aufs4.16 mmap patch
kmem_cache_free(vm_area_cachep, vma);
return ret;
diff --git a/mm/prfile.c b/mm/prfile.c
new file mode 100644
index 0000000..14efc4f
--- /dev/null
+++ b/mm/prfile.c
@@ -0,0 +1,86 @@

View File

@ -1,17 +1,19 @@
From: J. R. Okajima <hooanon05@yahoo.co.jp>
Date: Tue Apr 3 14:43:11 2018 +0900
Subject: aufs4.16 standalone patch
Origin: https://github.com/sfjro/aufs4-standalone/tree/8ed212d3987b8aed42d89dd0137bd44bad4a0a6c
Date: Wed Jun 6 14:11:07 2018 +0900
Subject: aufs4.x-rcN standalone patch
Origin: https://github.com/sfjro/aufs4-standalone/tree/ed41e3660da6cb1b70e5adfa294f6dbc03bf6fb7
Bug-Debian: https://bugs.debian.org/541828
Patch headers added by debian/patches/features/all/aufs4/gen-patch
SPDX-License-Identifier: GPL-2.0
aufs4.16 standalone patch
aufs4.x-rcN standalone patch
diff --git a/fs/dcache.c b/fs/dcache.c
index ff338e2..3e2bae8 100644
--- a/fs/dcache.c
+++ b/fs/dcache.c
@@ -1342,6 +1342,7 @@ rename_retry:
@@ -1342,6 +1342,7 @@ void d_walk(struct dentry *parent, void *data,
seq = 1;
goto again;
}
@ -19,7 +21,7 @@ aufs4.16 standalone patch
struct check_mount {
struct vfsmount *mnt;
@@ -2920,6 +2921,7 @@ void d_exchange(struct dentry *dentry1,
@@ -2942,6 +2943,7 @@ void d_exchange(struct dentry *dentry1, struct dentry *dentry2)
write_sequnlock(&rename_lock);
}
@ -27,9 +29,11 @@ aufs4.16 standalone patch
/**
* d_ancestor - search for an ancestor
diff --git a/fs/exec.c b/fs/exec.c
index 183059c..35adee4 100644
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -109,6 +109,7 @@ bool path_noexec(const struct path *path
@@ -109,6 +109,7 @@ bool path_noexec(const struct path *path)
return (path->mnt->mnt_flags & MNT_NOEXEC) ||
(path->mnt->mnt_sb->s_iflags & SB_I_NOEXEC);
}
@ -37,9 +41,11 @@ aufs4.16 standalone patch
#ifdef CONFIG_USELIB
/*
diff --git a/fs/fcntl.c b/fs/fcntl.c
index 7550799..d403576 100644
--- a/fs/fcntl.c
+++ b/fs/fcntl.c
@@ -85,6 +85,7 @@ int setfl(int fd, struct file * filp, un
@@ -85,6 +85,7 @@ int setfl(int fd, struct file * filp, unsigned long arg)
out:
return error;
}
@ -47,9 +53,11 @@ aufs4.16 standalone patch
static void f_modown(struct file *filp, struct pid *pid, enum pid_type type,
int force)
diff --git a/fs/file_table.c b/fs/file_table.c
index 7ec0b3e..819ee07 100644
--- a/fs/file_table.c
+++ b/fs/file_table.c
@@ -147,6 +147,7 @@ over:
@@ -147,6 +147,7 @@ struct file *get_empty_filp(void)
}
return ERR_PTR(-ENFILE);
}
@ -81,9 +89,11 @@ aufs4.16 standalone patch
void __init files_init(void)
{
diff --git a/fs/inode.c b/fs/inode.c
index e0c5255..ff36056 100644
--- a/fs/inode.c
+++ b/fs/inode.c
@@ -1671,6 +1671,7 @@ int update_time(struct inode *inode, str
@@ -1672,6 +1672,7 @@ int update_time(struct inode *inode, struct timespec *time, int flags)
return update_time(inode, time, flags);
}
@ -91,9 +101,11 @@ aufs4.16 standalone patch
/**
* touch_atime - update the access time
diff --git a/fs/namespace.c b/fs/namespace.c
index 61129ff..5d3e0382 100644
--- a/fs/namespace.c
+++ b/fs/namespace.c
@@ -517,6 +517,7 @@ void __mnt_drop_write(struct vfsmount *m
@@ -517,6 +517,7 @@ void __mnt_drop_write(struct vfsmount *mnt)
mnt_dec_writers(real_mount(mnt));
preempt_enable();
}
@ -101,7 +113,7 @@ aufs4.16 standalone patch
/**
* mnt_drop_write - give up write access to a mount
@@ -851,6 +852,7 @@ int is_current_mnt_ns(struct vfsmount *m
@@ -851,6 +852,7 @@ int is_current_mnt_ns(struct vfsmount *mnt)
{
return check_mnt(real_mount(mnt));
}
@ -109,7 +121,7 @@ aufs4.16 standalone patch
/*
* vfsmount lock must be held for write
@@ -1892,6 +1894,7 @@ int iterate_mounts(int (*f)(struct vfsmo
@@ -1893,6 +1895,7 @@ int iterate_mounts(int (*f)(struct vfsmount *, void *), void *arg,
}
return 0;
}
@ -117,6 +129,8 @@ aufs4.16 standalone patch
static void cleanup_group_ids(struct mount *mnt, struct mount *end)
{
diff --git a/fs/notify/group.c b/fs/notify/group.c
index b7a4b6a..5a69d60 100644
--- a/fs/notify/group.c
+++ b/fs/notify/group.c
@@ -22,6 +22,7 @@
@ -127,7 +141,7 @@ aufs4.16 standalone patch
#include <linux/fsnotify_backend.h>
#include "fsnotify.h"
@@ -109,6 +110,7 @@ void fsnotify_get_group(struct fsnotify_
@@ -109,6 +110,7 @@ void fsnotify_get_group(struct fsnotify_group *group)
{
refcount_inc(&group->refcnt);
}
@ -135,7 +149,7 @@ aufs4.16 standalone patch
/*
* Drop a reference to a group. Free it if it's through.
@@ -118,6 +120,7 @@ void fsnotify_put_group(struct fsnotify_
@@ -118,6 +120,7 @@ void fsnotify_put_group(struct fsnotify_group *group)
if (refcount_dec_and_test(&group->refcnt))
fsnotify_final_destroy_group(group);
}
@ -143,7 +157,7 @@ aufs4.16 standalone patch
/*
* Create a new fsnotify_group and hold a reference for the group returned.
@@ -147,6 +150,7 @@ struct fsnotify_group *fsnotify_alloc_gr
@@ -147,6 +150,7 @@ struct fsnotify_group *fsnotify_alloc_group(const struct fsnotify_ops *ops)
return group;
}
@ -151,9 +165,11 @@ aufs4.16 standalone patch
int fsnotify_fasync(int fd, struct file *file, int on)
{
diff --git a/fs/notify/mark.c b/fs/notify/mark.c
index e9191b4..1f8ccfa 100644
--- a/fs/notify/mark.c
+++ b/fs/notify/mark.c
@@ -108,6 +108,7 @@ void fsnotify_get_mark(struct fsnotify_m
@@ -108,6 +108,7 @@ void fsnotify_get_mark(struct fsnotify_mark *mark)
WARN_ON_ONCE(!refcount_read(&mark->refcnt));
refcount_inc(&mark->refcnt);
}
@ -161,7 +177,7 @@ aufs4.16 standalone patch
static void __fsnotify_recalc_mask(struct fsnotify_mark_connector *conn)
{
@@ -392,6 +393,7 @@ void fsnotify_destroy_mark(struct fsnoti
@@ -392,6 +393,7 @@ void fsnotify_destroy_mark(struct fsnotify_mark *mark,
mutex_unlock(&group->mark_mutex);
fsnotify_free_mark(mark);
}
@ -169,7 +185,7 @@ aufs4.16 standalone patch
/*
* Sorting function for lists of fsnotify marks.
@@ -606,6 +608,7 @@ err:
@@ -606,6 +608,7 @@ int fsnotify_add_mark_locked(struct fsnotify_mark *mark, struct inode *inode,
fsnotify_put_mark(mark);
return ret;
}
@ -177,7 +193,7 @@ aufs4.16 standalone patch
int fsnotify_add_mark(struct fsnotify_mark *mark, struct inode *inode,
struct vfsmount *mnt, int allow_dups)
@@ -741,6 +744,7 @@ void fsnotify_init_mark(struct fsnotify_
@@ -741,6 +744,7 @@ void fsnotify_init_mark(struct fsnotify_mark *mark,
fsnotify_get_group(group);
mark->group = group;
}
@ -185,9 +201,11 @@ aufs4.16 standalone patch
/*
* Destroy all marks in destroy_list, waits for SRCU period to finish before
diff --git a/fs/open.c b/fs/open.c
index d0e955b..527bc1a 100644
--- a/fs/open.c
+++ b/fs/open.c
@@ -64,6 +64,7 @@ int do_truncate(struct dentry *dentry, l
@@ -64,6 +64,7 @@ int do_truncate(struct dentry *dentry, loff_t length, unsigned int time_attrs,
inode_unlock(dentry->d_inode);
return ret;
}
@ -195,9 +213,19 @@ aufs4.16 standalone patch
long vfs_truncate(const struct path *path, loff_t length)
{
@@ -723,6 +724,7 @@ SYSCALL_DEFINE3(fchown, unsigned int, fd, uid_t, user, gid_t, group)
{
return ksys_fchown(fd, user, group);
}
+EXPORT_SYMBOL_GPL(open_check_o_direct);
int open_check_o_direct(struct file *f)
{
diff --git a/fs/read_write.c b/fs/read_write.c
index ddd6e67..aabf92d 100644
--- a/fs/read_write.c
+++ b/fs/read_write.c
@@ -459,6 +459,7 @@ ssize_t vfs_read(struct file *file, char
@@ -459,6 +459,7 @@ ssize_t vfs_read(struct file *file, char __user *buf, size_t count, loff_t *pos)
return ret;
}
@ -213,7 +241,7 @@ aufs4.16 standalone patch
vfs_writef_t vfs_writef(struct file *file)
{
@@ -510,6 +512,7 @@ vfs_writef_t vfs_writef(struct file *fil
@@ -510,6 +512,7 @@ vfs_writef_t vfs_writef(struct file *file)
return new_sync_write;
return ERR_PTR(-ENOSYS);
}
@ -221,7 +249,7 @@ aufs4.16 standalone patch
ssize_t __kernel_write(struct file *file, const void *buf, size_t count, loff_t *pos)
{
@@ -579,6 +582,7 @@ ssize_t vfs_write(struct file *file, con
@@ -579,6 +582,7 @@ ssize_t vfs_write(struct file *file, const char __user *buf, size_t count, loff_
return ret;
}
@ -229,9 +257,11 @@ aufs4.16 standalone patch
static inline loff_t file_pos_read(struct file *file)
{
diff --git a/fs/splice.c b/fs/splice.c
index f617ab0..ec0ad02 100644
--- a/fs/splice.c
+++ b/fs/splice.c
@@ -850,6 +850,7 @@ long do_splice_from(struct pipe_inode_in
@@ -850,6 +850,7 @@ long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
return splice_write(pipe, out, ppos, len, flags);
}
@ -239,7 +269,7 @@ aufs4.16 standalone patch
/*
* Attempt to initiate a splice from a file to a pipe.
@@ -879,6 +880,7 @@ long do_splice_to(struct file *in, loff_
@@ -879,6 +880,7 @@ long do_splice_to(struct file *in, loff_t *ppos,
return splice_read(in, ppos, pipe, len, flags);
}
@ -247,9 +277,11 @@ aufs4.16 standalone patch
/**
* splice_direct_to_actor - splices data directly between two non-pipes
diff --git a/fs/sync.c b/fs/sync.c
index 2860782..ffd7ea4 100644
--- a/fs/sync.c
+++ b/fs/sync.c
@@ -39,6 +39,7 @@ int __sync_filesystem(struct super_block
@@ -39,6 +39,7 @@ int __sync_filesystem(struct super_block *sb, int wait)
sb->s_op->sync_fs(sb, wait);
return __sync_blockdev(sb->s_bdev, wait);
}
@ -257,9 +289,11 @@ aufs4.16 standalone patch
/*
* Write out and wait upon all dirty data associated with this
diff --git a/fs/xattr.c b/fs/xattr.c
index 61cd28b..35570cd 100644
--- a/fs/xattr.c
+++ b/fs/xattr.c
@@ -297,6 +297,7 @@ vfs_getxattr_alloc(struct dentry *dentry
@@ -297,6 +297,7 @@ vfs_getxattr_alloc(struct dentry *dentry, const char *name, char **xattr_value,
*xattr_value = value;
return error;
}
@ -267,9 +301,11 @@ aufs4.16 standalone patch
ssize_t
__vfs_getxattr(struct dentry *dentry, struct inode *inode, const char *name,
diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c
index 06e0d7a..6af91bd 100644
--- a/kernel/locking/lockdep.c
+++ b/kernel/locking/lockdep.c
@@ -151,6 +151,7 @@ inline struct lock_class *lockdep_hlock_
@@ -151,6 +151,7 @@ inline struct lock_class *lockdep_hlock_class(struct held_lock *hlock)
}
return lock_classes + hlock->class_idx - 1;
}
@ -277,6 +313,8 @@ aufs4.16 standalone patch
#define hlock_class(hlock) lockdep_hlock_class(hlock)
#ifdef CONFIG_LOCK_STAT
diff --git a/kernel/task_work.c b/kernel/task_work.c
index 0fef395..83fb1ec 100644
--- a/kernel/task_work.c
+++ b/kernel/task_work.c
@@ -116,3 +116,4 @@ void task_work_run(void)
@ -284,9 +322,11 @@ aufs4.16 standalone patch
}
}
+EXPORT_SYMBOL_GPL(task_work_run);
diff --git a/security/commoncap.c b/security/commoncap.c
index 1ce701f..a0d106e 100644
--- a/security/commoncap.c
+++ b/security/commoncap.c
@@ -1330,12 +1330,14 @@ int cap_mmap_addr(unsigned long addr)
@@ -1332,12 +1332,14 @@ int cap_mmap_addr(unsigned long addr)
}
return ret;
}
@ -301,6 +341,8 @@ aufs4.16 standalone patch
#ifdef CONFIG_SECURITY
diff --git a/security/device_cgroup.c b/security/device_cgroup.c
index c65b39b..e363d22 100644
--- a/security/device_cgroup.c
+++ b/security/device_cgroup.c
@@ -8,6 +8,7 @@
@ -311,14 +353,16 @@ aufs4.16 standalone patch
#include <linux/list.h>
#include <linux/uaccess.h>
#include <linux/seq_file.h>
@@ -824,3 +825,4 @@ int __devcgroup_check_permission(short t
@@ -824,3 +825,4 @@ int __devcgroup_check_permission(short type, u32 major, u32 minor,
return 0;
}
+EXPORT_SYMBOL_GPL(__devcgroup_check_permission);
diff --git a/security/security.c b/security/security.c
index 7bc2fde..6bd0468 100644
--- a/security/security.c
+++ b/security/security.c
@@ -537,6 +537,7 @@ int security_path_rmdir(const struct pat
@@ -537,6 +537,7 @@ int security_path_rmdir(const struct path *dir, struct dentry *dentry)
return 0;
return call_int_hook(path_rmdir, 0, dir, dentry);
}
@ -326,7 +370,7 @@ aufs4.16 standalone patch
int security_path_unlink(const struct path *dir, struct dentry *dentry)
{
@@ -553,6 +554,7 @@ int security_path_symlink(const struct p
@@ -553,6 +554,7 @@ int security_path_symlink(const struct path *dir, struct dentry *dentry,
return 0;
return call_int_hook(path_symlink, 0, dir, dentry, old_name);
}
@ -334,7 +378,7 @@ aufs4.16 standalone patch
int security_path_link(struct dentry *old_dentry, const struct path *new_dir,
struct dentry *new_dentry)
@@ -561,6 +563,7 @@ int security_path_link(struct dentry *ol
@@ -561,6 +563,7 @@ int security_path_link(struct dentry *old_dentry, const struct path *new_dir,
return 0;
return call_int_hook(path_link, 0, old_dentry, new_dir, new_dentry);
}
@ -342,7 +386,7 @@ aufs4.16 standalone patch
int security_path_rename(const struct path *old_dir, struct dentry *old_dentry,
const struct path *new_dir, struct dentry *new_dentry,
@@ -588,6 +591,7 @@ int security_path_truncate(const struct
@@ -588,6 +591,7 @@ int security_path_truncate(const struct path *path)
return 0;
return call_int_hook(path_truncate, 0, path);
}
@ -350,7 +394,7 @@ aufs4.16 standalone patch
int security_path_chmod(const struct path *path, umode_t mode)
{
@@ -595,6 +599,7 @@ int security_path_chmod(const struct pat
@@ -595,6 +599,7 @@ int security_path_chmod(const struct path *path, umode_t mode)
return 0;
return call_int_hook(path_chmod, 0, path, mode);
}
@ -358,7 +402,7 @@ aufs4.16 standalone patch
int security_path_chown(const struct path *path, kuid_t uid, kgid_t gid)
{
@@ -602,6 +607,7 @@ int security_path_chown(const struct pat
@@ -602,6 +607,7 @@ int security_path_chown(const struct path *path, kuid_t uid, kgid_t gid)
return 0;
return call_int_hook(path_chown, 0, path, uid, gid);
}
@ -366,7 +410,7 @@ aufs4.16 standalone patch
int security_path_chroot(const struct path *path)
{
@@ -687,6 +693,7 @@ int security_inode_readlink(struct dentr
@@ -687,6 +693,7 @@ int security_inode_readlink(struct dentry *dentry)
return 0;
return call_int_hook(inode_readlink, 0, dentry);
}
@ -374,7 +418,7 @@ aufs4.16 standalone patch
int security_inode_follow_link(struct dentry *dentry, struct inode *inode,
bool rcu)
@@ -702,6 +709,7 @@ int security_inode_permission(struct ino
@@ -702,6 +709,7 @@ int security_inode_permission(struct inode *inode, int mask)
return 0;
return call_int_hook(inode_permission, 0, inode, mask);
}
@ -382,7 +426,7 @@ aufs4.16 standalone patch
int security_inode_setattr(struct dentry *dentry, struct iattr *attr)
{
@@ -873,6 +881,7 @@ int security_file_permission(struct file
@@ -873,6 +881,7 @@ int security_file_permission(struct file *file, int mask)
return fsnotify_perm(file, mask);
}
@ -390,7 +434,7 @@ aufs4.16 standalone patch
int security_file_alloc(struct file *file)
{
@@ -932,6 +941,7 @@ int security_mmap_file(struct file *file
@@ -932,6 +941,7 @@ int security_mmap_file(struct file *file, unsigned long prot,
return ret;
return ima_file_mmap(file, prot);
}

View File

@ -0,0 +1,36 @@
From e1a9a4745fd5e6e61d57803659cd54fbe757a172 Mon Sep 17 00:00:00 2001
From: Jagan Teki <jagan@amarulasolutions.com>
Date: Fri, 1 Jun 2018 23:05:26 +0530
Subject: [PATCH 1/5] arm64: allwinner: a64: Add RTC clock to phandle 32kHz
external oscillator
Outside of SOC few chips need external clock source
through RTC example Wifi chip. So RTC clock nodes to
phandle 32kHz external oscillator.
prefix rtc- with clock-output-names defined in
dt-binding to avoid confusion with existing osc32k name.
Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
---
arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi | 3 +++
1 file changed, 3 insertions(+)
diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
index 1b2ef28c42bd..82516aec4153 100644
--- a/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
+++ b/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
@@ -634,6 +634,9 @@
reg = <0x01f00000 0x54>;
interrupts = <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>;
+ clock-output-names = "rtc-osc32k", "rtc-osc32k-out";
+ clocks = <&osc32k>;
+ #clock-cells = <1>;
};
r_intc: interrupt-controller@1f00c00 {
--
2.11.0

View File

@ -0,0 +1,64 @@
From 871b5352125c49a2d5f31db69baede43e003a532 Mon Sep 17 00:00:00 2001
From: Icenowy Zheng <icenowy@aosc.io>
Date: Tue, 5 Jun 2018 22:17:00 -0700
Subject: [PATCH 2/5] arm64: dts: allwinner: a64: add R_I2C controller
Allwinner A64 has a I2C controller, which is in the R_ MMIO zone and has
two groups of pinmuxes on PL bank, so it's called R_I2C.
Add support for this I2C controller and the pinmux which doesn't conflict
with RSB.
Signed-off-by: Icenowy Zheng <icenowy@aosc.io>
Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
---
arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
index 82516aec4153..1b31a3aaed5a 100644
--- a/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
+++ b/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
@@ -46,6 +46,7 @@
#include <dt-bindings/clock/sun8i-r-ccu.h>
#include <dt-bindings/interrupt-controller/arm-gic.h>
#include <dt-bindings/reset/sun50i-a64-ccu.h>
+#include <dt-bindings/reset/sun8i-r-ccu.h>
/ {
interrupt-parent = <&gic>;
@@ -658,6 +659,18 @@
#reset-cells = <1>;
};
+ r_i2c: i2c@1f02400 {
+ compatible = "allwinner,sun50i-a64-i2c",
+ "allwinner,sun6i-a31-i2c";
+ reg = <0x01f02400 0x400>;
+ interrupts = <GIC_SPI 44 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&r_ccu CLK_APB0_I2C>;
+ resets = <&r_ccu RST_APB0_I2C>;
+ status = "disabled";
+ #address-cells = <1>;
+ #size-cells = <0>;
+ };
+
r_pio: pinctrl@1f02c00 {
compatible = "allwinner,sun50i-a64-r-pinctrl";
reg = <0x01f02c00 0x400>;
@@ -669,6 +682,11 @@
interrupt-controller;
#interrupt-cells = <3>;
+ r_i2c_pins_a: i2c-a {
+ pins = "PL8", "PL9";
+ function = "s_i2c";
+ };
+
r_rsb_pins: rsb {
pins = "PL0", "PL1";
function = "s_rsb";
--
2.11.0

View File

@ -0,0 +1,99 @@
From b5df280bb16345875c0c1baf1db5607fde005395 Mon Sep 17 00:00:00 2001
From: Andre Przywara <andre.przywara@arm.com>
Date: Tue, 5 Jun 2018 22:17:01 -0700
Subject: [PATCH 3/5] arm64: dts: allwinner: a64: Add PWM controllers
The Allwinner A64 SoC features two PWM controllers, which are fully
compatible to the one used in the A13 and H3 chips.
Add the nodes for the devices (one for the "normal" PWM, the other for
the one in the CPUS domain) and the pins their outputs are connected to.
On the A64 the "normal" PWM is muxed together with one of the MDIO pins
used to communicate with the Ethernet PHY, so it won't be usable on many
boards. But the Pinebook laptop uses this pin for controlling the LCD
backlight.
On Pine64 the CPUS PWM pin however is routed to the "RPi2" header,
at the same location as the PWM pin on the RaspberryPi.
Tested on Pinebook and Teres-I
[vasily: fixed comment message as requested by Stefan Bruens, added default
muxing options to pwm and r_pwm nodes]
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
Tested-by: Harald Geyer <harald@ccbib.org>
Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
---
arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi | 32 +++++++++++++++++++++++++++
1 file changed, 32 insertions(+)
diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
index 1b31a3aaed5a..2777b2d02d77 100644
--- a/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
+++ b/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
@@ -365,6 +365,11 @@
bias-pull-up;
};
+ pwm_pin: pwm_pin {
+ pins = "PD22";
+ function = "pwm";
+ };
+
rmii_pins: rmii_pins {
pins = "PD10", "PD11", "PD13", "PD14", "PD17",
"PD18", "PD19", "PD20", "PD22", "PD23";
@@ -630,6 +635,17 @@
#interrupt-cells = <3>;
};
+ pwm: pwm@1c21400 {
+ compatible = "allwinner,sun50i-a64-pwm",
+ "allwinner,sun5i-a13-pwm";
+ reg = <0x01c21400 0x400>;
+ clocks = <&osc24M>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&pwm_pin>;
+ #pwm-cells = <3>;
+ status = "disabled";
+ };
+
rtc: rtc@1f00000 {
compatible = "allwinner,sun6i-a31-rtc";
reg = <0x01f00000 0x54>;
@@ -671,6 +687,17 @@
#size-cells = <0>;
};
+ r_pwm: pwm@1f03800 {
+ compatible = "allwinner,sun50i-a64-pwm",
+ "allwinner,sun5i-a13-pwm";
+ reg = <0x01f03800 0x400>;
+ clocks = <&osc24M>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&r_pwm_pin>;
+ #pwm-cells = <3>;
+ status = "disabled";
+ };
+
r_pio: pinctrl@1f02c00 {
compatible = "allwinner,sun50i-a64-r-pinctrl";
reg = <0x01f02c00 0x400>;
@@ -687,6 +714,11 @@
function = "s_i2c";
};
+ r_pwm_pin: pwm {
+ pins = "PL10";
+ function = "s_pwm";
+ };
+
r_rsb_pins: rsb {
pins = "PL0", "PL1";
function = "s_rsb";
--
2.11.0

View File

@ -0,0 +1,344 @@
From df35fbcfa3983c233f5fadaf8db18bfd10ac58b6 Mon Sep 17 00:00:00 2001
From: Icenowy Zheng <icenowy@aosc.io>
Date: Tue, 5 Jun 2018 22:17:02 -0700
Subject: [PATCH 4/5] arm64: dts: allwinner: add support for Pinebook
Pinebook is a A64-based laptop produced by Pine64, with the following
peripherals:
USB:
- Two external USB ports (one is directly connected to A64's OTG
controller, the other is under a internal hub connected to the host-only
controller.)
- USB HID keyboard and touchpad connected to the internal hub.
- USB UVC camera connected to the internal hub.
Power-related:
- A DC IN jack connected to AXP803's DCIN pin.
- A Li-Polymer battery connected to AXP803's battery pins.
Storage:
- An eMMC by Foresee on the main board (in the product revision of the
main board it's designed to be switchable).
- An external MicroSD card slot.
Display:
- An eDP LCD panel (1366x768) connected via an ANX6345 RGB-eDP bridge.
- A mini HDMI port.
Misc:
- A Hall sensor designed to detect the status of lid, connected to GPIO PL12.
- A headphone jack connected to the SoC's internal codec.
- A debug UART port muxed with headphone jack.
This commit adds basical support for it.
[vasily: squashed several commits into one, added simplefb node, added usbphy
to ehci0 and ohci0 nodes and other cosmetic changes to dts]
Signed-off-by: Icenowy Zheng <icenowy@aosc.io>
Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
---
arch/arm64/boot/dts/allwinner/Makefile | 1 +
.../boot/dts/allwinner/sun50i-a64-pinebook.dts | 280 +++++++++++++++++++++
2 files changed, 281 insertions(+)
create mode 100644 arch/arm64/boot/dts/allwinner/sun50i-a64-pinebook.dts
Index: linux-4.17.2/arch/arm64/boot/dts/allwinner/Makefile
===================================================================
--- linux-4.17.2.orig/arch/arm64/boot/dts/allwinner/Makefile
+++ linux-4.17.2/arch/arm64/boot/dts/allwinner/Makefile
@@ -4,6 +4,7 @@ dtb-$(CONFIG_ARCH_SUNXI) += sun50i-a64-n
dtb-$(CONFIG_ARCH_SUNXI) += sun50i-a64-olinuxino.dtb
dtb-$(CONFIG_ARCH_SUNXI) += sun50i-a64-orangepi-win.dtb
dtb-$(CONFIG_ARCH_SUNXI) += sun50i-a64-pine64-plus.dtb sun50i-a64-pine64.dtb
+dtb-$(CONFIG_ARCH_SUNXI) += sun50i-a64-pinebook.dtb
dtb-$(CONFIG_ARCH_SUNXI) += sun50i-a64-sopine-baseboard.dtb
dtb-$(CONFIG_ARCH_SUNXI) += sun50i-a64-teres-i.dtb
dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h5-orangepi-pc2.dtb
Index: linux-4.17.2/arch/arm64/boot/dts/allwinner/sun50i-a64-pinebook.dts
===================================================================
--- /dev/null
+++ linux-4.17.2/arch/arm64/boot/dts/allwinner/sun50i-a64-pinebook.dts
@@ -0,0 +1,280 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Copyright (C) 2017 Icenowy Zheng <icenowy@aosc.xyz>
+ * Copyright (C) 2018 Vasily Khoruzhick <anarsoul@gmail.com>
+ *
+ */
+
+/dts-v1/;
+
+#include "sun50i-a64.dtsi"
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/pwm/pwm.h>
+
+/ {
+ model = "Pinebook";
+ compatible = "pine64,pinebook", "allwinner,sun50i-a64";
+
+ aliases {
+ serial0 = &uart0;
+ ethernet0 = &rtl8723cs;
+ };
+
+ backlight: backlight {
+ compatible = "pwm-backlight";
+ pwms = <&pwm 0 50000 0>;
+ brightness-levels = <0 5 10 15 20 30 40 55 70 85 100>;
+ default-brightness-level = <2>;
+ enable-gpios = <&pio 3 23 GPIO_ACTIVE_HIGH>; /* PD23 */
+ };
+
+ chosen {
+ stdout-path = "serial0:115200n8";
+
+ framebuffer-lcd {
+ panel-supply = <&reg_dc1sw>;
+ dvdd25-supply = <&reg_dldo2>;
+ dvdd12-supply = <&reg_fldo1>;
+ };
+ };
+
+ gpio_keys {
+ compatible = "gpio-keys";
+
+ lid_switch {
+ label = "Lid Switch";
+ gpios = <&r_pio 0 12 GPIO_ACTIVE_LOW>; /* PL12 */
+ linux,input-type = <EV_SW>;
+ linux,code = <SW_LID>;
+ linux,can-disable;
+ };
+ };
+
+ reg_vcc3v3: vcc3v3 {
+ compatible = "regulator-fixed";
+ regulator-name = "vcc3v3";
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ };
+
+ wifi_pwrseq: wifi_pwrseq {
+ compatible = "mmc-pwrseq-simple";
+ reset-gpios = <&r_pio 0 2 GPIO_ACTIVE_LOW>; /* PL2 */
+ };
+};
+
+&ehci0 {
+ phys = <&usbphy 0>;
+ phy-names = "usb";
+ status = "okay";
+};
+
+&ehci1 {
+ status = "okay";
+};
+
+&mmc0 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&mmc0_pins>;
+ vmmc-supply = <&reg_dcdc1>;
+ cd-gpios = <&pio 5 6 GPIO_ACTIVE_HIGH>;
+ cd-inverted;
+ disable-wp;
+ bus-width = <4>;
+ status = "okay";
+};
+
+&mmc1 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&mmc1_pins>;
+ vmmc-supply = <&reg_dldo4>;
+ vqmmc-supply = <&reg_eldo1>;
+ mmc-pwrseq = <&wifi_pwrseq>;
+ bus-width = <4>;
+ non-removable;
+ status = "okay";
+
+ rtl8723cs: wifi@1 {
+ reg = <1>;
+ };
+};
+
+&mmc2 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&mmc2_pins>;
+ vmmc-supply = <&reg_dcdc1>;
+ vqmmc-supply = <&reg_eldo1>;
+ bus-width = <8>;
+ non-removable;
+ cap-mmc-hw-reset;
+ mmc-hs200-1_8v;
+ status = "okay";
+};
+
+&ohci0 {
+ phys = <&usbphy 0>;
+ phy-names = "usb";
+ status = "okay";
+};
+
+&ohci1 {
+ status = "okay";
+};
+
+&pwm {
+ status = "okay";
+};
+
+&r_rsb {
+ status = "okay";
+
+ axp803: pmic@3a3 {
+ compatible = "x-powers,axp803";
+ reg = <0x3a3>;
+ interrupt-parent = <&r_intc>;
+ interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
+ };
+};
+
+/* The ANX6345 eDP-bridge is on r_i2c */
+&r_i2c {
+ clock-frequency = <100000>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&r_i2c_pins_a>;
+ status = "okay";
+};
+
+#include "axp803.dtsi"
+
+&reg_aldo1 {
+ regulator-min-microvolt = <2800000>;
+ regulator-max-microvolt = <2800000>;
+ regulator-name = "vcc-csi";
+};
+
+&reg_aldo2 {
+ regulator-always-on;
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <3300000>;
+ regulator-name = "vcc-pl";
+};
+
+&reg_aldo3 {
+ regulator-always-on;
+ regulator-min-microvolt = <2700000>;
+ regulator-max-microvolt = <3300000>;
+ regulator-name = "vcc-pll-avcc";
+};
+
+&reg_dc1sw {
+ regulator-name = "vcc-lcd";
+};
+
+&reg_dcdc1 {
+ regulator-always-on;
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ regulator-name = "vcc-3v3";
+};
+
+&reg_dcdc2 {
+ regulator-always-on;
+ regulator-min-microvolt = <1000000>;
+ regulator-max-microvolt = <1300000>;
+ regulator-name = "vdd-cpux";
+};
+
+/* DCDC3 is polyphased with DCDC2 */
+
+&reg_dcdc5 {
+ regulator-always-on;
+ regulator-min-microvolt = <1200000>;
+ regulator-max-microvolt = <1200000>;
+ regulator-name = "vcc-dram";
+};
+
+&reg_dcdc6 {
+ regulator-always-on;
+ regulator-min-microvolt = <1100000>;
+ regulator-max-microvolt = <1100000>;
+ regulator-name = "vdd-sys";
+};
+
+&reg_dldo1 {
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ regulator-name = "vcc-hdmi";
+};
+
+&reg_dldo2 {
+ regulator-min-microvolt = <2500000>;
+ regulator-max-microvolt = <2500000>;
+ regulator-name = "vcc-edp";
+};
+
+&reg_dldo3 {
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ regulator-name = "avdd-csi";
+};
+
+&reg_dldo4 {
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ regulator-name = "vcc-wifi";
+};
+
+&reg_eldo1 {
+ regulator-always-on;
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ regulator-name = "cpvdd";
+};
+
+&reg_eldo3 {
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ regulator-name = "vdd-1v8-csi";
+};
+
+&reg_fldo1 {
+ regulator-min-microvolt = <1200000>;
+ regulator-max-microvolt = <1200000>;
+ regulator-name = "vcc-1v2-hsic";
+};
+
+&reg_fldo2 {
+ regulator-always-on;
+ regulator-min-microvolt = <1100000>;
+ regulator-max-microvolt = <1100000>;
+ regulator-name = "vdd-cpus";
+};
+
+&reg_ldo_io0 {
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ regulator-name = "vcc-usb";
+ status = "okay";
+};
+
+&reg_rtc_ldo {
+ regulator-name = "vcc-rtc";
+};
+
+&uart0 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&uart0_pins_a>;
+ status = "okay";
+};
+
+&usb_otg {
+ dr_mode = "host";
+};
+
+&usbphy {
+ usb0_vbus-supply = <&reg_ldo_io0>;
+ usb1_vbus-supply = <&reg_ldo_io0>;
+ status = "okay";
+};

View File

@ -0,0 +1,54 @@
From 1f1f5183981d70bf0950f8467772851a05eb9148 Mon Sep 17 00:00:00 2001
From: Icenowy Zheng <icenowy@aosc.io>
Date: Wed, 11 Apr 2018 22:16:41 +0800
Subject: [PATCH 5/5] arm64: dts: allwinner: a64: add SRAM controller device
tree node
Allwinner A64 has a SRAM controller, and in the device tree currently
we have a syscon node to enable EMAC driver to access the EMAC clock
register. As SRAM controller driver can now export regmap for this
register, replace the syscon node to the SRAM controller device node,
and let EMAC driver to acquire its EMAC clock regmap.
Signed-off-by: Icenowy Zheng <icenowy@aosc.io>
[wens@csie.org: Updated compatible string]
Acked-by: Maxime Ripard <maxime.ripard@bootlin.com>
Signed-off-by: Chen-Yu Tsai <wens@csie.org>
---
arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi | 19 +++++++++++++++++--
1 file changed, 17 insertions(+), 2 deletions(-)
diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
index 2777b2d02d77..ff2ddde1e117 100644
--- a/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
+++ b/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
@@ -170,9 +170,24 @@
ranges;
syscon: syscon@1c00000 {
- compatible = "allwinner,sun50i-a64-system-controller",
- "syscon";
+ compatible = "allwinner,sun50i-a64-system-control";
reg = <0x01c00000 0x1000>;
+ #address-cells = <1>;
+ #size-cells = <1>;
+ ranges;
+
+ sram_c: sram@18000 {
+ compatible = "mmio-sram";
+ reg = <0x00018000 0x28000>;
+ #address-cells = <1>;
+ #size-cells = <1>;
+ ranges = <0 0x00018000 0x28000>;
+
+ de2_sram: sram-section@0 {
+ compatible = "allwinner,sun50i-a64-sram-c";
+ reg = <0x0000 0x28000>;
+ };
+ };
};
dma: dma-controller@1c02000 {
--
2.11.0

View File

@ -75,6 +75,12 @@ features/x86/x86-make-x32-syscall-support-conditional.patch
# Add support for Raspberry PI 3b+
features/armhf/ARM-dts-bcm2837-Add-Raspberry-Pi-3-B.patch
features/arm64/arm64-dts-broadcom-Add-reference-to-Raspberry-Pi-3-B.patch
# Add device-tree for Pinebook from linux next-20180625
features/arm64/pinebook/0001-arm64-allwinner-a64-Add-RTC-clock-to-phandle-32kHz-e.patch
features/arm64/pinebook/0002-arm64-dts-allwinner-a64-add-R_I2C-controller.patch
features/arm64/pinebook/0003-arm64-dts-allwinner-a64-Add-PWM-controllers.patch
features/arm64/pinebook/0004-arm64-dts-allwinner-add-support-for-Pinebook.patch
features/arm64/pinebook/0005-arm64-dts-allwinner-a64-add-SRAM-controller-device-t.patch
# Miscellaneous bug fixes
bugfix/all/kbuild-use-nostdinc-in-compile-tests.patch
@ -85,7 +91,6 @@ bugfix/all/kbuild-include-addtree-remove-quotes-before-matching-path.patch
debian/revert-objtool-fix-config_stack_validation-y-warning.patch
bugfix/all/i40e-build-for-64-bit-targets-only.patch
bugfix/all/ib-fix-rdma_rxe-and-infiniband_rdmavt-dependencies-f.patch
bugfix/all/hv_netvsc-Fix-a-network-regression-after-ifdown-ifup.patch
# Miscellaneous features
@ -125,6 +130,7 @@ features/all/lockdown/arm64-add-kernel-config-option-to-lock-down-when.patch
# Security fixes
debian/i386-686-pae-pci-set-pci-nobios-by-default.patch
bugfix/x86/virt-vbox-Only-copy_from_user-the-request-header-onc.patch
# Fix exported symbol versions
bugfix/all/module-disable-matching-missing-version-crc.patch