aboutsummaryrefslogtreecommitdiffstats
path: root/main/linux-grsec
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2014-07-11 13:02:58 +0000
committerNatanael Copa <ncopa@alpinelinux.org>2014-07-11 14:03:25 +0000
commit1f76f329f714fbe31401e959d9b98cf508e13fa8 (patch)
treed8e1a89fbe14a5decd4f38d7871a9e7f420a4e74 /main/linux-grsec
parent1276848968556385c29acf2a9b821f7de9ee2f15 (diff)
downloadaports-1f76f329f714fbe31401e959d9b98cf508e13fa8.tar.bz2
aports-1f76f329f714fbe31401e959d9b98cf508e13fa8.tar.xz
main/linux-grsec: upgrade to 3.14.12
Diffstat (limited to 'main/linux-grsec')
-rw-r--r--main/linux-grsec/APKBUILD18
-rw-r--r--main/linux-grsec/grsecurity-3.0-3.14.12-201407100035.patch (renamed from main/linux-grsec/grsecurity-3.0-3.14.11-201407072045.patch)313
2 files changed, 157 insertions, 174 deletions
diff --git a/main/linux-grsec/APKBUILD b/main/linux-grsec/APKBUILD
index 5cdf615c70..6e68d2636f 100644
--- a/main/linux-grsec/APKBUILD
+++ b/main/linux-grsec/APKBUILD
@@ -2,12 +2,12 @@
_flavor=grsec
pkgname=linux-${_flavor}
-pkgver=3.14.11
+pkgver=3.14.12
case $pkgver in
*.*.*) _kernver=${pkgver%.*};;
*.*) _kernver=${pkgver};;
esac
-pkgrel=2
+pkgrel=0
pkgdesc="Linux kernel with grsecurity"
url=http://grsecurity.net
depends="mkinitfs linux-firmware"
@@ -17,7 +17,7 @@ _config=${config:-kernelconfig.${CARCH}}
install=
source="http://ftp.kernel.org/pub/linux/kernel/v3.x/linux-$_kernver.tar.xz
http://ftp.kernel.org/pub/linux/kernel/v3.x/patch-$pkgver.xz
- grsecurity-3.0-3.14.11-201407072045.patch
+ grsecurity-3.0-3.14.12-201407100035.patch
fix-memory-map-for-PIE-applications.patch
imx6q-no-unclocked-sleep.patch
@@ -165,24 +165,24 @@ dev() {
}
md5sums="b621207b3f6ecbb67db18b13258f8ea8 linux-3.14.tar.xz
-5cf3d2cb0f552c2c6faf829b6630e84f patch-3.14.11.xz
-53571da447f6543f8741e8c998a01e4f grsecurity-3.0-3.14.11-201407072045.patch
+89a5af1f3609d0c27e63fea298dd80ed patch-3.14.12.xz
+e8b97fb869a7c8267f2601b6a2c4ce0d grsecurity-3.0-3.14.12-201407100035.patch
c6a4ae7e8ca6159e1631545515805216 fix-memory-map-for-PIE-applications.patch
1a307fc1d63231bf01d22493a4f14378 imx6q-no-unclocked-sleep.patch
83f0e1b1d2413bcb2dddcf87a10dc42b kernelconfig.x86
0b07cc6ece6232c631e2d55f2dd860d6 kernelconfig.x86_64
887980f603af6a1ac6f67edeae2e0d07 kernelconfig.armhf"
sha256sums="61558aa490855f42b6340d1a1596be47454909629327c49a5e4e10268065dffa linux-3.14.tar.xz
-3f290fb547cb4afe23bf520c8c863b6d1e090814f4a6fa0080ed51b4afd9a409 patch-3.14.11.xz
-b9f3eee998c12873b3b4263522c4faaf1c3a1536b513d553377d4b4dc07b9bb5 grsecurity-3.0-3.14.11-201407072045.patch
+b50d9569bc2e47f3be996fdbcb043e7eace9c92cbcb77d825dd1493f2d399475 patch-3.14.12.xz
+cda8726421ef4038b4883212efd1efd044f430929dfb74f29f1dc5f4e618a26d grsecurity-3.0-3.14.12-201407100035.patch
500f3577310be52e87b9fecdc2e9c4ca43210fd97d69089f9005d484563f74c7 fix-memory-map-for-PIE-applications.patch
21179fbb22a5b74af0a609350ae1a170e232908572b201d02e791d2ce0a685d3 imx6q-no-unclocked-sleep.patch
5431d66b9c1af413b4dc6f91de00a6e830e3d780a79c5f85d2d8b013b151c169 kernelconfig.x86
9f420cee74896fd3578c3b342188438ac5d6b0f327586c108367abcfc3f1e6ff kernelconfig.x86_64
ab3e07f85f4dd090b2d22b485881031bd479a1c34fc9a2e9707cb8cdebfcfda4 kernelconfig.armhf"
sha512sums="5730d83a7a81134c1e77c0bf89e42dee4f8251ad56c1ac2be20c59e26fdfaa7bea55f277e7af156b637f22e1584914a46089af85039177cb43485089c74ac26e linux-3.14.tar.xz
-fb4dca2cf832b04896f4c052ea84eab501c459bf27030b81a88b288d09d320b86254b7e995ae1931c6083ae4c88f62e4ba1976ce2254d88645f9e95a253d19e4 patch-3.14.11.xz
-c02ef0f5df3231c3cdb9ebe4aae360ec950a2f6cb6ef11eccaf9736abe71c90cf4a163324ff515aaa1279a57ab70481cb9323dc5896563c716a5fd8461306632 grsecurity-3.0-3.14.11-201407072045.patch
+d5be9e74c530f1b48fd7fb38c91d375fe60c1d71e165b0cd7a39f49e7b79c0261c8170607e6fd67ef154273601fb5a8f078ee6deb1f973c180e39762634126bf patch-3.14.12.xz
+8b1d8048bd84697c729fcfbfb4c1356773cbdd73e47747db922ce1eff676c399208354c2bfe100f7548a296c33a6d294c6d5d99079a1dad6d195690a36f0b94b grsecurity-3.0-3.14.12-201407100035.patch
4665c56ae1bbac311f9205d64918e84ee8b01d47d6e2396ff6b8adfb10aada7f7254531ce62e31edbb65c2a54a830f09ad05d314dfcd75d6272f4068945ad7c7 fix-memory-map-for-PIE-applications.patch
87d1ad59732f265a5b0db54490dc1762c14ea4b868e7eb1aedc3ce57b48046de7bbc08cf5cfcf6f1380fa84063b0edb16ba3d5e3c5670be9bbb229275c88b221 imx6q-no-unclocked-sleep.patch
03f817222bf5812fa8363542e4ab108767212c67efe3994ea8fe9d0751215d9c3f166ce41de41f9070c855db6c04606828dc61265a1738920b984a24077347c4 kernelconfig.x86
diff --git a/main/linux-grsec/grsecurity-3.0-3.14.11-201407072045.patch b/main/linux-grsec/grsecurity-3.0-3.14.12-201407100035.patch
index a883f759f7..3a245d4407 100644
--- a/main/linux-grsec/grsecurity-3.0-3.14.11-201407072045.patch
+++ b/main/linux-grsec/grsecurity-3.0-3.14.12-201407100035.patch
@@ -287,7 +287,7 @@ index 7116fda..d8ed6e8 100644
pcd. [PARIDE]
diff --git a/Makefile b/Makefile
-index f1bbec5..d78810b 100644
+index 13d8f32..a7a7b9b 100644
--- a/Makefile
+++ b/Makefile
@@ -244,8 +244,9 @@ CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
@@ -28955,7 +28955,7 @@ index 3927528..fc19971 100644
vcpu->arch.regs_avail = ~((1 << VCPU_REGS_RIP) | (1 << VCPU_REGS_RSP)
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
-index ee0c3b5..773bb94 100644
+index 8fbd1a7..e046eef 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -1776,8 +1776,8 @@ static int xen_hvm_config(struct kvm_vcpu *vcpu, u64 data)
@@ -36346,10 +36346,10 @@ index af00795..2bb8105 100644
#define XCHAL_ICACHE_SIZE 32768 /* I-cache size in bytes or 0 */
#define XCHAL_DCACHE_SIZE 32768 /* D-cache size in bytes or 0 */
diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c
-index 4e491d9..c8e18e4 100644
+index dd0dd2d..e59db49 100644
--- a/block/blk-cgroup.c
+++ b/block/blk-cgroup.c
-@@ -812,7 +812,7 @@ static void blkcg_css_free(struct cgroup_subsys_state *css)
+@@ -809,7 +809,7 @@ static void blkcg_css_free(struct cgroup_subsys_state *css)
static struct cgroup_subsys_state *
blkcg_css_alloc(struct cgroup_subsys_state *parent_css)
{
@@ -36358,7 +36358,7 @@ index 4e491d9..c8e18e4 100644
struct blkcg *blkcg;
if (!parent_css) {
-@@ -826,7 +826,7 @@ blkcg_css_alloc(struct cgroup_subsys_state *parent_css)
+@@ -823,7 +823,7 @@ blkcg_css_alloc(struct cgroup_subsys_state *parent_css)
blkcg->cfq_weight = CFQ_WEIGHT_DEFAULT;
blkcg->cfq_leaf_weight = CFQ_WEIGHT_DEFAULT;
@@ -39664,7 +39664,7 @@ index 18d4091..434be15 100644
}
EXPORT_SYMBOL_GPL(od_unregister_powersave_bias_handler);
diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c
-index de9ef4a..0b29fc9 100644
+index 6d98c37..a592321 100644
--- a/drivers/cpufreq/intel_pstate.c
+++ b/drivers/cpufreq/intel_pstate.c
@@ -125,10 +125,10 @@ struct pstate_funcs {
@@ -39680,7 +39680,7 @@ index de9ef4a..0b29fc9 100644
struct perf_limits {
int no_turbo;
-@@ -529,7 +529,7 @@ static void intel_pstate_set_pstate(struct cpudata *cpu, int pstate)
+@@ -526,7 +526,7 @@ static void intel_pstate_set_pstate(struct cpudata *cpu, int pstate)
cpu->pstate.current_pstate = pstate;
@@ -39689,7 +39689,7 @@ index de9ef4a..0b29fc9 100644
}
static inline void intel_pstate_pstate_increase(struct cpudata *cpu, int steps)
-@@ -551,12 +551,12 @@ static void intel_pstate_get_cpu_pstates(struct cpudata *cpu)
+@@ -548,12 +548,12 @@ static void intel_pstate_get_cpu_pstates(struct cpudata *cpu)
{
sprintf(cpu->name, "Intel 2nd generation core");
@@ -39707,7 +39707,7 @@ index de9ef4a..0b29fc9 100644
intel_pstate_set_pstate(cpu, cpu->pstate.min_pstate);
}
-@@ -838,9 +838,9 @@ static int intel_pstate_msrs_not_valid(void)
+@@ -835,9 +835,9 @@ static int intel_pstate_msrs_not_valid(void)
rdmsrl(MSR_IA32_APERF, aperf);
rdmsrl(MSR_IA32_MPERF, mperf);
@@ -39720,7 +39720,7 @@ index de9ef4a..0b29fc9 100644
return -ENODEV;
rdmsrl(MSR_IA32_APERF, tmp);
-@@ -854,7 +854,7 @@ static int intel_pstate_msrs_not_valid(void)
+@@ -851,7 +851,7 @@ static int intel_pstate_msrs_not_valid(void)
return 0;
}
@@ -39729,7 +39729,7 @@ index de9ef4a..0b29fc9 100644
{
pid_params.sample_rate_ms = policy->sample_rate_ms;
pid_params.p_gain_pct = policy->p_gain_pct;
-@@ -866,11 +866,7 @@ static void copy_pid_params(struct pstate_adjust_policy *policy)
+@@ -863,11 +863,7 @@ static void copy_pid_params(struct pstate_adjust_policy *policy)
static void copy_cpu_funcs(struct pstate_funcs *funcs)
{
@@ -42021,10 +42021,10 @@ index 8a8725c2..afed796 100644
marker = list_first_entry(&queue->head,
struct vmw_marker, head);
diff --git a/drivers/gpu/vga/vga_switcheroo.c b/drivers/gpu/vga/vga_switcheroo.c
-index ec0ae2d..dc0780b 100644
+index 6866448..2ad2b34 100644
--- a/drivers/gpu/vga/vga_switcheroo.c
+++ b/drivers/gpu/vga/vga_switcheroo.c
-@@ -643,7 +643,7 @@ static int vga_switcheroo_runtime_resume(struct device *dev)
+@@ -644,7 +644,7 @@ static int vga_switcheroo_runtime_resume(struct device *dev)
/* this version is for the case where the power switch is separate
to the device being powered down. */
@@ -42033,7 +42033,7 @@ index ec0ae2d..dc0780b 100644
{
/* copy over all the bus versions */
if (dev->bus && dev->bus->pm) {
-@@ -688,7 +688,7 @@ static int vga_switcheroo_runtime_resume_hdmi_audio(struct device *dev)
+@@ -689,7 +689,7 @@ static int vga_switcheroo_runtime_resume_hdmi_audio(struct device *dev)
return ret;
}
@@ -44601,7 +44601,7 @@ index 8c53b09..f1fb2b0 100644
void dm_uevent_add(struct mapped_device *md, struct list_head *elist)
diff --git a/drivers/md/md.c b/drivers/md/md.c
-index 8b013f8..93eed41 100644
+index 73aedcb..424968a 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -194,10 +194,10 @@ EXPORT_SYMBOL_GPL(bio_clone_mddev);
@@ -46374,18 +46374,6 @@ index cf49c22..971b133 100644
struct attribute **attributes;
struct sm_sysfs_attribute *vendor_attribute;
char *vendor;
-diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
-index 91ec8cd..562ff5f 100644
---- a/drivers/net/bonding/bond_main.c
-+++ b/drivers/net/bonding/bond_main.c
-@@ -4552,6 +4552,7 @@ static void __exit bonding_exit(void)
-
- bond_netlink_fini();
- unregister_pernet_subsys(&bond_net_ops);
-+ rtnl_link_unregister(&bond_link_ops);
-
- #ifdef CONFIG_NET_POLL_CONTROLLER
- /*
diff --git a/drivers/net/bonding/bond_netlink.c b/drivers/net/bonding/bond_netlink.c
index 70651f8..7eb1bdf 100644
--- a/drivers/net/bonding/bond_netlink.c
@@ -46888,18 +46876,6 @@ index 3381c4f..dea5fd5 100644
.notifier_call = macvtap_device_event,
};
-diff --git a/drivers/net/phy/mdio-bitbang.c b/drivers/net/phy/mdio-bitbang.c
-index daec9b0..6428fcb 100644
---- a/drivers/net/phy/mdio-bitbang.c
-+++ b/drivers/net/phy/mdio-bitbang.c
-@@ -234,6 +234,7 @@ void free_mdio_bitbang(struct mii_bus *bus)
- struct mdiobb_ctrl *ctrl = bus->priv;
-
- module_put(ctrl->ops->owner);
-+ mdiobus_unregister(bus);
- mdiobus_free(bus);
- }
- EXPORT_SYMBOL(free_mdio_bitbang);
diff --git a/drivers/net/ppp/ppp_generic.c b/drivers/net/ppp/ppp_generic.c
index 72ff14b..11d442d 100644
--- a/drivers/net/ppp/ppp_generic.c
@@ -47797,10 +47773,10 @@ index ea7e70c..bc0c45f 100644
data->sku_cap_band_24GHz_enable ? "" : "NOT", "enabled",
data->sku_cap_band_52GHz_enable ? "" : "NOT", "enabled",
diff --git a/drivers/net/wireless/iwlwifi/pcie/trans.c b/drivers/net/wireless/iwlwifi/pcie/trans.c
-index 8d42fd9..d923d65 100644
+index 16be0c0..eb0bc12 100644
--- a/drivers/net/wireless/iwlwifi/pcie/trans.c
+++ b/drivers/net/wireless/iwlwifi/pcie/trans.c
-@@ -1365,7 +1365,7 @@ static ssize_t iwl_dbgfs_interrupt_write(struct file *file,
+@@ -1371,7 +1371,7 @@ static ssize_t iwl_dbgfs_interrupt_write(struct file *file,
struct isr_statistics *isr_stats = &trans_pcie->isr_stats;
char buf[8];
@@ -47809,7 +47785,7 @@ index 8d42fd9..d923d65 100644
u32 reset_flag;
memset(buf, 0, sizeof(buf));
-@@ -1386,7 +1386,7 @@ static ssize_t iwl_dbgfs_csr_write(struct file *file,
+@@ -1392,7 +1392,7 @@ static ssize_t iwl_dbgfs_csr_write(struct file *file,
{
struct iwl_trans *trans = file->private_data;
char buf[8];
@@ -47871,7 +47847,7 @@ index 5028557..91cf394 100644
tmp = cpu_to_le32(rts_threshold);
diff --git a/drivers/net/wireless/rt2x00/rt2x00.h b/drivers/net/wireless/rt2x00/rt2x00.h
-index e3b885d..7a7de2f 100644
+index 5d45a1a..6f5f041 100644
--- a/drivers/net/wireless/rt2x00/rt2x00.h
+++ b/drivers/net/wireless/rt2x00/rt2x00.h
@@ -375,7 +375,7 @@ struct rt2x00_intf {
@@ -51436,7 +51412,7 @@ index 2ebe47b..3205833 100644
dlci->modem_rx = 0;
diff --git a/drivers/tty/n_tty.c b/drivers/tty/n_tty.c
-index e36d1f5..9938e3e 100644
+index 28ac3f3..9019b3b 100644
--- a/drivers/tty/n_tty.c
+++ b/drivers/tty/n_tty.c
@@ -115,7 +115,7 @@ struct n_tty_data {
@@ -51448,7 +51424,7 @@ index e36d1f5..9938e3e 100644
size_t line_start;
/* protected by output lock */
-@@ -2519,6 +2519,7 @@ void n_tty_inherit_ops(struct tty_ldisc_ops *ops)
+@@ -2520,6 +2520,7 @@ void n_tty_inherit_ops(struct tty_ldisc_ops *ops)
{
*ops = tty_ldisc_N_TTY;
ops->owner = NULL;
@@ -51642,7 +51618,7 @@ index a260cde..6b2b5ce 100644
/* This is only available if kgdboc is a built in for early debugging */
static int __init kgdboc_early_init(char *opt)
diff --git a/drivers/tty/serial/msm_serial.c b/drivers/tty/serial/msm_serial.c
-index b5d779c..3622cfe 100644
+index c0f2b3e..7e3f80c 100644
--- a/drivers/tty/serial/msm_serial.c
+++ b/drivers/tty/serial/msm_serial.c
@@ -897,7 +897,7 @@ static struct uart_driver msm_uart_driver = {
@@ -56582,10 +56558,10 @@ index ce25d75..dc09eeb 100644
&data);
if (!inode) {
diff --git a/fs/aio.c b/fs/aio.c
-index 19e7d95..af5756a 100644
+index e609e15..c9fcd97 100644
--- a/fs/aio.c
+++ b/fs/aio.c
-@@ -375,7 +375,7 @@ static int aio_setup_ring(struct kioctx *ctx)
+@@ -380,7 +380,7 @@ static int aio_setup_ring(struct kioctx *ctx)
size += sizeof(struct io_event) * nr_events;
nr_pages = PFN_UP(size);
@@ -59908,52 +59884,10 @@ index 62f024c..a6a1a61 100644
/* locality groups */
diff --git a/fs/ext4/indirect.c b/fs/ext4/indirect.c
-index 594009f..c30cbe2 100644
+index e6574d7..c30cbe2 100644
--- a/fs/ext4/indirect.c
+++ b/fs/ext4/indirect.c
-@@ -389,7 +389,13 @@ static int ext4_alloc_branch(handle_t *handle, struct inode *inode,
- return 0;
- failed:
- for (; i >= 0; i--) {
-- if (i != indirect_blks && branch[i].bh)
-+ /*
-+ * We want to ext4_forget() only freshly allocated indirect
-+ * blocks. Buffer for new_blocks[i-1] is at branch[i].bh and
-+ * buffer at branch[0].bh is indirect block / inode already
-+ * existing before ext4_alloc_branch() was called.
-+ */
-+ if (i > 0 && i != indirect_blks && branch[i].bh)
- ext4_forget(handle, 1, inode, branch[i].bh,
- branch[i].bh->b_blocknr);
- ext4_free_blocks(handle, inode, NULL, new_blocks[i],
-@@ -1312,16 +1318,24 @@ static int free_hole_blocks(handle_t *handle, struct inode *inode,
- blk = *i_data;
- if (level > 0) {
- ext4_lblk_t first2;
-+ ext4_lblk_t count2;
-+
- bh = sb_bread(inode->i_sb, le32_to_cpu(blk));
- if (!bh) {
- EXT4_ERROR_INODE_BLOCK(inode, le32_to_cpu(blk),
- "Read failure");
- return -EIO;
- }
-- first2 = (first > offset) ? first - offset : 0;
-+ if (first > offset) {
-+ first2 = first - offset;
-+ count2 = count;
-+ } else {
-+ first2 = 0;
-+ count2 = count - (offset - first);
-+ }
- ret = free_hole_blocks(handle, inode, bh,
- (__le32 *)bh->b_data, level - 1,
-- first2, count - offset,
-+ first2, count2,
- inode->i_sb->s_blocksize >> 2);
- if (ret) {
- brelse(bh);
-@@ -1331,8 +1345,8 @@ static int free_hole_blocks(handle_t *handle, struct inode *inode,
+@@ -1345,8 +1345,8 @@ static int free_hole_blocks(handle_t *handle, struct inode *inode,
if (level == 0 ||
(bh && all_zeroes((__le32 *)bh->b_data,
(__le32 *)bh->b_data + addr_per_block))) {
@@ -62841,10 +62775,10 @@ index 15f9d98..082c625 100644
void nfs_fattr_init(struct nfs_fattr *fattr)
diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c
-index 9a914e8..e89c0ea 100644
+index f23a6ca..730ddcc 100644
--- a/fs/nfsd/nfs4proc.c
+++ b/fs/nfsd/nfs4proc.c
-@@ -1178,7 +1178,7 @@ struct nfsd4_operation {
+@@ -1169,7 +1169,7 @@ struct nfsd4_operation {
nfsd4op_rsize op_rsize_bop;
stateid_getter op_get_currentstateid;
stateid_setter op_set_currentstateid;
@@ -62854,10 +62788,10 @@ index 9a914e8..e89c0ea 100644
static struct nfsd4_operation nfsd4_ops[];
diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
-index bc11bf6..324b058 100644
+index 8657335..cd3e37f 100644
--- a/fs/nfsd/nfs4xdr.c
+++ b/fs/nfsd/nfs4xdr.c
-@@ -1531,7 +1531,7 @@ nfsd4_decode_notsupp(struct nfsd4_compoundargs *argp, void *p)
+@@ -1542,7 +1542,7 @@ nfsd4_decode_notsupp(struct nfsd4_compoundargs *argp, void *p)
typedef __be32(*nfsd4_dec)(struct nfsd4_compoundargs *argp, void *);
@@ -64644,10 +64578,10 @@ index d4a3574..b421ce9 100644
seq_putc(m, '\n');
diff --git a/fs/proc/proc_net.c b/fs/proc/proc_net.c
-index 4677bb7..94067cd 100644
+index 4677bb7..dad3045 100644
--- a/fs/proc/proc_net.c
+++ b/fs/proc/proc_net.c
-@@ -23,6 +23,7 @@
+@@ -23,9 +23,27 @@
#include <linux/nsproxy.h>
#include <net/net_namespace.h>
#include <linux/seq_file.h>
@@ -64655,7 +64589,27 @@ index 4677bb7..94067cd 100644
#include "internal.h"
-@@ -36,6 +37,8 @@ static struct net *get_proc_net(const struct inode *inode)
++#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
++static struct seq_operations *ipv6_seq_ops_addr;
++
++void register_ipv6_seq_ops_addr(struct seq_operations *addr)
++{
++ ipv6_seq_ops_addr = addr;
++}
++
++void unregister_ipv6_seq_ops_addr(void)
++{
++ ipv6_seq_ops_addr = NULL;
++}
++
++EXPORT_SYMBOL_GPL(register_ipv6_seq_ops_addr);
++EXPORT_SYMBOL_GPL(unregister_ipv6_seq_ops_addr);
++#endif
++
+ static inline struct net *PDE_NET(struct proc_dir_entry *pde)
+ {
+ return pde->parent->data;
+@@ -36,6 +54,8 @@ static struct net *get_proc_net(const struct inode *inode)
return maybe_get_net(PDE_NET(PDE(inode)));
}
@@ -64664,18 +64618,22 @@ index 4677bb7..94067cd 100644
int seq_open_net(struct inode *ino, struct file *f,
const struct seq_operations *ops, int size)
{
-@@ -44,6 +47,10 @@ int seq_open_net(struct inode *ino, struct file *f,
+@@ -44,6 +64,14 @@ int seq_open_net(struct inode *ino, struct file *f,
BUG_ON(size < sizeof(*p));
+ /* only permit access to /proc/net/dev */
-+ if (ops != &dev_seq_ops && gr_proc_is_restricted())
++ if (
++#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
++ ops != ipv6_seq_ops_addr &&
++#endif
++ ops != &dev_seq_ops && gr_proc_is_restricted())
+ return -EACCES;
+
net = get_proc_net(ino);
if (net == NULL)
return -ENXIO;
-@@ -66,6 +73,9 @@ int single_open_net(struct inode *inode, struct file *file,
+@@ -66,6 +94,9 @@ int single_open_net(struct inode *inode, struct file *file,
int err;
struct net *net;
@@ -85955,7 +85913,7 @@ index 0c9dc86..a891393 100644
s.version = AUDIT_VERSION_LATEST;
s.backlog_wait_time = audit_backlog_wait_time;
diff --git a/kernel/auditsc.c b/kernel/auditsc.c
-index 37e6216..3604797 100644
+index 619b58d..e58d957 100644
--- a/kernel/auditsc.c
+++ b/kernel/auditsc.c
@@ -1954,7 +1954,7 @@ int auditsc_get_stamp(struct audit_context *ctx,
@@ -90868,7 +90826,7 @@ index c0a58be..784c618 100644
if (!retval) {
if (old_rlim)
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
-index aae21e8..58d8c9a 100644
+index c1b26e1..bc7b50d 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -94,7 +94,6 @@
@@ -90908,7 +90866,7 @@ index aae21e8..58d8c9a 100644
#endif
/* this is needed for the proc_doulongvec_minmax of vm_dirty_bytes */
-@@ -182,10 +180,8 @@ static int proc_taint(struct ctl_table *table, int write,
+@@ -181,10 +179,8 @@ static int proc_taint(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp, loff_t *ppos);
#endif
@@ -90919,7 +90877,7 @@ index aae21e8..58d8c9a 100644
static int proc_dointvec_minmax_coredump(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp, loff_t *ppos);
-@@ -216,6 +212,8 @@ static int sysrq_sysctl_handler(ctl_table *table, int write,
+@@ -215,6 +211,8 @@ static int sysrq_sysctl_handler(ctl_table *table, int write,
#endif
@@ -90928,7 +90886,7 @@ index aae21e8..58d8c9a 100644
static struct ctl_table kern_table[];
static struct ctl_table vm_table[];
static struct ctl_table fs_table[];
-@@ -230,6 +228,20 @@ extern struct ctl_table epoll_table[];
+@@ -229,6 +227,20 @@ extern struct ctl_table epoll_table[];
int sysctl_legacy_va_layout;
#endif
@@ -90949,7 +90907,7 @@ index aae21e8..58d8c9a 100644
/* The default sysctl tables: */
static struct ctl_table sysctl_base_table[] = {
-@@ -278,6 +290,22 @@ static int max_extfrag_threshold = 1000;
+@@ -277,6 +289,22 @@ static int max_extfrag_threshold = 1000;
#endif
static struct ctl_table kern_table[] = {
@@ -90972,7 +90930,7 @@ index aae21e8..58d8c9a 100644
{
.procname = "sched_child_runs_first",
.data = &sysctl_sched_child_runs_first,
-@@ -640,7 +668,7 @@ static struct ctl_table kern_table[] = {
+@@ -639,7 +667,7 @@ static struct ctl_table kern_table[] = {
.data = &modprobe_path,
.maxlen = KMOD_PATH_LEN,
.mode = 0644,
@@ -90981,7 +90939,7 @@ index aae21e8..58d8c9a 100644
},
{
.procname = "modules_disabled",
-@@ -807,16 +835,20 @@ static struct ctl_table kern_table[] = {
+@@ -806,16 +834,20 @@ static struct ctl_table kern_table[] = {
.extra1 = &zero,
.extra2 = &one,
},
@@ -91003,7 +90961,7 @@ index aae21e8..58d8c9a 100644
{
.procname = "ngroups_max",
.data = &ngroups_max,
-@@ -1061,10 +1093,17 @@ static struct ctl_table kern_table[] = {
+@@ -1060,10 +1092,17 @@ static struct ctl_table kern_table[] = {
*/
{
.procname = "perf_event_paranoid",
@@ -91024,7 +90982,7 @@ index aae21e8..58d8c9a 100644
},
{
.procname = "perf_event_mlock_kb",
-@@ -1335,6 +1374,13 @@ static struct ctl_table vm_table[] = {
+@@ -1334,6 +1373,13 @@ static struct ctl_table vm_table[] = {
.proc_handler = proc_dointvec_minmax,
.extra1 = &zero,
},
@@ -91038,7 +90996,7 @@ index aae21e8..58d8c9a 100644
#else
{
.procname = "nr_trim_pages",
-@@ -1799,6 +1845,16 @@ int proc_dostring(struct ctl_table *table, int write,
+@@ -1798,6 +1844,16 @@ int proc_dostring(struct ctl_table *table, int write,
buffer, lenp, ppos);
}
@@ -91055,7 +91013,7 @@ index aae21e8..58d8c9a 100644
static size_t proc_skip_spaces(char **buf)
{
size_t ret;
-@@ -1904,6 +1960,8 @@ static int proc_put_long(void __user **buf, size_t *size, unsigned long val,
+@@ -1903,6 +1959,8 @@ static int proc_put_long(void __user **buf, size_t *size, unsigned long val,
len = strlen(tmp);
if (len > *size)
len = *size;
@@ -91064,7 +91022,7 @@ index aae21e8..58d8c9a 100644
if (copy_to_user(*buf, tmp, len))
return -EFAULT;
*size -= len;
-@@ -2068,7 +2126,7 @@ int proc_dointvec(struct ctl_table *table, int write,
+@@ -2067,7 +2125,7 @@ int proc_dointvec(struct ctl_table *table, int write,
static int proc_taint(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp, loff_t *ppos)
{
@@ -91073,7 +91031,7 @@ index aae21e8..58d8c9a 100644
unsigned long tmptaint = get_taint();
int err;
-@@ -2096,7 +2154,6 @@ static int proc_taint(struct ctl_table *table, int write,
+@@ -2095,7 +2153,6 @@ static int proc_taint(struct ctl_table *table, int write,
return err;
}
@@ -91081,7 +91039,7 @@ index aae21e8..58d8c9a 100644
static int proc_dointvec_minmax_sysadmin(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp, loff_t *ppos)
{
-@@ -2105,7 +2162,6 @@ static int proc_dointvec_minmax_sysadmin(struct ctl_table *table, int write,
+@@ -2104,7 +2161,6 @@ static int proc_dointvec_minmax_sysadmin(struct ctl_table *table, int write,
return proc_dointvec_minmax(table, write, buffer, lenp, ppos);
}
@@ -91089,7 +91047,7 @@ index aae21e8..58d8c9a 100644
struct do_proc_dointvec_minmax_conv_param {
int *min;
-@@ -2652,6 +2708,12 @@ int proc_dostring(struct ctl_table *table, int write,
+@@ -2651,6 +2707,12 @@ int proc_dostring(struct ctl_table *table, int write,
return -ENOSYS;
}
@@ -91102,7 +91060,7 @@ index aae21e8..58d8c9a 100644
int proc_dointvec(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp, loff_t *ppos)
{
-@@ -2708,5 +2770,6 @@ EXPORT_SYMBOL(proc_dointvec_minmax);
+@@ -2707,5 +2769,6 @@ EXPORT_SYMBOL(proc_dointvec_minmax);
EXPORT_SYMBOL(proc_dointvec_userhz_jiffies);
EXPORT_SYMBOL(proc_dointvec_ms_jiffies);
EXPORT_SYMBOL(proc_dostring);
@@ -91698,10 +91656,10 @@ index fc4da2d..f3e800b 100644
*data_page = bpage;
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
-index f0831c22..4b19cb3 100644
+index fd21e60..eb47c25 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
-@@ -3400,7 +3400,7 @@ int trace_keep_overwrite(struct tracer *tracer, u32 mask, int set)
+@@ -3398,7 +3398,7 @@ int trace_keep_overwrite(struct tracer *tracer, u32 mask, int set)
return 0;
}
@@ -92848,7 +92806,7 @@ index b32b70c..e512eb0 100644
set_page_address(page, (void *)vaddr);
diff --git a/mm/hugetlb.c b/mm/hugetlb.c
-index 06a9bc0..cfbba83 100644
+index 30dd626..e0a6729 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -2070,15 +2070,17 @@ static int hugetlb_sysctl_handler_common(bool obey_mempolicy,
@@ -92893,7 +92851,7 @@ index 06a9bc0..cfbba83 100644
if (ret)
goto out;
-@@ -2600,6 +2604,27 @@ static int unmap_ref_private(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2615,6 +2619,27 @@ static int unmap_ref_private(struct mm_struct *mm, struct vm_area_struct *vma,
return 1;
}
@@ -92921,7 +92879,7 @@ index 06a9bc0..cfbba83 100644
/*
* Hugetlb_cow() should be called with page lock of the original hugepage held.
* Called with hugetlb_instantiation_mutex held and pte_page locked so we
-@@ -2716,6 +2741,11 @@ retry_avoidcopy:
+@@ -2731,6 +2756,11 @@ retry_avoidcopy:
make_huge_pte(vma, new_page, 1));
page_remove_rmap(old_page);
hugepage_add_new_anon_rmap(new_page, vma, address);
@@ -92933,7 +92891,7 @@ index 06a9bc0..cfbba83 100644
/* Make the old page be freed below */
new_page = old_page;
}
-@@ -2880,6 +2910,10 @@ retry:
+@@ -2895,6 +2925,10 @@ retry:
&& (vma->vm_flags & VM_SHARED)));
set_huge_pte_at(mm, address, ptep, new_pte);
@@ -92944,7 +92902,7 @@ index 06a9bc0..cfbba83 100644
if ((flags & FAULT_FLAG_WRITE) && !(vma->vm_flags & VM_SHARED)) {
/* Optimization, do the COW without a second fault */
ret = hugetlb_cow(mm, vma, address, ptep, new_pte, page, ptl);
-@@ -2910,6 +2944,10 @@ int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2925,6 +2959,10 @@ int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma,
static DEFINE_MUTEX(hugetlb_instantiation_mutex);
struct hstate *h = hstate_vma(vma);
@@ -92955,7 +92913,7 @@ index 06a9bc0..cfbba83 100644
address &= huge_page_mask(h);
ptep = huge_pte_offset(mm, address);
-@@ -2923,6 +2961,26 @@ int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2938,6 +2976,26 @@ int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma,
VM_FAULT_SET_HINDEX(hstate_index(h));
}
@@ -93258,7 +93216,7 @@ index 33365e9..2234ef9 100644
}
unset_migratetype_isolate(page, MIGRATE_MOVABLE);
diff --git a/mm/memory.c b/mm/memory.c
-index 49e930f..90d7ec5 100644
+index 2121d8b8..fa1095a 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -403,6 +403,7 @@ static inline void free_pmd_range(struct mmu_gather *tlb, pud_t *pud,
@@ -93831,7 +93789,7 @@ index 49e930f..90d7ec5 100644
pgd = pgd_offset(mm, address);
pud = pud_alloc(mm, pgd, address);
if (!pud)
-@@ -3839,6 +4080,23 @@ int __pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address)
+@@ -3836,6 +4077,23 @@ int __pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address)
spin_unlock(&mm->page_table_lock);
return 0;
}
@@ -93855,7 +93813,7 @@ index 49e930f..90d7ec5 100644
#endif /* __PAGETABLE_PUD_FOLDED */
#ifndef __PAGETABLE_PMD_FOLDED
-@@ -3869,6 +4127,30 @@ int __pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long address)
+@@ -3866,6 +4124,30 @@ int __pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long address)
spin_unlock(&mm->page_table_lock);
return 0;
}
@@ -93886,7 +93844,7 @@ index 49e930f..90d7ec5 100644
#endif /* __PAGETABLE_PMD_FOLDED */
#if !defined(__HAVE_ARCH_GATE_AREA)
-@@ -3882,7 +4164,7 @@ static int __init gate_vma_init(void)
+@@ -3879,7 +4161,7 @@ static int __init gate_vma_init(void)
gate_vma.vm_start = FIXADDR_USER_START;
gate_vma.vm_end = FIXADDR_USER_END;
gate_vma.vm_flags = VM_READ | VM_MAYREAD | VM_EXEC | VM_MAYEXEC;
@@ -93895,7 +93853,7 @@ index 49e930f..90d7ec5 100644
return 0;
}
-@@ -4016,8 +4298,8 @@ out:
+@@ -4013,8 +4295,8 @@ out:
return ret;
}
@@ -93906,7 +93864,7 @@ index 49e930f..90d7ec5 100644
{
resource_size_t phys_addr;
unsigned long prot = 0;
-@@ -4043,8 +4325,8 @@ EXPORT_SYMBOL_GPL(generic_access_phys);
+@@ -4040,8 +4322,8 @@ EXPORT_SYMBOL_GPL(generic_access_phys);
* Access another process' address space as given in mm. If non-NULL, use the
* given task for page fault accounting.
*/
@@ -93917,7 +93875,7 @@ index 49e930f..90d7ec5 100644
{
struct vm_area_struct *vma;
void *old_buf = buf;
-@@ -4052,7 +4334,7 @@ static int __access_remote_vm(struct task_struct *tsk, struct mm_struct *mm,
+@@ -4049,7 +4331,7 @@ static int __access_remote_vm(struct task_struct *tsk, struct mm_struct *mm,
down_read(&mm->mmap_sem);
/* ignore errors, just check how much was successfully transferred */
while (len) {
@@ -93926,7 +93884,7 @@ index 49e930f..90d7ec5 100644
void *maddr;
struct page *page = NULL;
-@@ -4111,8 +4393,8 @@ static int __access_remote_vm(struct task_struct *tsk, struct mm_struct *mm,
+@@ -4108,8 +4390,8 @@ static int __access_remote_vm(struct task_struct *tsk, struct mm_struct *mm,
*
* The caller must hold a reference on @mm.
*/
@@ -93937,7 +93895,7 @@ index 49e930f..90d7ec5 100644
{
return __access_remote_vm(NULL, mm, addr, buf, len, write);
}
-@@ -4122,11 +4404,11 @@ int access_remote_vm(struct mm_struct *mm, unsigned long addr,
+@@ -4119,11 +4401,11 @@ int access_remote_vm(struct mm_struct *mm, unsigned long addr,
* Source/target buffer must be kernel space,
* Do not walk the page table directly, use get_user_pages
*/
@@ -93953,10 +93911,10 @@ index 49e930f..90d7ec5 100644
mm = get_task_mm(tsk);
if (!mm)
diff --git a/mm/mempolicy.c b/mm/mempolicy.c
-index 56224d9..a74c77e 100644
+index 9c6288a..b0ea97e 100644
--- a/mm/mempolicy.c
+++ b/mm/mempolicy.c
-@@ -750,6 +750,10 @@ static int mbind_range(struct mm_struct *mm, unsigned long start,
+@@ -747,6 +747,10 @@ static int mbind_range(struct mm_struct *mm, unsigned long start,
unsigned long vmstart;
unsigned long vmend;
@@ -93967,7 +93925,7 @@ index 56224d9..a74c77e 100644
vma = find_vma(mm, start);
if (!vma || vma->vm_start > start)
return -EFAULT;
-@@ -793,6 +797,16 @@ static int mbind_range(struct mm_struct *mm, unsigned long start,
+@@ -790,6 +794,16 @@ static int mbind_range(struct mm_struct *mm, unsigned long start,
err = vma_replace_policy(vma, new_pol);
if (err)
goto out;
@@ -93984,7 +93942,7 @@ index 56224d9..a74c77e 100644
}
out:
-@@ -1256,6 +1270,17 @@ static long do_mbind(unsigned long start, unsigned long len,
+@@ -1253,6 +1267,17 @@ static long do_mbind(unsigned long start, unsigned long len,
if (end < start)
return -EINVAL;
@@ -94002,7 +93960,7 @@ index 56224d9..a74c77e 100644
if (end == start)
return 0;
-@@ -1484,8 +1509,7 @@ SYSCALL_DEFINE4(migrate_pages, pid_t, pid, unsigned long, maxnode,
+@@ -1478,8 +1503,7 @@ SYSCALL_DEFINE4(migrate_pages, pid_t, pid, unsigned long, maxnode,
*/
tcred = __task_cred(task);
if (!uid_eq(cred->euid, tcred->suid) && !uid_eq(cred->euid, tcred->uid) &&
@@ -94012,7 +93970,7 @@ index 56224d9..a74c77e 100644
rcu_read_unlock();
err = -EPERM;
goto out_put;
-@@ -1516,6 +1540,15 @@ SYSCALL_DEFINE4(migrate_pages, pid_t, pid, unsigned long, maxnode,
+@@ -1510,6 +1534,15 @@ SYSCALL_DEFINE4(migrate_pages, pid_t, pid, unsigned long, maxnode,
goto out;
}
@@ -95784,7 +95742,7 @@ index d013dba..d5ae30d 100644
unsigned long bg_thresh,
unsigned long dirty,
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
-index 4b5d4f6..56dfb0a 100644
+index 7e7f947..254d009 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -61,6 +61,7 @@
@@ -95795,7 +95753,7 @@ index 4b5d4f6..56dfb0a 100644
#include <asm/sections.h>
#include <asm/tlbflush.h>
-@@ -354,7 +355,7 @@ out:
+@@ -355,7 +356,7 @@ out:
* This usage means that zero-order pages may not be compound.
*/
@@ -95804,7 +95762,7 @@ index 4b5d4f6..56dfb0a 100644
{
__free_pages_ok(page, compound_order(page));
}
-@@ -728,6 +729,10 @@ static bool free_pages_prepare(struct page *page, unsigned int order)
+@@ -729,6 +730,10 @@ static bool free_pages_prepare(struct page *page, unsigned int order)
int i;
int bad = 0;
@@ -95815,7 +95773,7 @@ index 4b5d4f6..56dfb0a 100644
trace_mm_page_free(page, order);
kmemcheck_free_shadow(page, order);
-@@ -744,6 +749,12 @@ static bool free_pages_prepare(struct page *page, unsigned int order)
+@@ -745,6 +750,12 @@ static bool free_pages_prepare(struct page *page, unsigned int order)
debug_check_no_obj_freed(page_address(page),
PAGE_SIZE << order);
}
@@ -95828,7 +95786,7 @@ index 4b5d4f6..56dfb0a 100644
arch_free_page(page, order);
kernel_map_pages(page, 1 << order, 0);
-@@ -766,6 +777,20 @@ static void __free_pages_ok(struct page *page, unsigned int order)
+@@ -767,6 +778,20 @@ static void __free_pages_ok(struct page *page, unsigned int order)
local_irq_restore(flags);
}
@@ -95849,7 +95807,7 @@ index 4b5d4f6..56dfb0a 100644
void __init __free_pages_bootmem(struct page *page, unsigned int order)
{
unsigned int nr_pages = 1 << order;
-@@ -781,6 +806,19 @@ void __init __free_pages_bootmem(struct page *page, unsigned int order)
+@@ -782,6 +807,19 @@ void __init __free_pages_bootmem(struct page *page, unsigned int order)
__ClearPageReserved(p);
set_page_count(p, 0);
@@ -95869,7 +95827,7 @@ index 4b5d4f6..56dfb0a 100644
page_zone(page)->managed_pages += nr_pages;
set_page_refcounted(page);
__free_pages(page, order);
-@@ -897,8 +935,10 @@ static int prep_new_page(struct page *page, int order, gfp_t gfp_flags)
+@@ -910,8 +948,10 @@ static int prep_new_page(struct page *page, int order, gfp_t gfp_flags)
arch_alloc_page(page, order);
kernel_map_pages(page, 1 << order, 1);
@@ -95880,7 +95838,7 @@ index 4b5d4f6..56dfb0a 100644
if (order && (gfp_flags & __GFP_COMP))
prep_compound_page(page, order);
-@@ -2401,7 +2441,7 @@ static void reset_alloc_batches(struct zonelist *zonelist,
+@@ -2414,7 +2454,7 @@ static void reset_alloc_batches(struct zonelist *zonelist,
continue;
mod_zone_page_state(zone, NR_ALLOC_BATCH,
high_wmark_pages(zone) - low_wmark_pages(zone) -
@@ -95889,7 +95847,7 @@ index 4b5d4f6..56dfb0a 100644
}
}
-@@ -6577,4 +6617,4 @@ void dump_page(struct page *page, char *reason)
+@@ -6605,4 +6645,4 @@ void dump_page(struct page *page, char *reason)
{
dump_page_badflags(page, reason, 0);
}
@@ -96227,7 +96185,7 @@ index 1f18c9d..b550bab 100644
return -ENOMEM;
diff --git a/mm/slab.c b/mm/slab.c
-index b264214..83872cd 100644
+index 6dd8d5f..2482a6d 100644
--- a/mm/slab.c
+++ b/mm/slab.c
@@ -300,10 +300,12 @@ static void kmem_cache_node_init(struct kmem_cache_node *parent)
@@ -96256,7 +96214,7 @@ index b264214..83872cd 100644
#endif
#if DEBUG
-@@ -403,7 +407,7 @@ static inline void *index_to_obj(struct kmem_cache *cache, struct page *page,
+@@ -436,7 +440,7 @@ static inline void *index_to_obj(struct kmem_cache *cache, struct page *page,
* reciprocal_divide(offset, cache->reciprocal_buffer_size)
*/
static inline unsigned int obj_to_index(const struct kmem_cache *cache,
@@ -96265,7 +96223,7 @@ index b264214..83872cd 100644
{
u32 offset = (obj - page->s_mem);
return reciprocal_divide(offset, cache->reciprocal_buffer_size);
-@@ -1489,12 +1493,12 @@ void __init kmem_cache_init(void)
+@@ -1536,12 +1540,12 @@ void __init kmem_cache_init(void)
*/
kmalloc_caches[INDEX_AC] = create_kmalloc_cache("kmalloc-ac",
@@ -96280,7 +96238,7 @@ index b264214..83872cd 100644
slab_early_init = 0;
-@@ -3428,6 +3432,21 @@ static inline void __cache_free(struct kmem_cache *cachep, void *objp,
+@@ -3484,6 +3488,21 @@ static inline void __cache_free(struct kmem_cache *cachep, void *objp,
struct array_cache *ac = cpu_cache_get(cachep);
check_irq_off();
@@ -96302,7 +96260,7 @@ index b264214..83872cd 100644
kmemleak_free_recursive(objp, cachep->flags);
objp = cache_free_debugcheck(cachep, objp, caller);
-@@ -3656,6 +3675,7 @@ void kfree(const void *objp)
+@@ -3712,6 +3731,7 @@ void kfree(const void *objp)
if (unlikely(ZERO_OR_NULL_PTR(objp)))
return;
@@ -96310,7 +96268,7 @@ index b264214..83872cd 100644
local_irq_save(flags);
kfree_debugcheck(objp);
c = virt_to_cache(objp);
-@@ -4097,14 +4117,22 @@ void slabinfo_show_stats(struct seq_file *m, struct kmem_cache *cachep)
+@@ -4153,14 +4173,22 @@ void slabinfo_show_stats(struct seq_file *m, struct kmem_cache *cachep)
}
/* cpu stats */
{
@@ -96337,7 +96295,7 @@ index b264214..83872cd 100644
#endif
}
-@@ -4334,13 +4362,69 @@ static const struct file_operations proc_slabstats_operations = {
+@@ -4381,13 +4409,69 @@ static const struct file_operations proc_slabstats_operations = {
static int __init slab_proc_init(void)
{
#ifdef CONFIG_DEBUG_SLAB_LEAK
@@ -98160,7 +98118,7 @@ index 6afa3b4..7a14180 100644
if (test_bit(CONF_STATE2_DEVICE, &chan->conf_state) &&
rfc.mode != chan->mode)
diff --git a/net/bluetooth/l2cap_sock.c b/net/bluetooth/l2cap_sock.c
-index d4b7702..7122922 100644
+index 27ae841..e5a8343 100644
--- a/net/bluetooth/l2cap_sock.c
+++ b/net/bluetooth/l2cap_sock.c
@@ -625,7 +625,8 @@ static int l2cap_sock_setsockopt_old(struct socket *sock, int optname,
@@ -98201,7 +98159,7 @@ index d4b7702..7122922 100644
if (copy_from_user((char *) &sec, optval, len)) {
err = -EFAULT;
break;
-@@ -857,7 +859,7 @@ static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname,
+@@ -852,7 +854,7 @@ static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname,
pwr.force_active = BT_POWER_FORCE_ACTIVE_ON;
@@ -100603,7 +100561,7 @@ index e1a6393..f634ce5 100644
return -ENOMEM;
}
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
-index 6c7fa08..285086c 100644
+index 6c7fa08..8a31430 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -598,7 +598,7 @@ static int inet6_netconf_dump_devconf(struct sk_buff *skb,
@@ -100624,7 +100582,32 @@ index 6c7fa08..285086c 100644
if (ops->ndo_do_ioctl) {
mm_segment_t oldfs = get_fs();
-@@ -4146,7 +4146,7 @@ static int inet6_dump_addr(struct sk_buff *skb, struct netlink_callback *cb,
+@@ -3528,16 +3528,23 @@ static const struct file_operations if6_fops = {
+ .release = seq_release_net,
+ };
+
++extern void register_ipv6_seq_ops_addr(struct seq_operations *addr);
++extern void unregister_ipv6_seq_ops_addr(void);
++
+ static int __net_init if6_proc_net_init(struct net *net)
+ {
+- if (!proc_create("if_inet6", S_IRUGO, net->proc_net, &if6_fops))
++ register_ipv6_seq_ops_addr(&if6_seq_ops);
++ if (!proc_create("if_inet6", S_IRUGO, net->proc_net, &if6_fops)) {
++ unregister_ipv6_seq_ops_addr();
+ return -ENOMEM;
++ }
+ return 0;
+ }
+
+ static void __net_exit if6_proc_net_exit(struct net *net)
+ {
+ remove_proc_entry("if_inet6", net->proc_net);
++ unregister_ipv6_seq_ops_addr();
+ }
+
+ static struct pernet_operations if6_proc_net_ops = {
+@@ -4146,7 +4153,7 @@ static int inet6_dump_addr(struct sk_buff *skb, struct netlink_callback *cb,
s_ip_idx = ip_idx = cb->args[2];
rcu_read_lock();
@@ -100633,7 +100616,7 @@ index 6c7fa08..285086c 100644
for (h = s_h; h < NETDEV_HASHENTRIES; h++, s_idx = 0) {
idx = 0;
head = &net->dev_index_head[h];
-@@ -4758,7 +4758,7 @@ static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifp)
+@@ -4758,7 +4765,7 @@ static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifp)
dst_free(&ifp->rt->dst);
break;
}
@@ -100642,7 +100625,7 @@ index 6c7fa08..285086c 100644
rt_genid_bump_ipv6(net);
}
-@@ -4779,7 +4779,7 @@ int addrconf_sysctl_forward(struct ctl_table *ctl, int write,
+@@ -4779,7 +4786,7 @@ int addrconf_sysctl_forward(struct ctl_table *ctl, int write,
int *valp = ctl->data;
int val = *valp;
loff_t pos = *ppos;
@@ -100651,7 +100634,7 @@ index 6c7fa08..285086c 100644
int ret;
/*
-@@ -4864,7 +4864,7 @@ int addrconf_sysctl_disable(struct ctl_table *ctl, int write,
+@@ -4864,7 +4871,7 @@ int addrconf_sysctl_disable(struct ctl_table *ctl, int write,
int *valp = ctl->data;
int val = *valp;
loff_t pos = *ppos;