[packages/kernel/LINUX_3_10] - fix systemd-readahead: Failed to read event: File too large

baggins baggins at pld-linux.org
Wed May 7 11:51:08 CEST 2014


commit 4619f982d60f4a27fbc9375d916b9bab26371e29
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/6450047e1a021f3960e5206903c5001257a366fa



More information about the pld-cvs-commit mailing list