[PATCH v2] Fix "fuser" command to properly deal with an invalid argument

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The man page of the "fuser" command suggests that the argument can be a
full pathname or inode address. However, the "fuser" command accepts an
invalid argument and prints a bogus result as below:

  crash> fuser x
   PID         TASK        COMM             USAGE
  100507  ffff9914431f4c80  "packagekitd"    fd
  100508  ffff991574e59980  "gmain"          fd
  100509  ffff9914431f3300  "gdbus"          fd
  102020  ffff991574400000  "sshd"           fd
  102043  ffff991441d19980  "sshd"           fd

The current fuser command has no checking mechanism to determine if an
argument is valid or not. Lets add it to handle such cases.

With the patch:
  crash> fuser x
  fuser: invalid argument: x

In addition, also add a note that fuser does not expect an argument other
than an inode address and full pathname, if others are specified, the output
can be an unexpected result.

Reported-by: Buland Kumar Singh <bsingh@xxxxxxxxxx>
Signed-off-by: Lianbo Jiang <lijiang@xxxxxxxxxx>
---
 filesys.c | 8 +++++++-
 help.c    | 3 +++
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/filesys.c b/filesys.c
index d64b54a9b822..307da05a774f 100644
--- a/filesys.c
+++ b/filesys.c
@@ -3421,7 +3421,13 @@ cmd_fuser(void)
 
 	doing_fds = doing_mmap = 0;
 	while (args[optind]) {
-                spec_string = args[optind];
+		ulong spec_addr;
+		spec_string = args[optind];
+		spec_addr = htol(spec_string, RETURN_ON_ERROR|QUIET, NULL);
+		if ((spec_addr == BADADDR || !IS_KVADDR(spec_addr)) &&
+			spec_string[0] != '/')
+			error(FATAL, "invalid argument: %s\n", args[optind]);
+
 		if (STRNEQ(spec_string, "0x") && hexadecimal(spec_string, 0))
 			shift_string_left(spec_string, 2);
 		len = strlen(spec_string);
diff --git a/help.c b/help.c
index 9a5cd3615589..ded4ee19d955 100644
--- a/help.c
+++ b/help.c
@@ -7990,6 +7990,9 @@ char *help_fuser[] = {
 "  listed.\n",
 "    pathname  the full pathname of the file.",
 "    inode     the hexadecimal inode address for the file.",
+"  Note: fuser does not expect an argument other than an inode address",
+"        and a full path, and if others are specified, the output can",
+"        be an unexpected one.",
 "\nEXAMPLES",
 "  Display the tasks using file /usr/lib/libkfm.so.2.0.0\n",
 "    %s> fuser /usr/lib/libkfm.so.2.0.0",
-- 
2.37.1

--
Crash-utility mailing list
Crash-utility@xxxxxxxxxx
https://listman.redhat.com/mailman/listinfo/crash-utility
Contribution Guidelines: https://github.com/crash-utility/crash/wiki




[Index of Archives]     [Fedora Development]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite News]     [KDE Users]     [Fedora Tools]

 

Powered by Linux