diff options
| author | Sunny Kumar <sunkumar@redhat.com> | 2018-07-17 15:56:35 +0530 | 
|---|---|---|
| committer | Shyamsundar Ranganathan <srangana@redhat.com> | 2018-08-16 14:31:14 +0000 | 
| commit | e09e3549c293f0d7f448ebb70a4e9fcc671ea098 (patch) | |
| tree | 59ee5bb57a838161004e34bf966b0ced75e8e758 /xlators | |
| parent | 27ffcfebd7e1ec1d068adcfb78cabe014c14c62f (diff) | |
geo-rep : fix possible crash
Problem : In 'glusterd_verify_slave' while tokenizing error message
          we call 'strtok_r' and store return value in 'tmp' which
          can be NULL. We are passing this 'tmp' as 1st argument to
          'strcmp' which will lead to segmentation fault.
Solution : before calling 'strcmp' we should NULL check 'tmp'.
Backport of:
 > Change-Id: Ifd3864b904afe6cd09d9e5a4b55c6d0578e22b9d
 > BUG: 1602121
 > Signed-off-by: Sunny Kumar <sunkumar@redhat.com>
Change-Id: Ifd3864b904afe6cd09d9e5a4b55c6d0578e22b9d
fixes: bz#1611115
Signed-off-by: Sunny Kumar <sunkumar@redhat.com>
Diffstat (limited to 'xlators')
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-geo-rep.c | 7 | 
1 files changed, 5 insertions, 2 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-geo-rep.c b/xlators/mgmt/glusterd/src/glusterd-geo-rep.c index fa40674510f..688b995f0e1 100644 --- a/xlators/mgmt/glusterd/src/glusterd-geo-rep.c +++ b/xlators/mgmt/glusterd/src/glusterd-geo-rep.c @@ -2770,14 +2770,17 @@ glusterd_verify_slave (char *volname, char *slave_url, char *slave_vol,                  /* Tokenize the error message from gverify.sh to figure out                   * if the error is a force blocker or not. */                  tmp = strtok_r (buf, "|", &save_ptr); +                if (!tmp) { +                        ret = -1; +                        goto out; +                }                  if (!strcmp (tmp, "FORCE_BLOCKER"))                          *is_force_blocker = 1;                  else {                          /* No FORCE_BLOCKER flag present so all that is                           * present is the error message. */                          *is_force_blocker = 0; -                        if (tmp) -                                *op_errstr = gf_strdup (tmp); +                        *op_errstr = gf_strdup (tmp);                          ret = -1;                          goto out;                  }  | 
