From df86b009dd7099d2a373f3eddbe5ca997dacace3 Mon Sep 17 00:00:00 2001 From: Mark Asselstine Date: Mon, 1 May 2017 15:09:09 -0400 Subject: [PATCH] usertools: remove devbind module search corner cases The existing code used to search for module files via modinfo has several corner cases which can result in it failing where it should be successful. The call to lower() would cause results returned by 'modinfo' to be forced to lowercase, results which were subsequently passed to exists() which is case sensitive. This was most likely done to capture all variants of failure strings modinfo might return (ie. ERROR/Error/error/...) without thought negative effect to the later call to exists(). For many this is a nonissue but if the module path included non-lowercase alpha characters, something which is easily possible with a non-lowercase kernel-extraversion string, this would cause an issue. We could move the call to lower() to the check for "error" but this still leaves possible corner cases, for modules or module paths with 'error' in them. Instead we will prevent modinfo's stderr from being used as a "good value" for path, meaning we either get a valid path from modinfo, or nothing at all. This removes all corner cases. Ultimately these preliminary checks are unnecessary as exists() will only return True if it is passed a valid path, passing it modinfo's stderr would fail. In keeping with the original code, however, we do some preliminary checks, but we are now free of corner cases. Signed-off-by: Mark Asselstine --- usertools/dpdk-devbind.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/usertools/dpdk-devbind.py b/usertools/dpdk-devbind.py index 7dc8e48a26..2d99e9d827 100755 --- a/usertools/dpdk-devbind.py +++ b/usertools/dpdk-devbind.py @@ -161,12 +161,11 @@ def find_module(mod): # check using depmod try: - depmod_out = check_output(["modinfo", "-n", mod], - stderr=subprocess.STDOUT).lower() - if "error" not in depmod_out: - path = depmod_out.strip() - if exists(path): - return path + with open(os.devnull, "w") as fnull: + path = check_output(["modinfo", "-n", mod], stderr=fnull).strip() + + if path and exists(path): + return path except: # if modinfo can't find module, it fails, so continue pass -- 2.20.1