summaryrefslogtreecommitdiffstats
path: root/tools/testing/ktest
diff options
context:
space:
mode:
authorSteven Rostedt (VMware) <rostedt@goodmis.org>2017-03-08 10:16:17 -0500
committerSteven Rostedt (VMware) <rostedt@goodmis.org>2017-03-08 10:16:17 -0500
commit99c014a87979c9244806685f3c3fc7767f79f645 (patch)
tree213b20676928b7ff2f830f4570281650c525c510 /tools/testing/ktest
parent5739438b725c09938bb6af9e4477c4283b8326cf (diff)
ktest: Fix while loop in wait_for_input
The run_command function was changed to use the wait_for_input function to allow having a timeout if the command to run takes too much time. There was a bug in the wait_for_input where it could end up going into an infinite loop. There's two issues here. One is that the return value of the sysread wasn't used for the write (to write a proper size), and that it should continue processing the passed in file descriptor too even if there was input. There was no check for error, if for some reason STDIN returned an error, the function would go into an infinite loop and never exit. Reported-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Tested-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Fixes: 6e98d1b4415f ("ktest: Add timeout to ssh command") Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
Diffstat (limited to 'tools/testing/ktest')
-rwxr-xr-xtools/testing/ktest/ktest.pl7
1 files changed, 4 insertions, 3 deletions
diff --git a/tools/testing/ktest/ktest.pl b/tools/testing/ktest/ktest.pl
index 29470b554711..0c006a2f165d 100755
--- a/tools/testing/ktest/ktest.pl
+++ b/tools/testing/ktest/ktest.pl
@@ -1904,11 +1904,12 @@ sub wait_for_input
1904 1904
1905 # copy data from stdin to the console 1905 # copy data from stdin to the console
1906 if (vec($rout, fileno(\*STDIN), 1) == 1) { 1906 if (vec($rout, fileno(\*STDIN), 1) == 1) {
1907 sysread(\*STDIN, $buf, 1000); 1907 $nr = sysread(\*STDIN, $buf, 1000);
1908 syswrite($fp, $buf, 1000); 1908 syswrite($fp, $buf, $nr) if ($nr > 0);
1909 next;
1910 } 1909 }
1911 1910
1911 next if (vec($rout, fileno($fp), 1) != 1);
1912
1912 $line = ""; 1913 $line = "";
1913 1914
1914 # try to read one char at a time 1915 # try to read one char at a time