Canonicalize path before trying to unmount it.
diff --git a/umount.c b/umount.c
index 3e23b97..0eade5a 100644
--- a/umount.c
+++ b/umount.c
@@ -22,6 +22,7 @@
  *
  */
 
+#include <limits.h>
 #include <stdio.h>
 #include <mntent.h>
 #include <errno.h>
@@ -236,6 +237,8 @@
 
 extern int umount_main(int argc, char **argv)
 {
+	char path[PATH_MAX];
+
 	if (argc < 2) {
 		show_usage();
 	}
@@ -282,7 +285,9 @@
 		else
 			return EXIT_FAILURE;
 	}
-	if (do_umount(*argv) == TRUE)
+	if (realpath(*argv, path) == NULL)
+		perror_msg_and_die("%s", path);
+	if (do_umount(path) == TRUE)
 		return EXIT_SUCCESS;
 	perror_msg_and_die("%s", *argv);
 }
diff --git a/util-linux/umount.c b/util-linux/umount.c
index 3e23b97..0eade5a 100644
--- a/util-linux/umount.c
+++ b/util-linux/umount.c
@@ -22,6 +22,7 @@
  *
  */
 
+#include <limits.h>
 #include <stdio.h>
 #include <mntent.h>
 #include <errno.h>
@@ -236,6 +237,8 @@
 
 extern int umount_main(int argc, char **argv)
 {
+	char path[PATH_MAX];
+
 	if (argc < 2) {
 		show_usage();
 	}
@@ -282,7 +285,9 @@
 		else
 			return EXIT_FAILURE;
 	}
-	if (do_umount(*argv) == TRUE)
+	if (realpath(*argv, path) == NULL)
+		perror_msg_and_die("%s", path);
+	if (do_umount(path) == TRUE)
 		return EXIT_SUCCESS;
 	perror_msg_and_die("%s", *argv);
 }