21ab4e
From ac62aa039935210120b6ff7a954cff7774afa5f3 Mon Sep 17 00:00:00 2001
21ab4e
From: Gaurav Yadav <gyadav@redhat.com>
21ab4e
Date: Mon, 22 May 2017 23:25:47 +0530
21ab4e
Subject: [PATCH 536/539] libglusterfs : Fix crash in glusterd while peer
21ab4e
 probing
21ab4e
21ab4e
glusterd crashes when port is being set explcitly to a
21ab4e
range which is outside greater than short data type range.
21ab4e
Eg. sysctl net.ipv4.ip_local_reserved_ports="49152-49156"
21ab4e
In above case glusterd crashes while parsing the port.
21ab4e
21ab4e
With this fix glusterd will be able to handle port range
21ab4e
between INT_MIN to INT_MAX
21ab4e
21ab4e
> Reviewed-on: https://review.gluster.org/17359
21ab4e
> Smoke: Gluster Build System <jenkins@build.gluster.org>
21ab4e
> NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
21ab4e
> CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
21ab4e
> Reviewed-by: Samikshan Bairagya <samikshan@gmail.com>
21ab4e
> Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
21ab4e
> Reviewed-by: Niels de Vos <ndevos@redhat.com>
21ab4e
> Reviewed-by: Jeff Darcy <jeff@pl.atyp.us>
21ab4e
21ab4e
Change-Id: I7c75ee67937b0e3384502973d96b1c36c89e0fe1
21ab4e
BUG: 1465638
21ab4e
Signed-off-by: Gaurav Yadav <gyadav@redhat.com>
21ab4e
Reviewed-on: https://code.engineering.redhat.com/gerrit/110562
21ab4e
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
21ab4e
---
21ab4e
 libglusterfs/src/common-utils.c             | 10 +++++-----
21ab4e
 tests/bugs/glusterd/bug-1454418-seg-fault.t | 25 +++++++++++++++++++++++++
21ab4e
 2 files changed, 30 insertions(+), 5 deletions(-)
21ab4e
 create mode 100644 tests/bugs/glusterd/bug-1454418-seg-fault.t
21ab4e
21ab4e
diff --git a/libglusterfs/src/common-utils.c b/libglusterfs/src/common-utils.c
21ab4e
index a8f6d13..862ec3b 100644
21ab4e
--- a/libglusterfs/src/common-utils.c
21ab4e
+++ b/libglusterfs/src/common-utils.c
21ab4e
@@ -3198,14 +3198,14 @@ gf_ports_reserved (char *blocked_port, unsigned char *ports, uint32_t ceiling)
21ab4e
 {
21ab4e
         gf_boolean_t    result      = _gf_false;
21ab4e
         char            *range_port = NULL;
21ab4e
-        int16_t         tmp_port1   = -1;
21ab4e
-        int16_t         tmp_port2   = -1;
21ab4e
+        int32_t         tmp_port1   = -1;
21ab4e
+        int32_t         tmp_port2   = -1;
21ab4e
 
21ab4e
         if (strstr (blocked_port, "-") == NULL) {
21ab4e
                 /* get rid of the new line character*/
21ab4e
                 if (blocked_port[strlen(blocked_port) -1] == '\n')
21ab4e
                         blocked_port[strlen(blocked_port) -1] = '\0';
21ab4e
-                if (gf_string2int16 (blocked_port, &tmp_port1) == 0) {
21ab4e
+                if (gf_string2int32 (blocked_port, &tmp_port1) == 0) {
21ab4e
                         if (tmp_port1 > ceiling
21ab4e
                             || tmp_port1 < 0) {
21ab4e
                                 gf_msg ("glusterfs-socket", GF_LOG_WARNING, 0,
21ab4e
@@ -3231,7 +3231,7 @@ gf_ports_reserved (char *blocked_port, unsigned char *ports, uint32_t ceiling)
21ab4e
                         result = _gf_true;
21ab4e
                         goto out;
21ab4e
                 }
21ab4e
-                if (gf_string2int16 (range_port, &tmp_port1) == 0) {
21ab4e
+                if (gf_string2int32 (range_port, &tmp_port1) == 0) {
21ab4e
                         if (tmp_port1 > ceiling)
21ab4e
                                 tmp_port1 = ceiling;
21ab4e
                         if (tmp_port1 < 0)
21ab4e
@@ -3245,7 +3245,7 @@ gf_ports_reserved (char *blocked_port, unsigned char *ports, uint32_t ceiling)
21ab4e
                 /* get rid of the new line character*/
21ab4e
                 if (range_port[strlen(range_port) -1] == '\n')
21ab4e
                         range_port[strlen(range_port) - 1] = '\0';
21ab4e
-                if (gf_string2int16 (range_port, &tmp_port2) == 0) {
21ab4e
+                if (gf_string2int32 (range_port, &tmp_port2) == 0) {
21ab4e
                         if (tmp_port2 > ceiling)
21ab4e
                                 tmp_port2 = ceiling;
21ab4e
                         if (tmp_port2 < 0)
21ab4e
diff --git a/tests/bugs/glusterd/bug-1454418-seg-fault.t b/tests/bugs/glusterd/bug-1454418-seg-fault.t
21ab4e
new file mode 100644
21ab4e
index 0000000..eafaa55
21ab4e
--- /dev/null
21ab4e
+++ b/tests/bugs/glusterd/bug-1454418-seg-fault.t
21ab4e
@@ -0,0 +1,25 @@
21ab4e
+#!/bin/bash
21ab4e
+
21ab4e
+. $(dirname $0)/../../include.rc
21ab4e
+. $(dirname $0)/../../cluster.rc
21ab4e
+
21ab4e
+
21ab4e
+cleanup;
21ab4e
+
21ab4e
+## Setting Port number in specific range
21ab4e
+sysctl net.ipv4.ip_local_reserved_ports="24007-24008,32765-32768,49152-49156"
21ab4e
+
21ab4e
+## Start a 2 node virtual cluster
21ab4e
+TEST launch_cluster 2;
21ab4e
+
21ab4e
+
21ab4e
+## Peer probe server 2 from server 1 cli
21ab4e
+TEST $CLI_1 peer probe $H2;
21ab4e
+
21ab4e
+EXPECT_WITHIN $PROBE_TIMEOUT 1 peer_count
21ab4e
+
21ab4e
+sysctl net.ipv4.ip_local_reserved_ports="
21ab4e
+"
21ab4e
+
21ab4e
+cleanup;
21ab4e
+
21ab4e
-- 
21ab4e
1.8.3.1
21ab4e