>-----Original Message-----
>From: Kavanagh, Mark B
>Sent: Monday, August 8, 2016 9:15 AM
>To: Bodireddy, Bhanuprakash <bhanuprakash.bodire...@intel.com>;
>dev@openvswitch.org
>Subject: RE: [ovs-dev] [PATCH 2/2] ovs-appctl: Fix potential crash with timeout
>argument
>
>>
>>ovs-appctl can crash with missing timeout argument.
>>  # ovs-appctl --timeout= dpif-netdev/pmd-stats-show
>>
>>Fix by using strtol and validating the timeout value.
>>
>>Signed-off-by: Bhanuprakash Bodireddy
>><bhanuprakash.bodire...@intel.com>
>>---
>> utilities/ovs-appctl.c | 9 ++++++++-
>> 1 file changed, 8 insertions(+), 1 deletion(-)
>>
>>diff --git a/utilities/ovs-appctl.c b/utilities/ovs-appctl.c index
>>8f87cc4..2543ee9 100644
>>--- a/utilities/ovs-appctl.c
>>+++ b/utilities/ovs-appctl.c
>>@@ -127,6 +127,7 @@ parse_command_line(int argc, char *argv[])
>>     char *short_options_ =
>ovs_cmdl_long_options_to_short_options(long_options);
>>     char *short_options = xasprintf("+%s", short_options_);
>>     const char *target;
>>+    int timeout;
>>     int e_options;
>>
>>     target = NULL;
>>@@ -165,7 +166,13 @@ parse_command_line(int argc, char *argv[])
>>             exit(EXIT_SUCCESS);
>>
>>         case 'T':
>>-            time_alarm(atoi(optarg));
>>+            timeout = strtol(optarg, NULL, 10);
>
>Hi Bhanu,
>
>To ensure that the user has supplied a valid numeric timeout value, you
>should provide a non-NULL 'endptr' parameter, and perform the usual checks
>on it, as described in the strtol man page:
>       " If endptr is not NULL, strtol() stores the address of the first
>       invalid character in *endptr.  If there were no digits at all,
>       strtol() stores the original value of nptr in *endptr (and returns
>       0).  In particular, if *nptr is not '\0' but **endptr is '\0' on
>       return, the entire string is valid."
>
Thanks for reviewing the patch Mark, you have a point and I am sending out 
another version of the patch. I have verified all the below conditions with the 
v2 and found to be working good.

ovs-appctl --timeout= dpif-netdev/pmd-stats-show   (no timeout specified)
ovs-appctl --timeout=0 dpif-netdev/pmd-stats-show  (timeout 0, invalid)
ovs-appctl --timeout=12345675345212151252543523524524 
dpif-netdev/pmd-stats-show   (overflow case)
ovs-appctl --timeout=123abc dpif-netdev/pmd-stats-show (invalid input)
ovs-appctl --timeout=1 dpif-netdev/pmd-stats-show  (valid input)

Regards,
Bhanu Prakash.

>
>
>>+            if (timeout <= 0) {
>>+                ovs_fatal(0, "timeout value %s on -t or --timeout is 
>>invalid",
>>+                               optarg);
>>+            } else {
>>+                time_alarm(timeout);
>>+            }
>>             break;
>>
>>         case 'V':
>>--
>>2.4.11
>>
>>_______________________________________________
>>dev mailing list
>>dev@openvswitch.org
>>http://openvswitch.org/mailman/listinfo/dev
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to