diff options
author | Natanael Copa <ncopa@alpinelinux.org> | 2014-07-11 13:02:58 +0000 |
---|---|---|
committer | Natanael Copa <ncopa@alpinelinux.org> | 2014-07-11 14:03:25 +0000 |
commit | 1f76f329f714fbe31401e959d9b98cf508e13fa8 (patch) | |
tree | d8e1a89fbe14a5decd4f38d7871a9e7f420a4e74 /main/linux-grsec | |
parent | 1276848968556385c29acf2a9b821f7de9ee2f15 (diff) | |
download | aports-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/APKBUILD | 18 | ||||
-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; |