[packages/kernel] - fix systemd-readahead: Failed to read event: File too large
arekm
arekm at pld-linux.org
Tue May 6 23:58:41 CEST 2014
commit f36e5ee266e8a6273cfd580b45e44efef86468a1
Author: Arkadiusz Miśkiewicz <arekm at maven.pl>
Date: Tue May 6 23:58:35 2014 +0200
- fix systemd-readahead: Failed to read event: File too large
kernel-small_fixes.patch | 42 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 42 insertions(+)
---
diff --git a/kernel-small_fixes.patch b/kernel-small_fixes.patch
index 740b286..ab5a074 100644
--- a/kernel-small_fixes.patch
+++ b/kernel-small_fixes.patch
@@ -177,3 +177,45 @@ To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
+From 1e2ee49f7f1b79f0b14884fe6a602f0411b39552 Mon Sep 17 00:00:00 2001
+From: Will Woods <wwoods at redhat.com>
+Date: Tue, 6 May 2014 12:50:10 -0700
+Subject: fanotify: fix -EOVERFLOW with large files on 64-bit
+
+On 64-bit systems, O_LARGEFILE is automatically added to flags inside
+the open() syscall (also openat(), blkdev_open(), etc). Userspace
+therefore defines O_LARGEFILE to be 0 - you can use it, but it's a
+no-op. Everything should be O_LARGEFILE by default.
+
+But: when fanotify does create_fd() it uses dentry_open(), which skips
+all that. And userspace can't set O_LARGEFILE in fanotify_init()
+because it's defined to 0. So if fanotify gets an event regarding a
+large file, the read() will just fail with -EOVERFLOW.
+
+This patch adds O_LARGEFILE to fanotify_init()'s event_f_flags on 64-bit
+systems, using the same test as open()/openat()/etc.
+
+Addresses https://bugzilla.redhat.com/show_bug.cgi?id=696821
+
+Signed-off-by: Will Woods <wwoods at redhat.com>
+Acked-by: Eric Paris <eparis at redhat.com>
+Reviewed-by: Jan Kara <jack at suse.cz>
+Signed-off-by: Andrew Morton <akpm at linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds at linux-foundation.org>
+
+diff --git a/fs/notify/fanotify/fanotify_user.c b/fs/notify/fanotify/fanotify_user.c
+index 4e565c8..732648b 100644
+--- a/fs/notify/fanotify/fanotify_user.c
++++ b/fs/notify/fanotify/fanotify_user.c
+@@ -698,6 +698,8 @@ SYSCALL_DEFINE2(fanotify_init, unsigned int, flags, unsigned int, event_f_flags)
+ }
+ group->overflow_event = &oevent->fse;
+
++ if (force_o_largefile())
++ event_f_flags |= O_LARGEFILE;
+ group->fanotify_data.f_flags = event_f_flags;
+ #ifdef CONFIG_FANOTIFY_ACCESS_PERMISSIONS
+ spin_lock_init(&group->fanotify_data.access_lock);
+--
+cgit v0.10.1
+
================================================================
---- gitweb:
http://git.pld-linux.org/gitweb.cgi/packages/kernel.git/commitdiff/f36e5ee266e8a6273cfd580b45e44efef86468a1
More information about the pld-cvs-commit
mailing list