]> git.proxmox.com Git - mirror_ubuntu-eoan-kernel.git/commitdiff
fanotify: Make waits for fanotify events only killable
authorJan Kara <jack@suse.cz>
Thu, 21 Feb 2019 10:47:23 +0000 (11:47 +0100)
committerJan Kara <jack@suse.cz>
Thu, 21 Feb 2019 10:47:23 +0000 (11:47 +0100)
Making waits for response to fanotify permission events interruptible
can result in EINTR returns from open(2) or other syscalls when there's
e.g. AV software that's monitoring the file. Orion reports that e.g.
bash is complaining like:

bash: /etc/bash_completion.d/itweb-settings.bash: Interrupted system call

So for now convert the wait from interruptible to only killable one.
That is mostly invisible to userspace. Sadly this breaks hibernation
with fanotify permission events pending again but we have to put more
thought into how to fix this without regressing userspace visible
behavior.

Reported-by: Orion Poplawski <orion@nwra.com>
Signed-off-by: Jan Kara <jack@suse.cz>
fs/notify/fanotify/fanotify.c

index ff7b8a1cdfe1c7ef914c908f724be30dc48143d9..6b9c27548997162420250a1dfc810b4d293e3436 100644 (file)
@@ -92,8 +92,8 @@ static int fanotify_get_response(struct fsnotify_group *group,
 
        pr_debug("%s: group=%p event=%p\n", __func__, group, event);
 
-       ret = wait_event_interruptible(group->fanotify_data.access_waitq,
-                                      event->state == FAN_EVENT_ANSWERED);
+       ret = wait_event_killable(group->fanotify_data.access_waitq,
+                                 event->state == FAN_EVENT_ANSWERED);
        /* Signal pending? */
        if (ret < 0) {
                spin_lock(&group->notification_lock);