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

baggins baggins at pld-linux.org
Wed May 7 12:10:01 CEST 2014


commit 1963f4093e4418954e85cf08fb091601e2087a56
Author: Jan Rękorajski <baggins at pld-linux.org>
Date:   Wed May 7 12:04:44 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 9b809da..d1296b8 100644
--- a/kernel-small_fixes.patch
+++ b/kernel-small_fixes.patch
@@ -77,3 +77,45 @@ index 7a0c800..ec5ebbb 100644
  		/* purge any lower objects after partial_lookup */
  		if (bindex < orig_bstart || bindex > orig_bend) {
  			dput(lower_dentry);
+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/8cb11b39546ac528596b711b7fdcaf6aeec0861e



More information about the pld-cvs-commit mailing list