diff options
author | Natanael Copa <ncopa@alpinelinux.org> | 2013-12-05 08:30:16 +0000 |
---|---|---|
committer | Natanael Copa <ncopa@alpinelinux.org> | 2013-12-05 08:51:58 +0000 |
commit | 2f7a72b00d39dbf3fb2376e6604ef2e6e67d11f6 (patch) | |
tree | 76a8e64e51e426732b1cbe3ba02be6138fed3278 | |
parent | 8b87404cfc0b92a143ccccb7bb115e028f63e7af (diff) | |
download | aports-2f7a72b00d39dbf3fb2376e6604ef2e6e67d11f6.tar.bz2 aports-2f7a72b00d39dbf3fb2376e6604ef2e6e67d11f6.tar.xz |
main/linux-grsec: upgrade to 3.10.22
-rw-r--r-- | main/linux-grsec/APKBUILD | 14 | ||||
-rw-r--r-- | main/linux-grsec/grsecurity-2.9.1-3.10.22-unofficial.patch (renamed from main/linux-grsec/grsecurity-2.9.1-3.10.21-unofficial.patch) | 302 |
2 files changed, 158 insertions, 158 deletions
diff --git a/main/linux-grsec/APKBUILD b/main/linux-grsec/APKBUILD index f3f8d1adc..1a5f127e4 100644 --- a/main/linux-grsec/APKBUILD +++ b/main/linux-grsec/APKBUILD @@ -2,7 +2,7 @@ _flavor=grsec pkgname=linux-${_flavor} -pkgver=3.10.21 +pkgver=3.10.22 case $pkgver in *.*.*) _kernver=${pkgver%.*};; *.*) _kernver=${pkgver};; @@ -151,8 +151,8 @@ dev() { } md5sums="4f25cd5bec5f8d5a7d935b3f2ccb8481 linux-3.10.tar.xz -0d7fd255ad4357b2fde3747163ef8bad patch-3.10.21.xz -b3496a5c601613e715a5b95580503467 grsecurity-2.9.1-3.10.21-unofficial.patch +a618186bdb6f5b38dc831875b0d3a1cb patch-3.10.22.xz +86c74e12d4219d397d8fdb3e59dbab30 grsecurity-2.9.1-3.10.22-unofficial.patch a16f11b12381efb3bec79b9bfb329836 0001-net-inform-NETDEV_CHANGE-callbacks-which-flags-were-.patch 656ae7b10dd2f18dbfa1011041d08d60 0002-arp-flush-arp-cache-on-IFF_NOARP-change.patch aa454ffb96428586447775c21449e284 0003-ipv4-properly-refresh-rtable-entries-on-pmtu-redirec.patch @@ -164,8 +164,8 @@ b3c0153d53e508e03d73b94d15b24a96 sysctl_lxc.patch cb5c938dccbee36cfb8bb7ee3546b8af kernelconfig.x86 daa81b89f18254155ac33c5239abf3a4 kernelconfig.x86_64" sha256sums="df27fa92d27a9c410bfe6c4a89f141638500d7eadcca5cce578954efc2ad3544 linux-3.10.tar.xz -245ae9f97ae4017a231d6bbecfe596429fefe029bb044818e570aadea96fb1a3 patch-3.10.21.xz -c738ab0b2b021c01f0477ad2ab17e4d1b2226634df5c0e71493ddf8f97e53d2d grsecurity-2.9.1-3.10.21-unofficial.patch +9c889789a1ed733d97c7e34ca67c8c4c3afd69791a4219f842ef7913b24c9115 patch-3.10.22.xz +cc3d9d1dd9976e2df2278eb8a656026916b35f05e5b1f042d212ce89d9841c1a grsecurity-2.9.1-3.10.22-unofficial.patch 6af3757ac36a6cd3cda7b0a71b08143726383b19261294a569ad7f4042c72df3 0001-net-inform-NETDEV_CHANGE-callbacks-which-flags-were-.patch dc8e82108615657f1fb9d641efd42255a5761c06edde1b00a41ae0d314d548f0 0002-arp-flush-arp-cache-on-IFF_NOARP-change.patch 0985caa0f3ee8ed0959aeaa4214f5f8057ae8e61d50dcae39194912d31e14892 0003-ipv4-properly-refresh-rtable-entries-on-pmtu-redirec.patch @@ -177,8 +177,8 @@ fc613ac466610b866b721c41836fd5bfb2d4b75bceb67972dc6369d7f62ff47e 0006-ipv4-use- 3e6c4101bfb90b6a30173ef81cd0d0bea51d6a995fc045ca67db7fed271d969d kernelconfig.x86 da67ef700372d080bffb12a86f0a16c987dc79e18fdfb1a88d2704660239e5f0 kernelconfig.x86_64" sha512sums="5fb109fcbd59bf3dffc911b853894f0a84afa75151368f783a1252c5ff60c7a1504de216c0012be446df983e2dea400ad8eeed3ce04f24dc61d0ef76c174dc35 linux-3.10.tar.xz -f4e97e5c564673dd30cf403d3c87ec6ed5a41a2ee60abea765c482b5e77b18ecf68697d400ce4b7addf230f65d0c1c83a36383c9548665a0227bbbb71572531d patch-3.10.21.xz -7d26eb703bc66a1f78d2716dce791f356f77e5de8e99cc26410be0f760da912f0b17fe2e1b2ae7308673d8afc9fa96bb87ceacf840db89da90d8d814a4bddfa8 grsecurity-2.9.1-3.10.21-unofficial.patch +bb62ecf2467aa7543b191ea3e7749fa37f5bddefc5726e6ca7ff4ce1c98e2bb88effbd52af5ea6e42b638d54b1b845fe0b62150866c100a9773dd3d81c9cee8d patch-3.10.22.xz +33daf2b324ecaa55dcabc35a48f1bfc0966aa55b5ffecbacd198c006dcf93aaa91fa1fe46451e562c15a380cc12cccb84d4b426ecc799556cd48bea12a2eab73 grsecurity-2.9.1-3.10.22-unofficial.patch 81e78593288e8b0fd2c03ea9fc1450323887707f087e911f172450a122bc9b591ee83394836789730d951aeec13d0b75a64e1c05f04364abf8f80d883ddc4a02 0001-net-inform-NETDEV_CHANGE-callbacks-which-flags-were-.patch 51ecb15b669f6a82940a13a38939116e003bf5dfd24496771c8279e907b72adcc63d607f0340a2940d757e12ddadb7d45c7af78ae311d284935a6296dbcac00c 0002-arp-flush-arp-cache-on-IFF_NOARP-change.patch 57d0a8bd35d19cf657ded58efe24517d2252aec6984040713ba173a34edb5887ececaa2985076bc6a149eaa57639fd98a042c1c2d226ed4ad8dd5ed0e230717e 0003-ipv4-properly-refresh-rtable-entries-on-pmtu-redirec.patch diff --git a/main/linux-grsec/grsecurity-2.9.1-3.10.21-unofficial.patch b/main/linux-grsec/grsecurity-2.9.1-3.10.22-unofficial.patch index c9028ba6a..4550f0d67 100644 --- a/main/linux-grsec/grsecurity-2.9.1-3.10.21-unofficial.patch +++ b/main/linux-grsec/grsecurity-2.9.1-3.10.22-unofficial.patch @@ -281,7 +281,7 @@ index 2fe6e76..889ee23 100644 pcd. [PARIDE] diff --git a/Makefile b/Makefile -index c0635fb..d6af7ff 100644 +index 001188c..5f48732 100644 --- a/Makefile +++ b/Makefile @@ -241,8 +241,9 @@ CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \ @@ -2370,7 +2370,7 @@ index 60d3b73..e5a0f22 100644 EXPORT_SYMBOL(__get_user_1); EXPORT_SYMBOL(__get_user_2); diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S -index d43c7e5..257c050 100644 +index 32640ae..7034750 100644 --- a/arch/arm/kernel/entry-armv.S +++ b/arch/arm/kernel/entry-armv.S @@ -47,6 +47,87 @@ @@ -2502,7 +2502,7 @@ index d43c7e5..257c050 100644 SPFIX( addeq r2, r2, #4 ) str r3, [sp, #-4]! @ save the "real" r0 copied @ from the exception stack -@@ -316,6 +410,9 @@ ENDPROC(__pabt_svc) +@@ -317,6 +411,9 @@ ENDPROC(__pabt_svc) .macro usr_entry UNWIND(.fnstart ) UNWIND(.cantunwind ) @ don't unwind the user space @@ -2512,7 +2512,7 @@ index d43c7e5..257c050 100644 sub sp, sp, #S_FRAME_SIZE ARM( stmib sp, {r1 - r12} ) THUMB( stmia sp, {r0 - r12} ) -@@ -357,7 +454,8 @@ ENDPROC(__pabt_svc) +@@ -358,7 +455,8 @@ ENDPROC(__pabt_svc) .endm .macro kuser_cmpxchg_check @@ -2522,7 +2522,7 @@ index d43c7e5..257c050 100644 #ifndef CONFIG_MMU #warning "NPTL on non MMU needs fixing" #else -@@ -414,7 +512,9 @@ __und_usr: +@@ -415,7 +513,9 @@ __und_usr: tst r3, #PSR_T_BIT @ Thumb mode? bne __und_usr_thumb sub r4, r2, #4 @ ARM instr at LR - 4 @@ -2532,7 +2532,7 @@ index d43c7e5..257c050 100644 #ifdef CONFIG_CPU_ENDIAN_BE8 rev r0, r0 @ little endian instruction #endif -@@ -449,10 +549,14 @@ __und_usr_thumb: +@@ -450,10 +550,14 @@ __und_usr_thumb: */ .arch armv6t2 #endif @@ -2547,7 +2547,7 @@ index d43c7e5..257c050 100644 add r2, r2, #2 @ r2 is PC + 2, make it PC + 4 str r2, [sp, #S_PC] @ it's a 2x16bit instr, update orr r0, r0, r5, lsl #16 -@@ -481,7 +585,8 @@ ENDPROC(__und_usr) +@@ -482,7 +586,8 @@ ENDPROC(__und_usr) */ .pushsection .fixup, "ax" .align 2 @@ -2557,7 +2557,7 @@ index d43c7e5..257c050 100644 .popsection .pushsection __ex_table,"a" .long 1b, 4b -@@ -690,7 +795,7 @@ ENTRY(__switch_to) +@@ -691,7 +796,7 @@ ENTRY(__switch_to) THUMB( stmia ip!, {r4 - sl, fp} ) @ Store most regs on stack THUMB( str sp, [ip], #4 ) THUMB( str lr, [ip], #4 ) @@ -2566,7 +2566,7 @@ index d43c7e5..257c050 100644 ldr r6, [r2, #TI_CPU_DOMAIN] #endif set_tls r3, r4, r5 -@@ -699,7 +804,7 @@ ENTRY(__switch_to) +@@ -700,7 +805,7 @@ ENTRY(__switch_to) ldr r8, =__stack_chk_guard ldr r7, [r7, #TSK_STACK_CANARY] #endif @@ -8188,10 +8188,10 @@ index 64f7bd5..8dd550f 100644 if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT))) diff --git a/arch/powerpc/kernel/signal_32.c b/arch/powerpc/kernel/signal_32.c -index 3233099..2ada67f 100644 +index 7e9dff8..b63e4b5 100644 --- a/arch/powerpc/kernel/signal_32.c +++ b/arch/powerpc/kernel/signal_32.c -@@ -995,7 +995,7 @@ int handle_rt_signal32(unsigned long sig, struct k_sigaction *ka, +@@ -993,7 +993,7 @@ int handle_rt_signal32(unsigned long sig, struct k_sigaction *ka, /* Save user registers on the stack */ frame = &rt_sf->uc.uc_mcontext; addr = frame; @@ -8201,10 +8201,10 @@ index 3233099..2ada67f 100644 tramp = current->mm->context.vdso_base + vdso32_rt_sigtramp; } else { diff --git a/arch/powerpc/kernel/signal_64.c b/arch/powerpc/kernel/signal_64.c -index 887e99d..310bc11 100644 +index 35c20a1..e4bf34c 100644 --- a/arch/powerpc/kernel/signal_64.c +++ b/arch/powerpc/kernel/signal_64.c -@@ -751,7 +751,7 @@ int handle_rt_signal64(int signr, struct k_sigaction *ka, siginfo_t *info, +@@ -757,7 +757,7 @@ int handle_rt_signal64(int signr, struct k_sigaction *ka, siginfo_t *info, #endif /* Set up to return from userspace. */ @@ -35124,7 +35124,7 @@ index fcae5fa..e9f71ea 100644 static void delete_gpe_attr_array(void) { diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c -index 7b9bdd8..37638ca 100644 +index 8905e03..d1b0719 100644 --- a/drivers/ata/libahci.c +++ b/drivers/ata/libahci.c @@ -1230,7 +1230,7 @@ int ahci_kick_engine(struct ata_port *ap) @@ -35137,7 +35137,7 @@ index 7b9bdd8..37638ca 100644 unsigned long timeout_msec) { diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c -index adf002a..06c46a7 100644 +index cd6aa28..6f5e966 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c @@ -98,7 +98,7 @@ static unsigned int ata_dev_set_xfermode(struct ata_device *dev); @@ -35149,7 +35149,7 @@ index adf002a..06c46a7 100644 struct ata_force_param { const char *name; -@@ -4792,7 +4792,7 @@ void ata_qc_free(struct ata_queued_cmd *qc) +@@ -4793,7 +4793,7 @@ void ata_qc_free(struct ata_queued_cmd *qc) struct ata_port *ap; unsigned int tag; @@ -35158,7 +35158,7 @@ index adf002a..06c46a7 100644 ap = qc->ap; qc->flags = 0; -@@ -4808,7 +4808,7 @@ void __ata_qc_complete(struct ata_queued_cmd *qc) +@@ -4809,7 +4809,7 @@ void __ata_qc_complete(struct ata_queued_cmd *qc) struct ata_port *ap; struct ata_link *link; @@ -35167,7 +35167,7 @@ index adf002a..06c46a7 100644 WARN_ON_ONCE(!(qc->flags & ATA_QCFLAG_ACTIVE)); ap = qc->ap; link = qc->dev->link; -@@ -5926,6 +5926,7 @@ static void ata_finalize_port_ops(struct ata_port_operations *ops) +@@ -5927,6 +5927,7 @@ static void ata_finalize_port_ops(struct ata_port_operations *ops) return; spin_lock(&lock); @@ -35175,7 +35175,7 @@ index adf002a..06c46a7 100644 for (cur = ops->inherits; cur; cur = cur->inherits) { void **inherit = (void **)cur; -@@ -5939,8 +5940,9 @@ static void ata_finalize_port_ops(struct ata_port_operations *ops) +@@ -5940,8 +5941,9 @@ static void ata_finalize_port_ops(struct ata_port_operations *ops) if (IS_ERR(*pp)) *pp = NULL; @@ -35186,7 +35186,7 @@ index adf002a..06c46a7 100644 spin_unlock(&lock); } -@@ -6133,7 +6135,7 @@ int ata_host_register(struct ata_host *host, struct scsi_host_template *sht) +@@ -6134,7 +6136,7 @@ int ata_host_register(struct ata_host *host, struct scsi_host_template *sht) /* give ports names and add SCSI hosts */ for (i = 0; i < host->n_ports; i++) @@ -36854,7 +36854,7 @@ index 4222aff..1f79506 100644 static struct asender_cmd asender_tbl[] = { [P_PING] = { 0, got_Ping }, diff --git a/drivers/block/loop.c b/drivers/block/loop.c -index 0055973..4c768a6 100644 +index 4a81165..53dc2c7 100644 --- a/drivers/block/loop.c +++ b/drivers/block/loop.c @@ -232,7 +232,7 @@ static int __do_lo_send_write(struct file *file, @@ -38999,10 +38999,10 @@ index c8d16a6..ca71b5e 100644 iir = I915_READ(IIR); diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c -index ab95259..8898d43 100644 +index c714d4d..665732e 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c -@@ -8935,13 +8935,13 @@ struct intel_quirk { +@@ -8939,13 +8939,13 @@ struct intel_quirk { int subsystem_vendor; int subsystem_device; void (*hook)(struct drm_device *dev); @@ -39018,7 +39018,7 @@ index ab95259..8898d43 100644 static int intel_dmi_reverse_brightness(const struct dmi_system_id *id) { -@@ -8949,18 +8949,20 @@ static int intel_dmi_reverse_brightness(const struct dmi_system_id *id) +@@ -8953,18 +8953,20 @@ static int intel_dmi_reverse_brightness(const struct dmi_system_id *id) return 1; } @@ -39167,10 +39167,10 @@ index f2b30f8..d0f9a95 100644 struct ttm_buffer_object *, struct ttm_mem_reg *, struct ttm_mem_reg *); diff --git a/drivers/gpu/drm/nouveau/nouveau_gem.c b/drivers/gpu/drm/nouveau/nouveau_gem.c -index b4b4d0c..b7edc15 100644 +index 5bccf31..7b5667c 100644 --- a/drivers/gpu/drm/nouveau/nouveau_gem.c +++ b/drivers/gpu/drm/nouveau/nouveau_gem.c -@@ -322,7 +322,7 @@ validate_init(struct nouveau_channel *chan, struct drm_file *file_priv, +@@ -323,7 +323,7 @@ validate_init(struct nouveau_channel *chan, struct drm_file *file_priv, int ret, i; struct nouveau_bo *res_bo = NULL; @@ -39179,7 +39179,7 @@ index b4b4d0c..b7edc15 100644 retry: if (++trycnt > 100000) { NV_ERROR(cli, "%s failed and gave up.\n", __func__); -@@ -359,7 +359,7 @@ retry: +@@ -360,7 +360,7 @@ retry: if (ret) { validate_fini(op, NULL); if (unlikely(ret == -EAGAIN)) { @@ -39899,10 +39899,10 @@ index 8c04943..4370ed9 100644 err = drm_debugfs_create_files(dc->debugfs_files, ARRAY_SIZE(debugfs_files), diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c -index e04bf0ef..500861b 100644 +index c4e5cdf..7ab7631 100644 --- a/drivers/hid/hid-core.c +++ b/drivers/hid/hid-core.c -@@ -2358,7 +2358,7 @@ EXPORT_SYMBOL_GPL(hid_ignore); +@@ -2355,7 +2355,7 @@ EXPORT_SYMBOL_GPL(hid_ignore); int hid_add_device(struct hid_device *hdev) { @@ -39911,7 +39911,7 @@ index e04bf0ef..500861b 100644 int ret; if (WARN_ON(hdev->status & HID_STAT_ADDED)) -@@ -2392,7 +2392,7 @@ int hid_add_device(struct hid_device *hdev) +@@ -2389,7 +2389,7 @@ int hid_add_device(struct hid_device *hdev) /* XXX hack, any other cleaner solution after the driver core * is converted to allow more than 20 bytes as the device name? */ dev_set_name(&hdev->dev, "%04X:%04X:%04X.%04X", hdev->bus, @@ -39921,7 +39921,7 @@ index e04bf0ef..500861b 100644 hid_debug_register(hdev, dev_name(&hdev->dev)); ret = device_add(&hdev->dev); diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c -index b6701ce..720a166 100644 +index 3d8e58a..bf8b8ce 100644 --- a/drivers/hid/hid-multitouch.c +++ b/drivers/hid/hid-multitouch.c @@ -325,12 +325,21 @@ static void mt_feature_mapping(struct hid_device *hdev, @@ -39987,7 +39987,7 @@ index 90124ff..3761764 100644 *off += size; diff --git a/drivers/hid/uhid.c b/drivers/hid/uhid.c -index 145a4cb..2353a3e 100644 +index 0bb3bb8..1222415 100644 --- a/drivers/hid/uhid.c +++ b/drivers/hid/uhid.c @@ -47,7 +47,7 @@ struct uhid_device { @@ -42001,7 +42001,7 @@ index d907ca6..cfb8384 100644 schedule_work(&sc->trigger_event); } diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c -index 1ff252a..ee384c1 100644 +index 9e3a045..9d0f95b 100644 --- a/drivers/md/dm-table.c +++ b/drivers/md/dm-table.c @@ -389,7 +389,7 @@ static int device_area_is_invalid(struct dm_target *ti, struct dm_dev *dev, @@ -42094,7 +42094,7 @@ index 1c13071..4bb0452 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 d78f1ff..952b9c6 100644 +index 2290b95..77ca464 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -234,10 +234,10 @@ EXPORT_SYMBOL_GPL(md_trim_bio); @@ -42166,7 +42166,7 @@ index d78f1ff..952b9c6 100644 INIT_LIST_HEAD(&rdev->same_set); init_waitqueue_head(&rdev->blocked_wait); -@@ -7009,7 +7009,7 @@ static int md_seq_show(struct seq_file *seq, void *v) +@@ -7010,7 +7010,7 @@ static int md_seq_show(struct seq_file *seq, void *v) spin_unlock(&pers_lock); seq_printf(seq, "\n"); @@ -42175,7 +42175,7 @@ index d78f1ff..952b9c6 100644 return 0; } if (v == (void*)2) { -@@ -7112,7 +7112,7 @@ static int md_seq_open(struct inode *inode, struct file *file) +@@ -7113,7 +7113,7 @@ static int md_seq_open(struct inode *inode, struct file *file) return error; seq = file->private_data; @@ -42184,7 +42184,7 @@ index d78f1ff..952b9c6 100644 return error; } -@@ -7126,7 +7126,7 @@ static unsigned int mdstat_poll(struct file *filp, poll_table *wait) +@@ -7127,7 +7127,7 @@ static unsigned int mdstat_poll(struct file *filp, poll_table *wait) /* always allow read */ mask = POLLIN | POLLRDNORM; @@ -42193,7 +42193,7 @@ index d78f1ff..952b9c6 100644 mask |= POLLERR | POLLPRI; return mask; } -@@ -7170,7 +7170,7 @@ static int is_mddev_idle(struct mddev *mddev, int init) +@@ -7171,7 +7171,7 @@ static int is_mddev_idle(struct mddev *mddev, int init) struct gendisk *disk = rdev->bdev->bd_contains->bd_disk; curr_events = (int)part_stat_read(&disk->part0, sectors[0]) + (int)part_stat_read(&disk->part0, sectors[1]) - @@ -42708,10 +42708,10 @@ index 1cf382a..c22998c 100644 dev_set_drvdata(&dev->dev, dev); rc = device_add(&dev->dev); diff --git a/drivers/media/usb/dvb-usb/cxusb.c b/drivers/media/usb/dvb-usb/cxusb.c -index 3940bb0..fb3952a 100644 +index 20e345d..da56fe4 100644 --- a/drivers/media/usb/dvb-usb/cxusb.c +++ b/drivers/media/usb/dvb-usb/cxusb.c -@@ -1068,7 +1068,7 @@ static struct dib0070_config dib7070p_dib0070_config = { +@@ -1101,7 +1101,7 @@ static struct dib0070_config dib7070p_dib0070_config = { struct dib0700_adapter_state { int (*set_param_save) (struct dvb_frontend *); @@ -42721,10 +42721,10 @@ index 3940bb0..fb3952a 100644 static int dib7070_set_param_override(struct dvb_frontend *fe) { diff --git a/drivers/media/usb/dvb-usb/dw2102.c b/drivers/media/usb/dvb-usb/dw2102.c -index 6e237b6..dc25556 100644 +index 71b22f5..a63b33f 100644 --- a/drivers/media/usb/dvb-usb/dw2102.c +++ b/drivers/media/usb/dvb-usb/dw2102.c -@@ -118,7 +118,7 @@ struct su3000_state { +@@ -121,7 +121,7 @@ struct su3000_state { struct s6x0_state { int (*old_set_voltage)(struct dvb_frontend *f, fe_sec_voltage_t v); @@ -57896,7 +57896,7 @@ index cb424a4..850e4dd 100644 lock_flocks(); diff --git a/fs/namei.c b/fs/namei.c -index 9ed9361..2b72db1 100644 +index cccaf77..b28ec8a 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -319,16 +319,32 @@ int generic_permission(struct inode *inode, int mask) @@ -58030,7 +58030,7 @@ index 9ed9361..2b72db1 100644 return retval; } -@@ -2381,6 +2413,13 @@ static int may_open(struct path *path, int acc_mode, int flag) +@@ -2382,6 +2414,13 @@ static int may_open(struct path *path, int acc_mode, int flag) if (flag & O_NOATIME && !inode_owner_or_capable(inode)) return -EPERM; @@ -58044,7 +58044,7 @@ index 9ed9361..2b72db1 100644 return 0; } -@@ -2602,7 +2641,7 @@ looked_up: +@@ -2603,7 +2642,7 @@ looked_up: * cleared otherwise prior to returning. */ static int lookup_open(struct nameidata *nd, struct path *path, @@ -58053,7 +58053,7 @@ index 9ed9361..2b72db1 100644 const struct open_flags *op, bool got_write, int *opened) { -@@ -2637,6 +2676,17 @@ static int lookup_open(struct nameidata *nd, struct path *path, +@@ -2638,6 +2677,17 @@ static int lookup_open(struct nameidata *nd, struct path *path, /* Negative dentry, just create the file */ if (!dentry->d_inode && (op->open_flag & O_CREAT)) { umode_t mode = op->mode; @@ -58071,7 +58071,7 @@ index 9ed9361..2b72db1 100644 if (!IS_POSIXACL(dir->d_inode)) mode &= ~current_umask(); /* -@@ -2658,6 +2708,8 @@ static int lookup_open(struct nameidata *nd, struct path *path, +@@ -2659,6 +2709,8 @@ static int lookup_open(struct nameidata *nd, struct path *path, nd->flags & LOOKUP_EXCL); if (error) goto out_dput; @@ -58080,7 +58080,7 @@ index 9ed9361..2b72db1 100644 } out_no_open: path->dentry = dentry; -@@ -2672,7 +2724,7 @@ out_dput: +@@ -2673,7 +2725,7 @@ out_dput: /* * Handle the last step of open() */ @@ -58089,7 +58089,7 @@ index 9ed9361..2b72db1 100644 struct file *file, const struct open_flags *op, int *opened, struct filename *name) { -@@ -2701,16 +2753,32 @@ static int do_last(struct nameidata *nd, struct path *path, +@@ -2702,16 +2754,32 @@ static int do_last(struct nameidata *nd, struct path *path, error = complete_walk(nd); if (error) return error; @@ -58122,7 +58122,7 @@ index 9ed9361..2b72db1 100644 audit_inode(name, dir, 0); goto finish_open; } -@@ -2759,7 +2827,7 @@ retry_lookup: +@@ -2760,7 +2828,7 @@ retry_lookup: */ } mutex_lock(&dir->d_inode->i_mutex); @@ -58131,7 +58131,7 @@ index 9ed9361..2b72db1 100644 mutex_unlock(&dir->d_inode->i_mutex); if (error <= 0) { -@@ -2783,11 +2851,28 @@ retry_lookup: +@@ -2784,11 +2852,28 @@ retry_lookup: goto finish_open_created; } @@ -58161,7 +58161,7 @@ index 9ed9361..2b72db1 100644 /* * If atomic_open() acquired write access it is dropped now due to -@@ -2828,6 +2913,11 @@ finish_lookup: +@@ -2829,6 +2914,11 @@ finish_lookup: } } BUG_ON(inode != path->dentry->d_inode); @@ -58173,7 +58173,7 @@ index 9ed9361..2b72db1 100644 return 1; } -@@ -2837,7 +2927,6 @@ finish_lookup: +@@ -2838,7 +2928,6 @@ finish_lookup: save_parent.dentry = nd->path.dentry; save_parent.mnt = mntget(path->mnt); nd->path.dentry = path->dentry; @@ -58181,7 +58181,7 @@ index 9ed9361..2b72db1 100644 } nd->inode = inode; /* Why this, you ask? _Now_ we might have grown LOOKUP_JUMPED... */ -@@ -2846,6 +2935,16 @@ finish_lookup: +@@ -2847,6 +2936,16 @@ finish_lookup: path_put(&save_parent); return error; } @@ -58198,7 +58198,7 @@ index 9ed9361..2b72db1 100644 error = -EISDIR; if ((open_flag & O_CREAT) && S_ISDIR(nd->inode->i_mode)) goto out; -@@ -2944,7 +3043,7 @@ static struct file *path_openat(int dfd, struct filename *pathname, +@@ -2945,7 +3044,7 @@ static struct file *path_openat(int dfd, struct filename *pathname, if (unlikely(error)) goto out; @@ -58207,7 +58207,7 @@ index 9ed9361..2b72db1 100644 while (unlikely(error > 0)) { /* trailing symlink */ struct path link = path; void *cookie; -@@ -2962,7 +3061,7 @@ static struct file *path_openat(int dfd, struct filename *pathname, +@@ -2963,7 +3062,7 @@ static struct file *path_openat(int dfd, struct filename *pathname, error = follow_link(&link, nd, &cookie); if (unlikely(error)) break; @@ -58216,7 +58216,7 @@ index 9ed9361..2b72db1 100644 put_link(nd, &link, cookie); } out: -@@ -3062,8 +3161,12 @@ struct dentry *kern_path_create(int dfd, const char *pathname, +@@ -3063,8 +3162,12 @@ struct dentry *kern_path_create(int dfd, const char *pathname, goto unlock; error = -EEXIST; @@ -58230,7 +58230,7 @@ index 9ed9361..2b72db1 100644 /* * Special case - lookup gave negative, but... we had foo/bar/ * From the vfs_mknod() POV we just have a negative dentry - -@@ -3115,6 +3218,20 @@ struct dentry *user_path_create(int dfd, const char __user *pathname, +@@ -3116,6 +3219,20 @@ struct dentry *user_path_create(int dfd, const char __user *pathname, } EXPORT_SYMBOL(user_path_create); @@ -58251,7 +58251,7 @@ index 9ed9361..2b72db1 100644 int vfs_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, dev_t dev) { int error = may_create(dir, dentry); -@@ -3177,6 +3294,17 @@ retry: +@@ -3178,6 +3295,17 @@ retry: if (!IS_POSIXACL(path.dentry->d_inode)) mode &= ~current_umask(); @@ -58269,7 +58269,7 @@ index 9ed9361..2b72db1 100644 error = security_path_mknod(&path, dentry, mode, dev); if (error) goto out; -@@ -3193,6 +3321,8 @@ retry: +@@ -3194,6 +3322,8 @@ retry: break; } out: @@ -58278,7 +58278,7 @@ index 9ed9361..2b72db1 100644 done_path_create(&path, dentry); if (retry_estale(error, lookup_flags)) { lookup_flags |= LOOKUP_REVAL; -@@ -3245,9 +3375,16 @@ retry: +@@ -3246,9 +3376,16 @@ retry: if (!IS_POSIXACL(path.dentry->d_inode)) mode &= ~current_umask(); @@ -58295,7 +58295,7 @@ index 9ed9361..2b72db1 100644 done_path_create(&path, dentry); if (retry_estale(error, lookup_flags)) { lookup_flags |= LOOKUP_REVAL; -@@ -3328,6 +3465,8 @@ static long do_rmdir(int dfd, const char __user *pathname) +@@ -3329,6 +3466,8 @@ static long do_rmdir(int dfd, const char __user *pathname) struct filename *name; struct dentry *dentry; struct nameidata nd; @@ -58304,7 +58304,7 @@ index 9ed9361..2b72db1 100644 unsigned int lookup_flags = 0; retry: name = user_path_parent(dfd, pathname, &nd, lookup_flags); -@@ -3360,10 +3499,21 @@ retry: +@@ -3361,10 +3500,21 @@ retry: error = -ENOENT; goto exit3; } @@ -58326,7 +58326,7 @@ index 9ed9361..2b72db1 100644 exit3: dput(dentry); exit2: -@@ -3429,6 +3579,8 @@ static long do_unlinkat(int dfd, const char __user *pathname) +@@ -3430,6 +3580,8 @@ static long do_unlinkat(int dfd, const char __user *pathname) struct dentry *dentry; struct nameidata nd; struct inode *inode = NULL; @@ -58335,7 +58335,7 @@ index 9ed9361..2b72db1 100644 unsigned int lookup_flags = 0; retry: name = user_path_parent(dfd, pathname, &nd, lookup_flags); -@@ -3455,10 +3607,22 @@ retry: +@@ -3456,10 +3608,22 @@ retry: if (!inode) goto slashes; ihold(inode); @@ -58358,7 +58358,7 @@ index 9ed9361..2b72db1 100644 exit2: dput(dentry); } -@@ -3536,9 +3700,17 @@ retry: +@@ -3537,9 +3701,17 @@ retry: if (IS_ERR(dentry)) goto out_putname; @@ -58376,7 +58376,7 @@ index 9ed9361..2b72db1 100644 done_path_create(&path, dentry); if (retry_estale(error, lookup_flags)) { lookup_flags |= LOOKUP_REVAL; -@@ -3612,6 +3784,7 @@ SYSCALL_DEFINE5(linkat, int, olddfd, const char __user *, oldname, +@@ -3613,6 +3785,7 @@ SYSCALL_DEFINE5(linkat, int, olddfd, const char __user *, oldname, { struct dentry *new_dentry; struct path old_path, new_path; @@ -58384,7 +58384,7 @@ index 9ed9361..2b72db1 100644 int how = 0; int error; -@@ -3635,7 +3808,7 @@ retry: +@@ -3636,7 +3809,7 @@ retry: if (error) return error; @@ -58393,7 +58393,7 @@ index 9ed9361..2b72db1 100644 (how & LOOKUP_REVAL)); error = PTR_ERR(new_dentry); if (IS_ERR(new_dentry)) -@@ -3647,11 +3820,28 @@ retry: +@@ -3648,11 +3821,28 @@ retry: error = may_linkat(&old_path); if (unlikely(error)) goto out_dput; @@ -58422,7 +58422,7 @@ index 9ed9361..2b72db1 100644 done_path_create(&new_path, new_dentry); if (retry_estale(error, how)) { how |= LOOKUP_REVAL; -@@ -3897,12 +4087,21 @@ retry: +@@ -3898,12 +4088,21 @@ retry: if (new_dentry == trap) goto exit5; @@ -58444,7 +58444,7 @@ index 9ed9361..2b72db1 100644 exit5: dput(new_dentry); exit4: -@@ -3934,6 +4133,8 @@ SYSCALL_DEFINE2(rename, const char __user *, oldname, const char __user *, newna +@@ -3935,6 +4134,8 @@ SYSCALL_DEFINE2(rename, const char __user *, oldname, const char __user *, newna int vfs_readlink(struct dentry *dentry, char __user *buffer, int buflen, const char *link) { @@ -58453,7 +58453,7 @@ index 9ed9361..2b72db1 100644 int len; len = PTR_ERR(link); -@@ -3943,7 +4144,14 @@ int vfs_readlink(struct dentry *dentry, char __user *buffer, int buflen, const c +@@ -3944,7 +4145,14 @@ int vfs_readlink(struct dentry *dentry, char __user *buffer, int buflen, const c len = strlen(link); if (len > (unsigned) buflen) len = buflen; @@ -80011,7 +80011,7 @@ index e83ac04..ddd6ed5 100644 * Ok, we have completed the initial bootup, and * we're essentially up and running. Get rid of the diff --git a/ipc/ipc_sysctl.c b/ipc/ipc_sysctl.c -index 130dfec..cc88451 100644 +index b0e99de..09f385c 100644 --- a/ipc/ipc_sysctl.c +++ b/ipc/ipc_sysctl.c @@ -30,7 +30,7 @@ static void *get_ipc(ctl_table *table) @@ -80033,7 +80033,7 @@ index 130dfec..cc88451 100644 memcpy(&ipc_table, table, sizeof(ipc_table)); ipc_table.data = get_ipc(table); @@ -65,7 +65,7 @@ static int proc_ipc_dointvec_minmax_orphans(ctl_table *table, int write, - static int proc_ipc_callback_dointvec(ctl_table *table, int write, + static int proc_ipc_callback_dointvec_minmax(ctl_table *table, int write, void __user *buffer, size_t *lenp, loff_t *ppos) { - struct ctl_table ipc_table; @@ -80041,7 +80041,7 @@ index 130dfec..cc88451 100644 size_t lenp_bef = *lenp; int rc; -@@ -88,7 +88,7 @@ static int proc_ipc_callback_dointvec(ctl_table *table, int write, +@@ -88,7 +88,7 @@ static int proc_ipc_callback_dointvec_minmax(ctl_table *table, int write, static int proc_ipc_doulongvec_minmax(ctl_table *table, int write, void __user *buffer, size_t *lenp, loff_t *ppos) { @@ -80073,7 +80073,7 @@ index 383d638..943fdbb 100644 mq_table.data = get_mq(table); diff --git a/ipc/mqueue.c b/ipc/mqueue.c -index e4e47f6..a85e0ad 100644 +index ae1996d..a35f2cc 100644 --- a/ipc/mqueue.c +++ b/ipc/mqueue.c @@ -278,6 +278,7 @@ static struct inode *mqueue_get_inode(struct super_block *sb, @@ -80114,7 +80114,7 @@ index 558aa91..359e718 100644 msg_params.flg = msgflg; diff --git a/ipc/sem.c b/ipc/sem.c -index 8c4f59b..3a3f4ff 100644 +index db9d241..bc8427c 100644 --- a/ipc/sem.c +++ b/ipc/sem.c @@ -562,10 +562,15 @@ static inline int sem_more_checks(struct kern_ipc_perm *ipcp, @@ -80257,7 +80257,7 @@ index 8d6e145..33e0b1e 100644 current->signal->rlim[RLIMIT_FSIZE].rlim_cur = flim; set_fs(fs); diff --git a/kernel/audit.c b/kernel/audit.c -index 7b0e23a..861041e 100644 +index 7ddfd8a..c97daf0 100644 --- a/kernel/audit.c +++ b/kernel/audit.c @@ -118,7 +118,7 @@ u32 audit_sig_sid = 0; @@ -80287,7 +80287,7 @@ index 7b0e23a..861041e 100644 audit_rate_limit, audit_backlog_limit); audit_panic(message); -@@ -664,7 +664,7 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh) +@@ -665,7 +665,7 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh) status_set.pid = audit_pid; status_set.rate_limit = audit_rate_limit; status_set.backlog_limit = audit_backlog_limit; @@ -80310,10 +80310,10 @@ index 6bd4a90..0ee9eff 100644 f->val = 0; } diff --git a/kernel/auditsc.c b/kernel/auditsc.c -index 3c8a601..3a416f6 100644 +index 9845cb3..3ec9369 100644 --- a/kernel/auditsc.c +++ b/kernel/auditsc.c -@@ -1956,7 +1956,7 @@ int auditsc_get_stamp(struct audit_context *ctx, +@@ -1962,7 +1962,7 @@ int auditsc_get_stamp(struct audit_context *ctx, } /* global counter which is incremented every time something logs in */ @@ -80322,7 +80322,7 @@ index 3c8a601..3a416f6 100644 /** * audit_set_loginuid - set current task's audit_context loginuid -@@ -1980,7 +1980,7 @@ int audit_set_loginuid(kuid_t loginuid) +@@ -1986,7 +1986,7 @@ int audit_set_loginuid(kuid_t loginuid) return -EPERM; #endif /* CONFIG_AUDIT_LOGINUID_IMMUTABLE */ @@ -80428,10 +80428,10 @@ index f6c2ce5..982c0f9 100644 + return ns_capable_nolog(ns, cap) && kuid_has_mapping(ns, inode->i_uid); +} diff --git a/kernel/cgroup.c b/kernel/cgroup.c -index b6b26fa..ae2217e 100644 +index d0def7f..ff3a63e 100644 --- a/kernel/cgroup.c +++ b/kernel/cgroup.c -@@ -5398,7 +5398,7 @@ static int cgroup_css_links_read(struct cgroup *cont, +@@ -5422,7 +5422,7 @@ static int cgroup_css_links_read(struct cgroup *cont, struct css_set *cg = link->cg; struct task_struct *task; int count = 0; @@ -85193,7 +85193,7 @@ index d3617db..c98bbe9 100644 { unsigned long sec = value->tv_sec; diff --git a/kernel/time/alarmtimer.c b/kernel/time/alarmtimer.c -index f11d83b..d016d91 100644 +index a8f5084..5a673cb 100644 --- a/kernel/time/alarmtimer.c +++ b/kernel/time/alarmtimer.c @@ -750,7 +750,7 @@ static int __init alarmtimer_init(void) @@ -85407,10 +85407,10 @@ index b8b8560..75b1a09 100644 ret = -EIO; bt->dropped_file = debugfs_create_file("dropped", 0444, dir, bt, diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c -index f23449d..b8cc3a1 100644 +index 331c102..b7a32e2 100644 --- a/kernel/trace/ftrace.c +++ b/kernel/trace/ftrace.c -@@ -1925,12 +1925,17 @@ ftrace_code_disable(struct module *mod, struct dyn_ftrace *rec) +@@ -1919,12 +1919,17 @@ ftrace_code_disable(struct module *mod, struct dyn_ftrace *rec) if (unlikely(ftrace_disabled)) return 0; @@ -85441,7 +85441,7 @@ index f23449d..b8cc3a1 100644 start_pg = ftrace_allocate_pages(count); if (!start_pg) -@@ -4718,8 +4725,6 @@ ftrace_enable_sysctl(struct ctl_table *table, int write, +@@ -4717,8 +4724,6 @@ ftrace_enable_sysctl(struct ctl_table *table, int write, #ifdef CONFIG_FUNCTION_GRAPH_TRACER static int ftrace_graph_active; @@ -85450,7 +85450,7 @@ index f23449d..b8cc3a1 100644 int ftrace_graph_entry_stub(struct ftrace_graph_ent *trace) { return 0; -@@ -4863,6 +4868,10 @@ ftrace_suspend_notifier_call(struct notifier_block *bl, unsigned long state, +@@ -4862,6 +4867,10 @@ ftrace_suspend_notifier_call(struct notifier_block *bl, unsigned long state, return NOTIFY_DONE; } @@ -85458,10 +85458,10 @@ index f23449d..b8cc3a1 100644 + .notifier_call = ftrace_suspend_notifier_call +}; + - int register_ftrace_graph(trace_func_graph_ret_t retfunc, - trace_func_graph_ent_t entryfunc) - { -@@ -4876,7 +4885,6 @@ int register_ftrace_graph(trace_func_graph_ret_t retfunc, + /* Just a place holder for function graph */ + static struct ftrace_ops fgraph_ops __read_mostly = { + .func = ftrace_stub, +@@ -4882,7 +4891,6 @@ int register_ftrace_graph(trace_func_graph_ret_t retfunc, goto out; } @@ -85992,10 +85992,10 @@ index 05039e3..17490c7 100644 .thread_should_run = watchdog_should_run, .thread_fn = watchdog, diff --git a/kernel/workqueue.c b/kernel/workqueue.c -index e52d002..576b367 100644 +index 68086a3..729fa07 100644 --- a/kernel/workqueue.c +++ b/kernel/workqueue.c -@@ -4605,7 +4605,7 @@ static void rebind_workers(struct worker_pool *pool) +@@ -4615,7 +4615,7 @@ static void rebind_workers(struct worker_pool *pool) WARN_ON_ONCE(!(worker_flags & WORKER_UNBOUND)); worker_flags |= WORKER_REBOUND; worker_flags &= ~WORKER_UNBOUND; @@ -86532,7 +86532,7 @@ index 4f5b1dd..7cab418 100644 +} +EXPORT_SYMBOL(copy_to_user_overflow); diff --git a/lib/vsprintf.c b/lib/vsprintf.c -index e149c64..24aa71a 100644 +index 620fae4..6ed4d6c 100644 --- a/lib/vsprintf.c +++ b/lib/vsprintf.c @@ -16,6 +16,9 @@ @@ -86545,7 +86545,7 @@ index e149c64..24aa71a 100644 #include <stdarg.h> #include <linux/module.h> /* for KSYM_SYMBOL_LEN */ #include <linux/types.h> -@@ -981,7 +984,11 @@ char *netdev_feature_string(char *buf, char *end, const u8 *addr, +@@ -982,7 +985,11 @@ char *netdev_feature_string(char *buf, char *end, const u8 *addr, return number(buf, end, *(const netdev_features_t *)addr, spec); } @@ -86557,7 +86557,7 @@ index e149c64..24aa71a 100644 /* * Show a '%p' thing. A kernel extension is that the '%p' is followed -@@ -994,6 +1001,7 @@ int kptr_restrict __read_mostly; +@@ -995,6 +1002,7 @@ int kptr_restrict __read_mostly; * - 'f' For simple symbolic function names without offset * - 'S' For symbolic direct pointers with offset * - 's' For symbolic direct pointers without offset @@ -86565,7 +86565,7 @@ index e149c64..24aa71a 100644 * - '[FfSs]R' as above with __builtin_extract_return_addr() translation * - 'B' For backtraced symbolic direct pointers with offset * - 'R' For decoded struct resource, e.g., [mem 0x0-0x1f 64bit pref] -@@ -1052,12 +1060,12 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr, +@@ -1053,12 +1061,12 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr, if (!ptr && *fmt != 'K') { /* @@ -86580,7 +86580,7 @@ index e149c64..24aa71a 100644 } switch (*fmt) { -@@ -1067,6 +1075,12 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr, +@@ -1068,6 +1076,12 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr, /* Fallthrough */ case 'S': case 's': @@ -86593,7 +86593,7 @@ index e149c64..24aa71a 100644 case 'B': return symbol_string(buf, end, ptr, spec, fmt); case 'R': -@@ -1107,6 +1121,8 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr, +@@ -1108,6 +1122,8 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr, va_end(va); return buf; } @@ -86602,7 +86602,7 @@ index e149c64..24aa71a 100644 case 'K': /* * %pK cannot be used in IRQ context because its test -@@ -1136,6 +1152,21 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr, +@@ -1163,6 +1179,21 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr, return number(buf, end, (unsigned long long) *((phys_addr_t *)ptr), spec); } @@ -86624,7 +86624,7 @@ index e149c64..24aa71a 100644 spec.flags |= SMALL; if (spec.field_width == -1) { spec.field_width = default_width; -@@ -1857,11 +1888,11 @@ int bstr_printf(char *buf, size_t size, const char *fmt, const u32 *bin_buf) +@@ -1884,11 +1915,11 @@ int bstr_printf(char *buf, size_t size, const char *fmt, const u32 *bin_buf) typeof(type) value; \ if (sizeof(type) == 8) { \ args = PTR_ALIGN(args, sizeof(u32)); \ @@ -86639,7 +86639,7 @@ index e149c64..24aa71a 100644 } \ args += sizeof(type); \ value; \ -@@ -1924,7 +1955,7 @@ int bstr_printf(char *buf, size_t size, const char *fmt, const u32 *bin_buf) +@@ -1951,7 +1982,7 @@ int bstr_printf(char *buf, size_t size, const char *fmt, const u32 *bin_buf) case FORMAT_TYPE_STR: { const char *str_arg = args; args += strlen(str_arg) + 1; @@ -88072,7 +88072,7 @@ index 79b7cf7..9944291 100644 capable(CAP_IPC_LOCK)) ret = do_mlockall(flags); diff --git a/mm/mmap.c b/mm/mmap.c -index 8d25fdc..bfb7626 100644 +index 8f87b14..5748b4e 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -36,6 +36,7 @@ @@ -88620,9 +88620,9 @@ index 8d25fdc..bfb7626 100644 struct vm_unmapped_area_info info; + unsigned long offset = gr_rand_threadstack_offset(mm, filp, flags); - if (len > TASK_SIZE) + if (len > TASK_SIZE - mmap_min_addr) return -ENOMEM; -@@ -1859,29 +2119,45 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr, +@@ -1859,29 +2119,46 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr, if (flags & MAP_FIXED) return addr; @@ -88633,9 +88633,9 @@ index 8d25fdc..bfb7626 100644 if (addr) { addr = PAGE_ALIGN(addr); vma = find_vma(mm, addr); -- if (TASK_SIZE - len >= addr && + if (TASK_SIZE - len >= addr && addr >= mmap_min_addr && - (!vma || addr + len <= vma->vm_start)) -+ if (TASK_SIZE - len >= addr && check_heap_stack_gap(vma, addr, len, offset)) ++ check_heap_stack_gap(vma, addr, len, offset)) return addr; } @@ -88671,15 +88671,15 @@ index 8d25fdc..bfb7626 100644 mm->free_area_cache = addr; } -@@ -1899,6 +2175,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, +@@ -1899,6 +2176,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, struct mm_struct *mm = current->mm; unsigned long addr = addr0; struct vm_unmapped_area_info info; + unsigned long offset = gr_rand_threadstack_offset(mm, filp, flags); /* requested length too big for entire address space */ - if (len > TASK_SIZE) -@@ -1907,12 +2184,15 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, + if (len > TASK_SIZE - mmap_min_addr) +@@ -1907,12 +2185,16 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, if (flags & MAP_FIXED) return addr; @@ -88691,21 +88691,21 @@ index 8d25fdc..bfb7626 100644 if (addr) { addr = PAGE_ALIGN(addr); vma = find_vma(mm, addr); -- if (TASK_SIZE - len >= addr && + if (TASK_SIZE - len >= addr && addr >= mmap_min_addr && - (!vma || addr + len <= vma->vm_start)) -+ if (TASK_SIZE - len >= addr && check_heap_stack_gap(vma, addr, len, offset)) ++ check_heap_stack_gap(vma, addr, len, offset)) return addr; } -@@ -1921,6 +2201,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, - info.low_limit = PAGE_SIZE; +@@ -1921,6 +2203,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, + info.low_limit = max(PAGE_SIZE, mmap_min_addr); info.high_limit = mm->mmap_base; info.align_mask = 0; + info.threadstack_offset = offset; addr = vm_unmapped_area(&info); /* -@@ -1933,6 +2214,12 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, +@@ -1933,6 +2216,12 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, VM_BUG_ON(addr != -ENOMEM); info.flags = 0; info.low_limit = TASK_UNMAPPED_BASE; @@ -88718,7 +88718,7 @@ index 8d25fdc..bfb7626 100644 info.high_limit = TASK_SIZE; addr = vm_unmapped_area(&info); } -@@ -1943,6 +2230,12 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, +@@ -1943,6 +2232,12 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, void arch_unmap_area_topdown(struct mm_struct *mm, unsigned long addr) { @@ -88731,7 +88731,7 @@ index 8d25fdc..bfb7626 100644 /* * Is this a new hole at the highest possible address? */ -@@ -1950,8 +2243,10 @@ void arch_unmap_area_topdown(struct mm_struct *mm, unsigned long addr) +@@ -1950,8 +2245,10 @@ void arch_unmap_area_topdown(struct mm_struct *mm, unsigned long addr) mm->free_area_cache = addr; /* dont allow allocations above current base */ @@ -88743,7 +88743,7 @@ index 8d25fdc..bfb7626 100644 } unsigned long -@@ -2047,6 +2342,28 @@ find_vma_prev(struct mm_struct *mm, unsigned long addr, +@@ -2047,6 +2344,28 @@ find_vma_prev(struct mm_struct *mm, unsigned long addr, return vma; } @@ -88772,7 +88772,7 @@ index 8d25fdc..bfb7626 100644 /* * Verify that the stack growth is acceptable and * update accounting. This is shared with both the -@@ -2063,6 +2380,7 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns +@@ -2063,6 +2382,7 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns return -ENOMEM; /* Stack limit test */ @@ -88780,7 +88780,7 @@ index 8d25fdc..bfb7626 100644 if (size > ACCESS_ONCE(rlim[RLIMIT_STACK].rlim_cur)) return -ENOMEM; -@@ -2073,6 +2391,7 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns +@@ -2073,6 +2393,7 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns locked = mm->locked_vm + grow; limit = ACCESS_ONCE(rlim[RLIMIT_MEMLOCK].rlim_cur); limit >>= PAGE_SHIFT; @@ -88788,7 +88788,7 @@ index 8d25fdc..bfb7626 100644 if (locked > limit && !capable(CAP_IPC_LOCK)) return -ENOMEM; } -@@ -2102,37 +2421,48 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns +@@ -2102,37 +2423,48 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns * PA-RISC uses this for its stack; IA64 for its Register Backing Store. * vma is the last one with address > vma->vm_end. Have to extend vma. */ @@ -88846,7 +88846,7 @@ index 8d25fdc..bfb7626 100644 unsigned long size, grow; size = address - vma->vm_start; -@@ -2167,6 +2497,8 @@ int expand_upwards(struct vm_area_struct *vma, unsigned long address) +@@ -2167,6 +2499,8 @@ int expand_upwards(struct vm_area_struct *vma, unsigned long address) } } } @@ -88855,7 +88855,7 @@ index 8d25fdc..bfb7626 100644 vma_unlock_anon_vma(vma); khugepaged_enter_vma_merge(vma); validate_mm(vma->vm_mm); -@@ -2181,6 +2513,8 @@ int expand_downwards(struct vm_area_struct *vma, +@@ -2181,6 +2515,8 @@ int expand_downwards(struct vm_area_struct *vma, unsigned long address) { int error; @@ -88864,7 +88864,7 @@ index 8d25fdc..bfb7626 100644 /* * We must make sure the anon_vma is allocated -@@ -2194,6 +2528,15 @@ int expand_downwards(struct vm_area_struct *vma, +@@ -2194,6 +2530,15 @@ int expand_downwards(struct vm_area_struct *vma, if (error) return error; @@ -88880,7 +88880,7 @@ index 8d25fdc..bfb7626 100644 vma_lock_anon_vma(vma); /* -@@ -2203,9 +2546,17 @@ int expand_downwards(struct vm_area_struct *vma, +@@ -2203,9 +2548,17 @@ int expand_downwards(struct vm_area_struct *vma, */ /* Somebody else might have raced and expanded it already */ @@ -88899,7 +88899,7 @@ index 8d25fdc..bfb7626 100644 size = vma->vm_end - address; grow = (vma->vm_start - address) >> PAGE_SHIFT; -@@ -2230,13 +2581,27 @@ int expand_downwards(struct vm_area_struct *vma, +@@ -2230,13 +2583,27 @@ int expand_downwards(struct vm_area_struct *vma, vma->vm_pgoff -= grow; anon_vma_interval_tree_post_update_vma(vma); vma_gap_update(vma); @@ -88927,7 +88927,7 @@ index 8d25fdc..bfb7626 100644 khugepaged_enter_vma_merge(vma); validate_mm(vma->vm_mm); return error; -@@ -2334,6 +2699,13 @@ static void remove_vma_list(struct mm_struct *mm, struct vm_area_struct *vma) +@@ -2334,6 +2701,13 @@ static void remove_vma_list(struct mm_struct *mm, struct vm_area_struct *vma) do { long nrpages = vma_pages(vma); @@ -88941,7 +88941,7 @@ index 8d25fdc..bfb7626 100644 if (vma->vm_flags & VM_ACCOUNT) nr_accounted += nrpages; vm_stat_account(mm, vma->vm_flags, vma->vm_file, -nrpages); -@@ -2379,6 +2751,16 @@ detach_vmas_to_be_unmapped(struct mm_struct *mm, struct vm_area_struct *vma, +@@ -2379,6 +2753,16 @@ detach_vmas_to_be_unmapped(struct mm_struct *mm, struct vm_area_struct *vma, insertion_point = (prev ? &prev->vm_next : &mm->mmap); vma->vm_prev = NULL; do { @@ -88958,7 +88958,7 @@ index 8d25fdc..bfb7626 100644 vma_rb_erase(vma, &mm->mm_rb); mm->map_count--; tail_vma = vma; -@@ -2410,14 +2792,33 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma, +@@ -2410,14 +2794,33 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma, struct vm_area_struct *new; int err = -ENOMEM; @@ -88992,7 +88992,7 @@ index 8d25fdc..bfb7626 100644 /* most fields are the same, copy all, and then fixup */ *new = *vma; -@@ -2430,6 +2831,22 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma, +@@ -2430,6 +2833,22 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma, new->vm_pgoff += ((addr - vma->vm_start) >> PAGE_SHIFT); } @@ -89015,7 +89015,7 @@ index 8d25fdc..bfb7626 100644 pol = mpol_dup(vma_policy(vma)); if (IS_ERR(pol)) { err = PTR_ERR(pol); -@@ -2452,6 +2869,36 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma, +@@ -2452,6 +2871,36 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma, else err = vma_adjust(vma, vma->vm_start, addr, vma->vm_pgoff, new); @@ -89052,7 +89052,7 @@ index 8d25fdc..bfb7626 100644 /* Success. */ if (!err) return 0; -@@ -2461,10 +2908,18 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma, +@@ -2461,10 +2910,18 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma, new->vm_ops->close(new); if (new->vm_file) fput(new->vm_file); @@ -89072,7 +89072,7 @@ index 8d25fdc..bfb7626 100644 kmem_cache_free(vm_area_cachep, new); out_err: return err; -@@ -2477,6 +2932,15 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma, +@@ -2477,6 +2934,15 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma, int split_vma(struct mm_struct *mm, struct vm_area_struct *vma, unsigned long addr, int new_below) { @@ -89088,7 +89088,7 @@ index 8d25fdc..bfb7626 100644 if (mm->map_count >= sysctl_max_map_count) return -ENOMEM; -@@ -2488,11 +2952,30 @@ int split_vma(struct mm_struct *mm, struct vm_area_struct *vma, +@@ -2488,11 +2954,30 @@ int split_vma(struct mm_struct *mm, struct vm_area_struct *vma, * work. This now handles partial unmappings. * Jeremy Fitzhardinge <jeremy@goop.org> */ @@ -89119,7 +89119,7 @@ index 8d25fdc..bfb7626 100644 if ((start & ~PAGE_MASK) || start > TASK_SIZE || len > TASK_SIZE-start) return -EINVAL; -@@ -2567,6 +3050,8 @@ int do_munmap(struct mm_struct *mm, unsigned long start, size_t len) +@@ -2567,6 +3052,8 @@ int do_munmap(struct mm_struct *mm, unsigned long start, size_t len) /* Fix up all other VM information */ remove_vma_list(mm, vma); @@ -89128,7 +89128,7 @@ index 8d25fdc..bfb7626 100644 return 0; } -@@ -2575,6 +3060,13 @@ int vm_munmap(unsigned long start, size_t len) +@@ -2575,6 +3062,13 @@ int vm_munmap(unsigned long start, size_t len) int ret; struct mm_struct *mm = current->mm; @@ -89142,7 +89142,7 @@ index 8d25fdc..bfb7626 100644 down_write(&mm->mmap_sem); ret = do_munmap(mm, start, len); up_write(&mm->mmap_sem); -@@ -2588,16 +3080,6 @@ SYSCALL_DEFINE2(munmap, unsigned long, addr, size_t, len) +@@ -2588,16 +3082,6 @@ SYSCALL_DEFINE2(munmap, unsigned long, addr, size_t, len) return vm_munmap(addr, len); } @@ -89159,7 +89159,7 @@ index 8d25fdc..bfb7626 100644 /* * this is really a simplified "do_mmap". it only handles * anonymous maps. eventually we may be able to do some -@@ -2611,6 +3093,7 @@ static unsigned long do_brk(unsigned long addr, unsigned long len) +@@ -2611,6 +3095,7 @@ static unsigned long do_brk(unsigned long addr, unsigned long len) struct rb_node ** rb_link, * rb_parent; pgoff_t pgoff = addr >> PAGE_SHIFT; int error; @@ -89167,7 +89167,7 @@ index 8d25fdc..bfb7626 100644 len = PAGE_ALIGN(len); if (!len) -@@ -2618,16 +3101,30 @@ static unsigned long do_brk(unsigned long addr, unsigned long len) +@@ -2618,16 +3103,30 @@ static unsigned long do_brk(unsigned long addr, unsigned long len) flags = VM_DATA_DEFAULT_FLAGS | VM_ACCOUNT | mm->def_flags; @@ -89199,7 +89199,7 @@ index 8d25fdc..bfb7626 100644 locked += mm->locked_vm; lock_limit = rlimit(RLIMIT_MEMLOCK); lock_limit >>= PAGE_SHIFT; -@@ -2644,21 +3141,20 @@ static unsigned long do_brk(unsigned long addr, unsigned long len) +@@ -2644,21 +3143,20 @@ static unsigned long do_brk(unsigned long addr, unsigned long len) /* * Clear old maps. this also does some error checking for us */ @@ -89224,7 +89224,7 @@ index 8d25fdc..bfb7626 100644 return -ENOMEM; /* Can we just expand an old private anonymous mapping? */ -@@ -2672,7 +3168,7 @@ static unsigned long do_brk(unsigned long addr, unsigned long len) +@@ -2672,7 +3170,7 @@ static unsigned long do_brk(unsigned long addr, unsigned long len) */ vma = kmem_cache_zalloc(vm_area_cachep, GFP_KERNEL); if (!vma) { @@ -89233,7 +89233,7 @@ index 8d25fdc..bfb7626 100644 return -ENOMEM; } -@@ -2686,9 +3182,10 @@ static unsigned long do_brk(unsigned long addr, unsigned long len) +@@ -2686,9 +3184,10 @@ static unsigned long do_brk(unsigned long addr, unsigned long len) vma_link(mm, vma, prev, rb_link, rb_parent); out: perf_event_mmap(vma); @@ -89246,7 +89246,7 @@ index 8d25fdc..bfb7626 100644 return addr; } -@@ -2750,6 +3247,7 @@ void exit_mmap(struct mm_struct *mm) +@@ -2750,6 +3249,7 @@ void exit_mmap(struct mm_struct *mm) while (vma) { if (vma->vm_flags & VM_ACCOUNT) nr_accounted += vma_pages(vma); @@ -89254,7 +89254,7 @@ index 8d25fdc..bfb7626 100644 vma = remove_vma(vma); } vm_unacct_memory(nr_accounted); -@@ -2766,6 +3264,13 @@ int insert_vm_struct(struct mm_struct *mm, struct vm_area_struct *vma) +@@ -2766,6 +3266,13 @@ int insert_vm_struct(struct mm_struct *mm, struct vm_area_struct *vma) struct vm_area_struct *prev; struct rb_node **rb_link, *rb_parent; @@ -89268,7 +89268,7 @@ index 8d25fdc..bfb7626 100644 /* * The vm_pgoff of a purely anonymous vma should be irrelevant * until its first write fault, when page's anon_vma and index -@@ -2789,7 +3294,21 @@ int insert_vm_struct(struct mm_struct *mm, struct vm_area_struct *vma) +@@ -2789,7 +3296,21 @@ int insert_vm_struct(struct mm_struct *mm, struct vm_area_struct *vma) security_vm_enough_memory_mm(mm, vma_pages(vma))) return -ENOMEM; @@ -89290,7 +89290,7 @@ index 8d25fdc..bfb7626 100644 return 0; } -@@ -2809,6 +3328,8 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap, +@@ -2809,6 +3330,8 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap, struct mempolicy *pol; bool faulted_in_anon_vma = true; @@ -89299,7 +89299,7 @@ index 8d25fdc..bfb7626 100644 /* * If anonymous vma has not yet been faulted, update new pgoff * to match new location, to increase its chance of merging. -@@ -2875,6 +3396,39 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap, +@@ -2875,6 +3398,39 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap, return NULL; } @@ -89339,7 +89339,7 @@ index 8d25fdc..bfb7626 100644 /* * Return true if the calling process may expand its vm space by the passed * number of pages -@@ -2886,6 +3440,7 @@ int may_expand_vm(struct mm_struct *mm, unsigned long npages) +@@ -2886,6 +3442,7 @@ int may_expand_vm(struct mm_struct *mm, unsigned long npages) lim = rlimit(RLIMIT_AS) >> PAGE_SHIFT; @@ -89347,7 +89347,7 @@ index 8d25fdc..bfb7626 100644 if (cur + npages > lim) return 0; return 1; -@@ -2956,6 +3511,22 @@ int install_special_mapping(struct mm_struct *mm, +@@ -2956,6 +3513,22 @@ int install_special_mapping(struct mm_struct *mm, vma->vm_start = addr; vma->vm_end = addr + len; |