You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
2.0 KiB
58 lines
2.0 KiB
6 years ago
|
autofs-5.1.0 - guard against incorrect umount return
|
||
|
|
||
|
From: Ian Kent <ikent@redhat.com>
|
||
|
|
||
|
If umount(8) returns a fail but the mount is actually umounted autofs
|
||
|
can incorrectly try reconstruct mount triggers. This can lead to the
|
||
|
automount point becoming unresponsive.
|
||
|
---
|
||
|
CHANGELOG | 1 +
|
||
|
daemon/automount.c | 3 ++-
|
||
|
lib/mounts.c | 6 ++++--
|
||
|
3 files changed, 7 insertions(+), 3 deletions(-)
|
||
|
|
||
|
--- autofs-5.0.7.orig/CHANGELOG
|
||
|
+++ autofs-5.0.7/CHANGELOG
|
||
|
@@ -184,6 +184,7 @@
|
||
|
- fix out of order call in program map lookup.
|
||
|
- make service want network-online.
|
||
|
- add remote-fs.target systemd dependency.
|
||
|
+- gaurd against incorrect umount return.
|
||
|
|
||
|
25/07/2012 autofs-5.0.7
|
||
|
=======================
|
||
|
--- autofs-5.0.7.orig/daemon/automount.c
|
||
|
+++ autofs-5.0.7/daemon/automount.c
|
||
|
@@ -532,7 +532,8 @@ static int umount_subtree_mounts(struct
|
||
|
if (!is_mm_root && is_mounted(_PATH_MOUNTED, path, MNTS_REAL)) {
|
||
|
struct amd_entry *entry;
|
||
|
debug(ap->logopt, "unmounting dir = %s", path);
|
||
|
- if (umount_ent(ap, path)) {
|
||
|
+ if (umount_ent(ap, path) &&
|
||
|
+ is_mounted(_PATH_MOUNTED, path, MNTS_REAL)) {
|
||
|
warn(ap->logopt, "could not umount dir %s", path);
|
||
|
left++;
|
||
|
goto done;
|
||
|
--- autofs-5.0.7.orig/lib/mounts.c
|
||
|
+++ autofs-5.0.7/lib/mounts.c
|
||
|
@@ -2126,7 +2126,8 @@ int umount_multi_triggers(struct autofs_
|
||
|
*/
|
||
|
if (is_mounted(_PATH_MOUNTED, root, MNTS_REAL)) {
|
||
|
info(ap->logopt, "unmounting dir = %s", root);
|
||
|
- if (umount_ent(ap, root)) {
|
||
|
+ if (umount_ent(ap, root) &&
|
||
|
+ is_mounted(_PATH_MOUNTED, root, MNTS_REAL)) {
|
||
|
if (mount_multi_triggers(ap, me, root, strlen(root), "/") < 0)
|
||
|
warn(ap->logopt,
|
||
|
"failed to remount offset triggers");
|
||
|
@@ -2227,7 +2228,8 @@ int clean_stale_multi_triggers(struct au
|
||
|
*/
|
||
|
if (oe->ioctlfd != -1 ||
|
||
|
is_mounted(_PROC_MOUNTS, oe->key, MNTS_REAL)) {
|
||
|
- if (umount_ent(ap, oe->key)) {
|
||
|
+ if (umount_ent(ap, oe->key) &&
|
||
|
+ is_mounted(_PROC_MOUNTS, oe->key, MNTS_REAL)) {
|
||
|
debug(ap->logopt,
|
||
|
"offset %s has active mount, invalidate",
|
||
|
oe->key);
|