From 457957e6de2a4319ba4d3f200463e9a7978958cbe4d7df6e75a61c3938b52576 Mon Sep 17 00:00:00 2001 From: Bin Liu Date: Mon, 5 Mar 2018 08:32:16 +0000 Subject: [PATCH] Accepting request 582536 from home:BinLiu:branches:network:ha-clustering:Factory - some coverity fixes for corosync on upstream(bsc#1083895) Added: 0015-coverity-fixes.patch OBS-URL: https://build.opensuse.org/request/show/582536 OBS-URL: https://build.opensuse.org/package/show/network:ha-clustering:Factory/corosync?expand=0&rev=135 --- 0015-coverity-fixes.patch | 999 ++++++++++++++++++++++++++++++++++++++ corosync.changes | 6 + corosync.spec | 2 + 3 files changed, 1007 insertions(+) create mode 100644 0015-coverity-fixes.patch diff --git a/0015-coverity-fixes.patch b/0015-coverity-fixes.patch new file mode 100644 index 0000000..6f7274f --- /dev/null +++ b/0015-coverity-fixes.patch @@ -0,0 +1,999 @@ +diff --git a/init/corosync-notifyd.in b/init/corosync-notifyd.in +index 0f34e791..d3575795 100755 +--- a/init/corosync-notifyd.in ++++ b/init/corosync-notifyd.in +@@ -99,7 +99,7 @@ stop() + ! status $prog > /dev/null 2>&1 && return + + echo -n "Signaling $desc ($prog) to terminate: " +- kill -TERM $(pidof $prog) > /dev/null 2>&1 ++ kill -TERM "$(pidof $prog)" > /dev/null 2>&1 + success + echo + +diff --git a/init/corosync-qdevice.in b/init/corosync-qdevice.in +index 8e4bb291..1cd32709 100755 +--- a/init/corosync-qdevice.in ++++ b/init/corosync-qdevice.in +@@ -113,7 +113,7 @@ stop() + ! status $prog > /dev/null 2>&1 && return + + echo -n "Signaling $desc ($prog) to terminate: " +- kill -TERM $(pidof $prog) > /dev/null 2>&1 ++ kill -TERM "$(pidof $prog)" > /dev/null 2>&1 + success + echo + +diff --git a/init/corosync-qnetd.in b/init/corosync-qnetd.in +index 681ea085..c06dbb97 100755 +--- a/init/corosync-qnetd.in ++++ b/init/corosync-qnetd.in +@@ -120,7 +120,7 @@ stop() + ! status $prog > /dev/null 2>&1 && return + + echo -n "Signaling $desc ($prog) to terminate: " +- kill -TERM $(pidof $prog) > /dev/null 2>&1 ++ kill -TERM "$(pidof $prog)" > /dev/null 2>&1 + success + echo + +diff --git a/init/corosync.in b/init/corosync.in +index 0868f116..fc3ce58c 100755 +--- a/init/corosync.in ++++ b/init/corosync.in +@@ -128,7 +128,7 @@ stop() + ! status $prog > /dev/null 2>&1 && return + + echo -n "Signaling $desc ($prog) to terminate: " +- kill -TERM $(pidof $prog) > /dev/null 2>&1 ++ kill -TERM "$(pidof $prog)" > /dev/null 2>&1 + success + echo + +diff --git a/tools/corosync-blackbox.sh b/tools/corosync-blackbox.sh +index fb5ce96f..1ca831f3 100644 +--- a/tools/corosync-blackbox.sh ++++ b/tools/corosync-blackbox.sh +@@ -29,6 +29,6 @@ + # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + # THE POSSIBILITY OF SUCH DAMAGE. + +-corosync-cmapctl -s runtime.blackbox.dump_state str $(date +%s) +-corosync-cmapctl -s runtime.blackbox.dump_flight_data str $(date +%s) ++corosync-cmapctl -s runtime.blackbox.dump_state str "$(date +%s)" ++corosync-cmapctl -s runtime.blackbox.dump_flight_data str "$(date +%s)" + qb-blackbox "@LOCALSTATEDIR@/lib/corosync/fdata" + + +diff --git a/qdevices/corosync-qdevice-net-certutil.sh b/qdevices/corosync-qdevice-net-certutil.sh +index 10b47c8a..b3286295 100644 +--- a/qdevices/corosync-qdevice-net-certutil.sh ++++ b/qdevices/corosync-qdevice-net-certutil.sh +@@ -37,19 +37,13 @@ + BASE_DIR="@COROSYSCONFDIR@/qdevice/net" + DB_DIR_QNETD="@COROSYSCONFDIR@/qnetd/nssdb" + DB_DIR_NODE="$BASE_DIR/nssdb" +-# Validity of certificate (months) +-CRT_VALIDITY=1200 + CA_NICKNAME="QNet CA" +-SERVER_NICKNAME="QNetd Cert" + CLUSTER_NICKNAME="Cluster Cert" +-CA_SUBJECT="CN=QNet CA" +-SERVER_SUBJECT="CN=Qnetd Server" + PWD_FILE_BASE="pwdfile.txt" + NOISE_FILE_BASE="noise.txt" + SERIAL_NO_FILE_BASE="serial.txt" + CA_EXPORT_FILE="$DB_DIR_QNETD/qnetd-cacert.crt" + CRQ_FILE_BASE="qdevice-net-node.crq" +-CRT_FILE_BASE="" # Generated from cluster name + P12_FILE_BASE="qdevice-net-node.p12" + QNETD_CERTUTIL_CMD="corosync-qnetd-certutil" + +@@ -309,7 +303,6 @@ PWD_FILE="$DB_DIR/$PWD_FILE_BASE" + NOISE_FILE="$DB_DIR/$NOISE_FILE_BASE" + SERIAL_NO_FILE="$DB_DIR/$SERIAL_NO_FILE_BASE" + CRQ_FILE="$DB_DIR/$CRQ_FILE_BASE" +-CRT_FILE="$DB_DIR/cluster-$CLUSTER_NAME.crt" + P12_FILE="$DB_DIR/$P12_FILE_BASE" + + case "$OPERATION" in +diff --git a/qdevices/corosync-qnetd-certutil.sh b/qdevices/corosync-qnetd-certutil.sh +index 726f482f..fa1d229d 100644 +--- a/qdevices/corosync-qnetd-certutil.sh ++++ b/qdevices/corosync-qnetd-certutil.sh +@@ -40,14 +40,12 @@ DB_DIR="$CONFIG_DIR/nssdb" + CRT_VALIDITY=1200 + CA_NICKNAME="QNet CA" + SERVER_NICKNAME="QNetd Cert" +-CLUSTER_NICKNAME="Cluster Cert" + CA_SUBJECT="CN=QNet CA" + SERVER_SUBJECT="CN=Qnetd Server" + PWD_FILE="$DB_DIR/pwdfile.txt" + NOISE_FILE="$DB_DIR/noise.txt" + SERIAL_NO_FILE="$DB_DIR/serial.txt" + CA_EXPORT_FILE="$DB_DIR/qnetd-cacert.crt" +-CRT_FILE_BASE="" # Generated from cluster name + + usage() { + echo "$0: [-i|-s] [-c certificate] [-n cluster_name]" +@@ -62,7 +60,7 @@ usage() { + + chown_ref_cfgdir() { + if [ "$UID" == "0" ];then +- chown --reference="$CONFIG_DIR" "$@" 2>/dev/null || chown `stat -f "%u:%g" "$CONFIG_DIR"` "$@" 2>/dev/null || return $? ++ chown --reference="$CONFIG_DIR" "$@" 2>/dev/null || chown "$(stat -f "%u:%g" "$CONFIG_DIR")" "$@" 2>/dev/null || return $? + fi + } + +@@ -123,14 +121,14 @@ init_qnetd_ca() { + echo "Creating new CA" + # Create self-signed certificate (CA). Asks 3 questions (is this CA, lifetime and critical extension + echo -e "y\n0\ny\n" | certutil -S -n "$CA_NICKNAME" -s "$CA_SUBJECT" -x \ +- -t "CT,," -m `get_serial_no` -v $CRT_VALIDITY -d "$DB_DIR" \ ++ -t "CT,," -m "$(get_serial_no)" -v $CRT_VALIDITY -d "$DB_DIR" \ + -z "$NOISE_FILE" -f "$PWD_FILE" -2 + # Export CA certificate in ascii + certutil -L -d "$DB_DIR" -n "$CA_NICKNAME" > "$CA_EXPORT_FILE" + certutil -L -d "$DB_DIR" -n "$CA_NICKNAME" -a >> "$CA_EXPORT_FILE" + chown_ref_cfgdir "$CA_EXPORT_FILE" + +- certutil -S -n "$SERVER_NICKNAME" -s "$SERVER_SUBJECT" -c "$CA_NICKNAME" -t "u,u,u" -m `get_serial_no` \ ++ certutil -S -n "$SERVER_NICKNAME" -s "$SERVER_SUBJECT" -c "$CA_NICKNAME" -t "u,u,u" -m "$(get_serial_no)" \ + -v $CRT_VALIDITY -d "$DB_DIR" -z "$NOISE_FILE" -f "$PWD_FILE" + + echo "QNetd CA certificate is exported as $CA_EXPORT_FILE" +@@ -145,7 +143,7 @@ sign_cluster_cert() { + fi + + echo "Signing cluster certificate" +- certutil -C -v "$CRT_VALIDITY" -m `get_serial_no` -i "$CERTIFICATE_FILE" -o "$CRT_FILE" -c "$CA_NICKNAME" -d "$DB_DIR" ++ certutil -C -v "$CRT_VALIDITY" -m "$(get_serial_no)" -i "$CERTIFICATE_FILE" -o "$CRT_FILE" -c "$CA_NICKNAME" -d "$DB_DIR" + chown_ref_cfgdir "$CRT_FILE" + + echo "Certificate stored in $CRT_FILE" + +diff --git a/cts/agents/sam_test_agent.c b/cts/agents/sam_test_agent.c +index c395db28..39d406c3 100644 +--- a/cts/agents/sam_test_agent.c ++++ b/cts/agents/sam_test_agent.c +@@ -1220,7 +1220,6 @@ static void do_command (int sock, char* func, char*args[], int num_args) + } else if (strcmp ("sam_stop", func) == 0) { + err = sam_stop (); + if (err != CS_OK) { +- err = -1; + qb_log (LOG_ERR,"RPC:%s sam_stop failed!", func); + snprintf (response, 100, "%s", FAIL_STR); + } + +diff --git a/qdevices/process-list.c b/qdevices/process-list.c +index ad2d598b..e5c20db4 100644 +--- a/qdevices/process-list.c ++++ b/qdevices/process-list.c +@@ -161,6 +161,7 @@ process_list_parse_command(const char *command, size_t *no_params) + if (res_argv[zi] == NULL) { + process_list_free_argv(*no_params, res_argv); + res_argv = NULL; ++ goto exit_res; + } + zi++; + } + +diff --git a/tools/corosync-quorumtool.c b/tools/corosync-quorumtool.c +index b37e67f7..2ea006b5 100644 +--- a/tools/corosync-quorumtool.c ++++ b/tools/corosync-quorumtool.c +@@ -532,7 +532,9 @@ static void display_nodes_data(nodeid_format_t nodeid_format, name_format_t name + printf("%s", g_view_list[i].name); + if (g_view_list[i].node_id == our_nodeid) { + printf(" (local)"); +- our_flags = info[i].flags; ++ if (v_handle) { ++ our_flags = info[i].flags; ++ } + } + printf("\n"); + } + +diff --git a/qdevices/corosync-qdevice-net-certutil.sh b/qdevices/corosync-qdevice-net-certutil.sh +index b3286295..22bc899a 100644 +--- a/qdevices/corosync-qdevice-net-certutil.sh ++++ b/qdevices/corosync-qdevice-net-certutil.sh +@@ -369,7 +369,7 @@ case "$OPERATION" in + + master_node="$1" + shift 1 +- other_nodes="$@" ++ other_nodes="$*" + + if [ "$CLUSTER_NAME" == "" ];then + echo "You have to specify cluster name" >&2 + +diff --git a/qdevices/qnetd-ipc.c b/qdevices/qnetd-ipc.c +index 0d40275e..e5228373 100644 +--- a/qdevices/qnetd-ipc.c ++++ b/qdevices/qnetd-ipc.c +@@ -174,7 +174,8 @@ void + qnetd_ipc_client_disconnect(struct qnetd_instance *instance, struct unix_socket_client *client) + { + +- if (PR_DestroySocketPollFd( ++ if ((struct qnetd_ipc_user_data *)(client)->user_data != NULL && ++ PR_DestroySocketPollFd( + ((struct qnetd_ipc_user_data *)(client)->user_data)->nspr_poll_fd) != PR_SUCCESS) { + qnetd_log_nss(LOG_WARNING, "Unable to destroy client IPC poll socket fd"); + } + +diff --git a/qdevices/Makefile.am b/qdevices/Makefile.am +index 0ab73464..28388a93 100644 +--- a/qdevices/Makefile.am ++++ b/qdevices/Makefile.am +@@ -156,9 +156,9 @@ corosync-qdevice-net-certutil: corosync-qdevice-net-certutil.sh + $< > $@ + + TESTS = qnetd-cluster-list.test dynar.test dynar-simple-lex.test \ +- dynar-getopt-lex.test process-list.test ++ dynar-getopt-lex.test process-list.test utils.test + check_PROGRAMS = qnetd-cluster-list.test dynar.test dynar-simple-lex.test \ +- dynar-getopt-lex.test process-list.test ++ dynar-getopt-lex.test process-list.test utils.test + + qnetd_cluster_list_test_SOURCES = qnetd-cluster-list.c test-qnetd-cluster-list.c \ + qnetd-cluster.c qnetd-cluster.h \ +@@ -172,5 +172,6 @@ dynar_simple_lex_test_SOURCES = test-dynar-simple-lex.c dynar.c dynar-str.c dyna + dynar_getopt_lex_test_SOURCES = test-dynar-getopt-lex.c dynar.c dynar-str.c dynar-getopt-lex.c + process_list_test_SOURCES = test-process-list.c dynar.c dynar-str.c dynar-simple-lex.c \ + process-list.c ++utils_test_SOURCES = test-utils.c utils.c + + endif +diff --git a/qdevices/test-utils.c b/qdevices/test-utils.c +new file mode 100644 +index 00000000..00d5b464 +--- /dev/null ++++ b/qdevices/test-utils.c +@@ -0,0 +1,81 @@ ++/* ++ * Copyright (c) 2015-2018 Red Hat, Inc. ++ * ++ * All rights reserved. ++ * ++ * Author: Jan Friesse (jfriesse@redhat.com) ++ * ++ * This software licensed under BSD license, the text of which follows: ++ * ++ * Redistribution and use in source and binary forms, with or without ++ * modification, are permitted provided that the following conditions are met: ++ * ++ * - Redistributions of source code must retain the above copyright notice, ++ * this list of conditions and the following disclaimer. ++ * - Redistributions in binary form must reproduce the above copyright notice, ++ * this list of conditions and the following disclaimer in the documentation ++ * and/or other materials provided with the distribution. ++ * - Neither the name of the Red Hat, Inc. nor the names of its ++ * contributors may be used to endorse or promote products derived from this ++ * software without specific prior written permission. ++ * ++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" ++ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ++ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE ++ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR ++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF ++ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS ++ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN ++ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ++ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF ++ * THE POSSIBILITY OF SUCH DAMAGE. ++ */ ++ ++#include ++#include ++#include ++#include ++ ++#include "utils.h" ++ ++int ++main(void) ++{ ++ long long int ll; ++ long long int lli; ++ char buf[32]; ++ ++ assert(utils_strtonum("0", 0, 100, &ll) == 0); ++ assert(ll == 0); ++ ++ assert(utils_strtonum("100", 0, 100, &ll) == 0); ++ assert(ll == 100); ++ ++ assert(utils_strtonum("101", 0, 100, &ll) != 0); ++ assert(utils_strtonum("0", 1, 100, &ll) != 0); ++ ++ errno = ERANGE; ++ assert(utils_strtonum("10", 0, 100, &ll) == 0); ++ assert(ll == 10); ++ ++ assert(utils_strtonum("-1", -1, 0, &ll) == 0); ++ assert(ll == -1); ++ ++ assert(utils_strtonum("-10", -20, -10, &ll) == 0); ++ assert(ll == -10); ++ ++ assert(utils_strtonum("0", 1, 0, &ll) == -1); ++ ++ for (lli = -100; lli <= 100; lli++) { ++ assert(snprintf(buf, sizeof(buf), "%lld", lli) > 0); ++ ++ assert(utils_strtonum(buf, -100, 100, &ll) == 0); ++ assert(ll == lli); ++ } ++ ++ assert(utils_strtonum("test", -1000, 1000, &ll) == -1); ++ assert(utils_strtonum("12a", -1000, 1000, &ll) == -1); ++ ++ return (0); ++} +diff --git a/qdevices/utils.c b/qdevices/utils.c +index 9574c96a..aba921c3 100644 +--- a/qdevices/utils.c ++++ b/qdevices/utils.c +@@ -1,5 +1,5 @@ + /* +- * Copyright (c) 2015-2016 Red Hat, Inc. ++ * Copyright (c) 2015-2018 Red Hat, Inc. + * + * All rights reserved. + * +@@ -206,3 +206,33 @@ utils_fd_set_non_blocking(int fd) + + return (0); + } ++ ++/* ++ * Safer wrapper of strtoll. Return 0 on success, otherwise -1. ++ */ ++int ++utils_strtonum(const char *str, long long int min_val, long long int max_val, ++ long long int *res) ++{ ++ long long int tmp_ll; ++ char *ep; ++ ++ if (min_val > max_val) { ++ return (-1); ++ } ++ ++ errno = 0; ++ ++ tmp_ll = strtoll(str, &ep, 10); ++ if (ep == str || *ep != '\0' || errno != 0) { ++ return (-1); ++ } ++ ++ if (tmp_ll < min_val || tmp_ll > max_val) { ++ return (-1); ++ } ++ ++ *res = tmp_ll; ++ ++ return (0); ++} +diff --git a/qdevices/utils.h b/qdevices/utils.h +index fe9b5b47..0d96df43 100644 +--- a/qdevices/utils.h ++++ b/qdevices/utils.h +@@ -1,5 +1,5 @@ + /* +- * Copyright (c) 2015-2016 Red Hat, Inc. ++ * Copyright (c) 2015-2018 Red Hat, Inc. + * + * All rights reserved. + * +@@ -62,6 +62,9 @@ extern void utils_tty_detach(void); + + extern int utils_fd_set_non_blocking(int fd); + ++extern int utils_strtonum(const char *str, long long int min_val, ++ long long int max_val, long long int *res); ++ + #ifdef __cplusplus + } + #endif + +diff --git a/qdevices/qdevice-advanced-settings.c b/qdevices/qdevice-advanced-settings.c +index e3d7a9a9..41df6ca5 100644 +--- a/qdevices/qdevice-advanced-settings.c ++++ b/qdevices/qdevice-advanced-settings.c +@@ -33,8 +33,10 @@ + */ + + #include +-#include ++ + #include ++#include ++#include + + #include "dynar.h" + #include "dynar-getopt-lex.h" +@@ -126,7 +128,6 @@ qdevice_advanced_settings_set(struct qdevice_advanced_settings *settings, + const char *option, const char *value) + { + long long int tmpll; +- char *ep; + + if (strcasecmp(option, "lock_file") == 0) { + free(settings->lock_file); +@@ -141,15 +142,13 @@ qdevice_advanced_settings_set(struct qdevice_advanced_settings *settings, + return (-1); + } + } else if (strcasecmp(option, "local_socket_backlog") == 0) { +- tmpll = strtoll(value, &ep, 10); +- if (tmpll < QDEVICE_MIN_LOCAL_SOCKET_BACKLOG || errno != 0 || *ep != '\0') { ++ if (utils_strtonum(value, QDEVICE_MIN_LOCAL_SOCKET_BACKLOG, INT_MAX, &tmpll) == -1) { + return (-2); + } + + settings->local_socket_backlog = (int)tmpll; + } else if (strcasecmp(option, "max_cs_try_again") == 0) { +- tmpll = strtoll(value, &ep, 10); +- if (tmpll < QDEVICE_MIN_MAX_CS_TRY_AGAIN || errno != 0 || *ep != '\0') { ++ if (utils_strtonum(value, QDEVICE_MIN_MAX_CS_TRY_AGAIN, INT_MAX, &tmpll) == -1) { + return (-2); + } + +@@ -161,71 +160,70 @@ qdevice_advanced_settings_set(struct qdevice_advanced_settings *settings, + return (-1); + } + } else if (strcasecmp(option, "ipc_max_clients") == 0) { +- tmpll = strtoll(value, &ep, 10); +- if (tmpll < QDEVICE_MIN_IPC_MAX_CLIENTS || errno != 0 || *ep != '\0') { ++ if (utils_strtonum(value, QDEVICE_MIN_IPC_MAX_CLIENTS, LLONG_MAX, &tmpll) == -1) { + return (-2); + } + + settings->ipc_max_clients = (size_t)tmpll; + } else if (strcasecmp(option, "ipc_max_receive_size") == 0) { +- tmpll = strtoll(value, &ep, 10); +- if (tmpll < QDEVICE_MIN_IPC_RECEIVE_SEND_SIZE || errno != 0 || *ep != '\0') { ++ if (utils_strtonum(value, QDEVICE_MIN_IPC_RECEIVE_SEND_SIZE, LLONG_MAX, ++ &tmpll) == -1) { + return (-2); + } + + settings->ipc_max_receive_size = (size_t)tmpll; + } else if (strcasecmp(option, "ipc_max_send_size") == 0) { +- tmpll = strtoll(value, &ep, 10); +- if (tmpll < QDEVICE_MIN_IPC_RECEIVE_SEND_SIZE || errno != 0 || *ep != '\0') { ++ if (utils_strtonum(value, QDEVICE_MIN_IPC_RECEIVE_SEND_SIZE, LLONG_MAX, ++ &tmpll) == -1) { + return (-2); + } + + settings->ipc_max_send_size = (size_t)tmpll; + } else if (strcasecmp(option, "heuristics_ipc_max_send_buffers") == 0) { +- tmpll = strtoll(value, &ep, 10); +- if (tmpll < QDEVICE_MIN_HEURISTICS_IPC_MAX_SEND_BUFFERS || errno != 0 || *ep != '\0') { ++ if (utils_strtonum(value, QDEVICE_MIN_HEURISTICS_IPC_MAX_SEND_BUFFERS, LLONG_MAX, ++ &tmpll) == -1) { + return (-2); + } + + settings->heuristics_ipc_max_send_buffers = (size_t)tmpll; + } else if (strcasecmp(option, "heuristics_ipc_max_send_receive_size") == 0) { +- tmpll = strtoll(value, &ep, 10); +- if (tmpll < QDEVICE_MIN_HEURISTICS_IPC_MAX_SEND_RECEIVE_SIZE || errno != 0 || *ep != '\0') { ++ if (utils_strtonum(value, QDEVICE_MIN_HEURISTICS_IPC_MAX_SEND_RECEIVE_SIZE, LLONG_MAX, ++ &tmpll) == -1) { + return (-2); + } + + settings->heuristics_ipc_max_send_receive_size = (size_t)tmpll; + } else if (strcasecmp(option, "heuristics_min_timeout") == 0) { +- tmpll = strtoll(value, &ep, 10); +- if (tmpll < QDEVICE_MIN_HEURISTICS_TIMEOUT || errno != 0 || *ep != '\0') { ++ if (utils_strtonum(value, QDEVICE_MIN_HEURISTICS_TIMEOUT, UINT32_MAX, ++ &tmpll) == -1) { + return (-2); + } + + settings->heuristics_min_timeout = (uint32_t)tmpll; + } else if (strcasecmp(option, "heuristics_max_timeout") == 0) { +- tmpll = strtoll(value, &ep, 10); +- if (tmpll < QDEVICE_MIN_HEURISTICS_TIMEOUT || errno != 0 || *ep != '\0') { ++ if (utils_strtonum(value, QDEVICE_MIN_HEURISTICS_TIMEOUT, UINT32_MAX, ++ &tmpll) == -1) { + return (-2); + } + + settings->heuristics_max_timeout = (uint32_t)tmpll; + } else if (strcasecmp(option, "heuristics_min_interval") == 0) { +- tmpll = strtoll(value, &ep, 10); +- if (tmpll < QDEVICE_MIN_HEURISTICS_INTERVAL || errno != 0 || *ep != '\0') { ++ if (utils_strtonum(value, QDEVICE_MIN_HEURISTICS_INTERVAL, UINT32_MAX, ++ &tmpll) == -1) { + return (-2); + } + + settings->heuristics_min_interval = (uint32_t)tmpll; + } else if (strcasecmp(option, "heuristics_max_interval") == 0) { +- tmpll = strtoll(value, &ep, 10); +- if (tmpll < QDEVICE_MIN_HEURISTICS_INTERVAL || errno != 0 || *ep != '\0') { ++ if (utils_strtonum(value, QDEVICE_MIN_HEURISTICS_INTERVAL, UINT32_MAX, ++ &tmpll) == -1) { + return (-2); + } + + settings->heuristics_max_interval = (uint32_t)tmpll; + } else if (strcasecmp(option, "heuristics_max_execs") == 0) { +- tmpll = strtoll(value, &ep, 10); +- if (tmpll < QDEVICE_MIN_HEURISTICS_MAX_EXECS || errno != 0 || *ep != '\0') { ++ if (utils_strtonum(value, QDEVICE_MIN_HEURISTICS_MAX_EXECS, LLONG_MAX, ++ &tmpll) == -1) { + return (-2); + } + +@@ -237,15 +235,15 @@ qdevice_advanced_settings_set(struct qdevice_advanced_settings *settings, + + settings->heuristics_use_execvp = (uint8_t)tmpll; + } else if (strcasecmp(option, "heuristics_max_processes") == 0) { +- tmpll = strtoll(value, &ep, 10); +- if (tmpll < QDEVICE_MIN_HEURISTICS_MAX_PROCESSES || errno != 0 || *ep != '\0') { ++ if (utils_strtonum(value, QDEVICE_MIN_HEURISTICS_MAX_PROCESSES, LLONG_MAX, ++ &tmpll) == -1) { + return (-2); + } + + settings->heuristics_max_processes = (size_t)tmpll; + } else if (strcasecmp(option, "heuristics_kill_list_interval") == 0) { +- tmpll = strtoll(value, &ep, 10); +- if (tmpll < QDEVICE_MIN_HEURISTICS_KILL_LIST_INTERVAL || errno != 0 || *ep != '\0') { ++ if (utils_strtonum(value, QDEVICE_MIN_HEURISTICS_KILL_LIST_INTERVAL, UINT32_MAX, ++ &tmpll) == -1) { + return (-2); + } + +@@ -257,36 +255,36 @@ qdevice_advanced_settings_set(struct qdevice_advanced_settings *settings, + return (-1); + } + } else if (strcasecmp(option, "net_initial_msg_receive_size") == 0) { +- tmpll = strtoll(value, &ep, 10); +- if (tmpll < QDEVICE_NET_MIN_MSG_RECEIVE_SEND_SIZE || errno != 0 || *ep != '\0') { ++ if (utils_strtonum(value, QDEVICE_NET_MIN_MSG_RECEIVE_SEND_SIZE, LLONG_MAX, ++ &tmpll) == -1) { + return (-2); + } + + settings->net_initial_msg_receive_size = (size_t)tmpll; + } else if (strcasecmp(option, "net_initial_msg_send_size") == 0) { +- tmpll = strtoll(value, &ep, 10); +- if (tmpll < QDEVICE_NET_MIN_MSG_RECEIVE_SEND_SIZE || errno != 0 || *ep != '\0') { ++ if (utils_strtonum(value, QDEVICE_NET_MIN_MSG_RECEIVE_SEND_SIZE, LLONG_MAX, ++ &tmpll) == -1) { + return (-2); + } + + settings->net_initial_msg_send_size = (size_t)tmpll; + } else if (strcasecmp(option, "net_min_msg_send_size") == 0) { +- tmpll = strtoll(value, &ep, 10); +- if (tmpll < QDEVICE_NET_MIN_MSG_RECEIVE_SEND_SIZE || errno != 0 || *ep != '\0') { ++ if (utils_strtonum(value, QDEVICE_NET_MIN_MSG_RECEIVE_SEND_SIZE, LLONG_MAX, ++ &tmpll) == -1) { + return (-2); + } + + settings->net_min_msg_send_size = (size_t)tmpll; + } else if (strcasecmp(option, "net_max_msg_receive_size") == 0) { +- tmpll = strtoll(value, &ep, 10); +- if (tmpll < QDEVICE_NET_MIN_MSG_RECEIVE_SEND_SIZE || errno != 0 || *ep != '\0') { ++ if (utils_strtonum(value, QDEVICE_NET_MIN_MSG_RECEIVE_SEND_SIZE, LLONG_MAX, ++ &tmpll) == -1) { + return (-2); + } + + settings->net_max_msg_receive_size = (size_t)tmpll; + } else if (strcasecmp(option, "net_max_send_buffers") == 0) { +- tmpll = strtoll(value, &ep, 10); +- if (tmpll < QDEVICE_NET_MIN_MAX_SEND_BUFFERS || errno != 0 || *ep != '\0') { ++ if (utils_strtonum(value, QDEVICE_NET_MIN_MAX_SEND_BUFFERS, LLONG_MAX, ++ &tmpll) == -1) { + return (-2); + } + +@@ -304,29 +302,29 @@ qdevice_advanced_settings_set(struct qdevice_advanced_settings *settings, + return (-1); + } + } else if (strcasecmp(option, "net_heartbeat_interval_min") == 0) { +- tmpll = strtoll(value, &ep, 10); +- if (tmpll < QDEVICE_NET_MIN_HEARTBEAT_INTERVAL || errno != 0 || *ep != '\0') { ++ if (utils_strtonum(value, QDEVICE_NET_MIN_HEARTBEAT_INTERVAL, UINT32_MAX, ++ &tmpll) == -1) { + return (-2); + } + + settings->net_heartbeat_interval_min = (uint32_t)tmpll; + } else if (strcasecmp(option, "net_heartbeat_interval_max") == 0) { +- tmpll = strtoll(value, &ep, 10); +- if (tmpll < QDEVICE_NET_MIN_HEARTBEAT_INTERVAL || errno != 0 || *ep != '\0') { ++ if (utils_strtonum(value, QDEVICE_NET_MIN_HEARTBEAT_INTERVAL, UINT32_MAX, ++ &tmpll) == -1) { + return (-2); + } + + settings->net_heartbeat_interval_max = (uint32_t)tmpll; + } else if (strcasecmp(option, "net_min_connect_timeout") == 0) { +- tmpll = strtoll(value, &ep, 10); +- if (tmpll < QDEVICE_NET_MIN_CONNECT_TIMEOUT || errno != 0 || *ep != '\0') { ++ if (utils_strtonum(value, QDEVICE_NET_MIN_CONNECT_TIMEOUT, UINT32_MAX, ++ &tmpll) == -1) { + return (-2); + } + + settings->net_min_connect_timeout = (uint32_t)tmpll; + } else if (strcasecmp(option, "net_max_connect_timeout") == 0) { +- tmpll = strtoll(value, &ep, 10); +- if (tmpll < QDEVICE_NET_MIN_CONNECT_TIMEOUT || errno != 0 || *ep != '\0') { ++ if (utils_strtonum(value, QDEVICE_NET_MIN_CONNECT_TIMEOUT, UINT32_MAX, ++ &tmpll) == -1) { + return (-2); + } + +diff --git a/qdevices/qdevice-instance.c b/qdevices/qdevice-instance.c +index 52593281..dd49b585 100644 +--- a/qdevices/qdevice-instance.c ++++ b/qdevices/qdevice-instance.c +@@ -67,8 +67,7 @@ int + qdevice_instance_configure_from_cmap_heuristics(struct qdevice_instance *instance) + { + char *str; +- long int li; +- char *ep; ++ long long int lli; + int i; + int res; + cs_error_t cs_err; +@@ -87,9 +86,8 @@ qdevice_instance_configure_from_cmap_heuristics(struct qdevice_instance *instanc + instance->heuristics_instance.timeout = instance->heartbeat_interval / 2; + if (cmap_get_string(instance->cmap_handle, + "quorum.device.heuristics.timeout", &str) == CS_OK) { +- li = strtol(str, &ep, 10); +- if (li < instance->advanced_settings->heuristics_min_timeout || +- li > instance->advanced_settings->heuristics_max_timeout || *ep != '\0') { ++ if (utils_strtonum(str, instance->advanced_settings->heuristics_min_timeout, ++ instance->advanced_settings->heuristics_max_timeout, &lli) == -1) { + qdevice_log(LOG_ERR, "heuristics.timeout must be valid number in " + "range <%"PRIu32",%"PRIu32">", + instance->advanced_settings->heuristics_min_timeout, +@@ -98,7 +96,7 @@ qdevice_instance_configure_from_cmap_heuristics(struct qdevice_instance *instanc + free(str); + return (-1); + } else { +- instance->heuristics_instance.timeout = li; ++ instance->heuristics_instance.timeout = lli; + } + + free(str); +@@ -107,9 +105,8 @@ qdevice_instance_configure_from_cmap_heuristics(struct qdevice_instance *instanc + instance->heuristics_instance.sync_timeout = instance->sync_heartbeat_interval / 2; + if (cmap_get_string(instance->cmap_handle, + "quorum.device.heuristics.sync_timeout", &str) == CS_OK) { +- li = strtol(str, &ep, 10); +- if (li < instance->advanced_settings->heuristics_min_timeout || +- li > instance->advanced_settings->heuristics_max_timeout || *ep != '\0') { ++ if (utils_strtonum(str, instance->advanced_settings->heuristics_min_timeout, ++ instance->advanced_settings->heuristics_max_timeout, &lli) == -1) { + qdevice_log(LOG_ERR, "heuristics.sync_timeout must be valid number in " + "range <%"PRIu32",%"PRIu32">", + instance->advanced_settings->heuristics_min_timeout, +@@ -118,7 +115,7 @@ qdevice_instance_configure_from_cmap_heuristics(struct qdevice_instance *instanc + free(str); + return (-1); + } else { +- instance->heuristics_instance.sync_timeout = li; ++ instance->heuristics_instance.sync_timeout = lli; + } + + free(str); +@@ -127,9 +124,8 @@ qdevice_instance_configure_from_cmap_heuristics(struct qdevice_instance *instanc + instance->heuristics_instance.interval = instance->heartbeat_interval * 3; + if (cmap_get_string(instance->cmap_handle, + "quorum.device.heuristics.interval", &str) == CS_OK) { +- li = strtol(str, &ep, 10); +- if (li < instance->advanced_settings->heuristics_min_interval || +- li > instance->advanced_settings->heuristics_max_interval || *ep != '\0') { ++ if (utils_strtonum(str, instance->advanced_settings->heuristics_min_interval, ++ instance->advanced_settings->heuristics_max_interval, &lli) == -1) { + qdevice_log(LOG_ERR, "heuristics.interval must be valid number in " + "range <%"PRIu32",%"PRIu32">", + instance->advanced_settings->heuristics_min_interval, +@@ -138,7 +134,7 @@ qdevice_instance_configure_from_cmap_heuristics(struct qdevice_instance *instanc + free(str); + return (-1); + } else { +- instance->heuristics_instance.interval = li; ++ instance->heuristics_instance.interval = lli; + } + + free(str); +diff --git a/qdevices/qdevice-net-instance.c b/qdevices/qdevice-net-instance.c +index e4b7b04d..87cf3ee0 100644 +--- a/qdevices/qdevice-net-instance.c ++++ b/qdevices/qdevice-net-instance.c +@@ -32,6 +32,8 @@ + * THE POSSIBILITY OF SUCH DAMAGE. + */ + ++#include ++ + #include "qdevice-config.h" + #include "qdevice-log.h" + #include "qdevice-net-instance.h" +@@ -214,7 +216,7 @@ qdevice_net_instance_init_from_cmap(struct qdevice_instance *instance) + cmap_handle_t cmap_handle; + enum tlv_tls_supported tls_supported; + int i; +- long int li; ++ long long int lli; + enum tlv_decision_algorithm_type decision_algorithm; + struct tlv_tie_breaker tie_breaker; + uint32_t heartbeat_interval; +@@ -222,7 +224,6 @@ qdevice_net_instance_init_from_cmap(struct qdevice_instance *instance) + uint32_t cast_vote_timer_interval; + char *host_addr; + int host_port; +- char *ep; + char *cluster_name; + uint32_t connect_timeout; + struct qdevice_net_instance *net_instance; +@@ -272,14 +273,14 @@ qdevice_net_instance_init_from_cmap(struct qdevice_instance *instance) + host_addr = str; + + if (cmap_get_string(cmap_handle, "quorum.device.net.port", &str) == CS_OK) { +- host_port = strtol(str, &ep, 10); +- +- if (host_port <= 0 || host_port > ((uint16_t)~0) || *ep != '\0') { +- qdevice_log(LOG_ERR, "quorum.device.net.port must be in range 0-65535"); ++ if (utils_strtonum(optarg, 1, UINT16_MAX, &lli) == -1) { ++ qdevice_log(LOG_ERR, "quorum.device.net.port must be in range 1-%u", UINT16_MAX); + free(str); + goto error_free_host_addr; + } + free(str); ++ ++ host_port = lli; + } else { + host_port = QNETD_DEFAULT_HOST_PORT; + } +@@ -353,15 +354,14 @@ qdevice_net_instance_init_from_cmap(struct qdevice_instance *instance) + } else if (strcmp(str, "highest") == 0) { + tie_breaker.mode = TLV_TIE_BREAKER_MODE_HIGHEST; + } else { +- li = strtol(str, &ep, 10); +- if (li <= 0 || li > ((uint32_t)~0) || *ep != '\0') { ++ if (utils_strtonum(str, 1, UINT32_MAX, &lli) == -1) { + qdevice_log(LOG_ERR, "tie_breaker must be lowest|highest|valid_node_id"); + free(str); + goto error_free_cluster_name; + } + + tie_breaker.mode = TLV_TIE_BREAKER_MODE_NODE_ID; +- tie_breaker.node_id = li; ++ tie_breaker.node_id = lli; + } + + free(str); +@@ -373,9 +373,8 @@ qdevice_net_instance_init_from_cmap(struct qdevice_instance *instance) + if (cmap_get_string(cmap_handle, "quorum.device.net.connect_timeout", &str) != CS_OK) { + connect_timeout = heartbeat_interval; + } else { +- li = strtol(str, &ep, 10); +- if (li < instance->advanced_settings->net_min_connect_timeout || +- li > instance->advanced_settings->net_max_connect_timeout || *ep != '\0') { ++ if (utils_strtonum(str, instance->advanced_settings->net_min_connect_timeout, ++ instance->advanced_settings->net_max_connect_timeout, &lli) == -1) { + qdevice_log(LOG_ERR, "connect_timeout must be valid number in " + "range <%"PRIu32",%"PRIu32">", + instance->advanced_settings->net_min_connect_timeout, +@@ -384,7 +383,7 @@ qdevice_net_instance_init_from_cmap(struct qdevice_instance *instance) + goto error_free_cluster_name; + } + +- connect_timeout = li; ++ connect_timeout = (uint32_t)lli; + + free(str); + } +@@ -392,14 +391,14 @@ qdevice_net_instance_init_from_cmap(struct qdevice_instance *instance) + if (cmap_get_string(cmap_handle, "quorum.device.net.force_ip_version", &str) != CS_OK) { + force_ip_version = 0; + } else { +- li = strtol(str, &ep, 10); +- if ((li != 0 && li != 4 && li != 6) || *ep != '\0') { ++ if ((utils_strtonum(str, 0, 6, &lli) == -1) || ++ (lli != 0 && lli != 4 && lli != 6)) { + qdevice_log(LOG_ERR, "force_ip_version must be one of 0|4|6"); + free(str); + goto error_free_cluster_name; + } + +- force_ip_version = li; ++ force_ip_version = lli; + + free(str); + } + +diff --git a/qdevices/corosync-qnetd.c b/qdevices/corosync-qnetd.c +index c6b8b0dc..9af94b7b 100644 +--- a/qdevices/corosync-qnetd.c ++++ b/qdevices/corosync-qnetd.c +@@ -35,6 +35,7 @@ + #include + #include + #include ++#include + #include + #include + +@@ -426,7 +427,6 @@ cli_parse(int argc, char * const argv[], char **host_addr, uint16_t *host_port, + struct qnetd_advanced_settings *advanced_settings) + { + int ch; +- char *ep; + long long int tmpll; + + *host_addr = NULL; +@@ -469,19 +469,18 @@ cli_parse(int argc, char * const argv[], char **host_addr, uint16_t *host_port, + } + break; + case 'm': +- errno = 0; +- +- tmpll = strtoll(optarg, &ep, 10); +- if (tmpll < 0 || errno != 0 || *ep != '\0') { ++ if (utils_strtonum(optarg, 0, LLONG_MAX, &tmpll) == -1) { + errx(1, "max clients value %s is invalid", optarg); + } ++ + *max_clients = (size_t)tmpll; + break; + case 'p': +- *host_port = strtol(optarg, &ep, 10); +- if (*host_port <= 0 || *host_port > ((uint16_t)~0) || *ep != '\0') { +- errx(1, "host port must be in range 0-65535"); ++ if (utils_strtonum(optarg, 1, UINT16_MAX, &tmpll) == -1) { ++ errx(1, "host port must be in range 1-%u", UINT16_MAX); + } ++ ++ *host_port = tmpll; + break; + case 'S': + cli_parse_long_opt(advanced_settings, optarg); +diff --git a/qdevices/qnetd-advanced-settings.c b/qdevices/qnetd-advanced-settings.c +index f1eff374..04519f0a 100644 +--- a/qdevices/qnetd-advanced-settings.c ++++ b/qdevices/qnetd-advanced-settings.c +@@ -33,8 +33,10 @@ + */ + + #include +-#include ++ + #include ++#include ++#include + + #include "dynar.h" + #include "dynar-getopt-lex.h" +@@ -96,32 +98,27 @@ qnetd_advanced_settings_set(struct qnetd_advanced_settings *settings, + const char *option, const char *value) + { + long long int tmpll; +- char *ep; + + if (strcasecmp(option, "listen_backlog") == 0) { +- tmpll = strtoll(value, &ep, 10); +- if (tmpll < QNETD_MIN_LISTEN_BACKLOG || errno != 0 || *ep != '\0') { ++ if (utils_strtonum(value, QNETD_MIN_LISTEN_BACKLOG, INT_MAX, &tmpll) == -1) { + return (-2); + } + + settings->listen_backlog = (int)tmpll; + } else if (strcasecmp(option, "max_client_send_buffers") == 0) { +- tmpll = strtoll(value, &ep, 10); +- if (tmpll < QNETD_MIN_CLIENT_SEND_BUFFERS || errno != 0 || *ep != '\0') { ++ if (utils_strtonum(value, QNETD_MIN_CLIENT_SEND_BUFFERS, LLONG_MAX, &tmpll) == -1) { + return (-2); + } + + settings->max_client_send_buffers = (size_t)tmpll; + } else if (strcasecmp(option, "max_client_send_size") == 0) { +- tmpll = strtoll(value, &ep, 10); +- if (tmpll < QNETD_MIN_CLIENT_RECEIVE_SEND_SIZE || errno != 0 || *ep != '\0') { ++ if (utils_strtonum(value, QNETD_MIN_CLIENT_RECEIVE_SEND_SIZE, LLONG_MAX, &tmpll) == -1) { + return (-2); + } + + settings->max_client_send_size = (size_t)tmpll; + } else if (strcasecmp(option, "max_client_receive_size") == 0) { +- tmpll = strtoll(value, &ep, 10); +- if (tmpll < QNETD_MIN_CLIENT_RECEIVE_SEND_SIZE || errno != 0 || *ep != '\0') { ++ if (utils_strtonum(value, QNETD_MIN_CLIENT_RECEIVE_SEND_SIZE, LLONG_MAX, &tmpll) == -1) { + return (-2); + } + +@@ -139,15 +136,13 @@ qnetd_advanced_settings_set(struct qnetd_advanced_settings *settings, + return (-1); + } + } else if (strcasecmp(option, "heartbeat_interval_min") == 0) { +- tmpll = strtoll(value, &ep, 10); +- if (tmpll < QNETD_MIN_HEARTBEAT_INTERVAL || errno != 0 || *ep != '\0') { ++ if (utils_strtonum(value, QNETD_MIN_HEARTBEAT_INTERVAL, UINT32_MAX, &tmpll) == -1) { + return (-2); + } + + settings->heartbeat_interval_min = (uint32_t)tmpll; + } else if (strcasecmp(option, "heartbeat_interval_max") == 0) { +- tmpll = strtoll(value, &ep, 10); +- if (tmpll < QNETD_MIN_HEARTBEAT_INTERVAL || errno != 0 || *ep != '\0') { ++ if (utils_strtonum(value, QNETD_MIN_HEARTBEAT_INTERVAL, UINT32_MAX, &tmpll) == -1) { + return (-2); + } + +@@ -159,8 +154,7 @@ qnetd_advanced_settings_set(struct qnetd_advanced_settings *settings, + + settings->dpd_enabled = (uint8_t)tmpll; + } else if (strcasecmp(option, "dpd_interval") == 0) { +- tmpll = strtoll(value, &ep, 10); +- if (tmpll < QNETD_MIN_DPD_INTERVAL || errno != 0 || *ep != '\0') { ++ if (utils_strtonum(value, QNETD_MIN_DPD_INTERVAL, UINT32_MAX, &tmpll) == -1) { + return (-2); + } + +@@ -178,29 +172,25 @@ qnetd_advanced_settings_set(struct qnetd_advanced_settings *settings, + return (-1); + } + } else if (strcasecmp(option, "local_socket_backlog") == 0) { +- tmpll = strtoll(value, &ep, 10); +- if (tmpll < QNETD_MIN_LOCAL_SOCKET_BACKLOG || errno != 0 || *ep != '\0') { ++ if (utils_strtonum(value, QNETD_MIN_LOCAL_SOCKET_BACKLOG, INT_MAX, &tmpll) == -1) { + return (-2); + } + + settings->local_socket_backlog = (int)tmpll; + } else if (strcasecmp(option, "ipc_max_clients") == 0) { +- tmpll = strtoll(value, &ep, 10); +- if (tmpll < QNETD_MIN_IPC_MAX_CLIENTS || errno != 0 || *ep != '\0') { ++ if (utils_strtonum(value, QNETD_MIN_IPC_MAX_CLIENTS, LLONG_MAX, &tmpll) == -1) { + return (-2); + } + + settings->ipc_max_clients = (size_t)tmpll; + } else if (strcasecmp(option, "ipc_max_receive_size") == 0) { +- tmpll = strtoll(value, &ep, 10); +- if (tmpll < QNETD_MIN_IPC_RECEIVE_SEND_SIZE || errno != 0 || *ep != '\0') { ++ if (utils_strtonum(value, QNETD_MIN_IPC_RECEIVE_SEND_SIZE, LLONG_MAX, &tmpll) == -1) { + return (-2); + } + + settings->ipc_max_receive_size = (size_t)tmpll; + } else if (strcasecmp(option, "ipc_max_send_size") == 0) { +- tmpll = strtoll(value, &ep, 10); +- if (tmpll < QNETD_MIN_IPC_RECEIVE_SEND_SIZE || errno != 0 || *ep != '\0') { ++ if (utils_strtonum(value, QNETD_MIN_IPC_RECEIVE_SEND_SIZE, LLONG_MAX, &tmpll) == -1) { + return (-2); + } + +diff --git a/exec/main.c b/exec/main.c +index 426e56d0..5523432b 100644 +--- a/exec/main.c ++++ b/exec/main.c +@@ -1258,6 +1258,8 @@ int main (int argc, char **argv, char **envp) + } else if (strcmp(optarg, "min") == 0) { + prio = INT_MAX; + } else { ++ errno = 0; ++ + tmpli = strtol(optarg, &ep, 10); + if (errno != 0 || *ep != '\0' || tmpli > INT_MAX || tmpli < INT_MIN) { + fprintf(stderr, "Priority value %s is invalid", optarg); + diff --git a/corosync.changes b/corosync.changes index 461f254..d60437f 100644 --- a/corosync.changes +++ b/corosync.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Mon Mar 5 08:24:30 UTC 2018 - bliu@suse.com + +- some coverity fixes for corosync on upstream(bsc#1083895) + Added: 0015-coverity-fixes.patch + ------------------------------------------------------------------- Wed Jan 31 05:59:06 UTC 2018 - bliu@suse.com diff --git a/corosync.spec b/corosync.spec index 64dc6b9..75c77ab 100644 --- a/corosync.spec +++ b/corosync.spec @@ -76,6 +76,7 @@ Patch18: 0011-libcpg-Fix-issue-with-partial-big-packet-assembly.patch Patch19: 0012-totemudp-u-Drop-truncated-packets-on-receive.patch Patch20: 0013-logging-Make-blackbox-configurable.patch Patch21: 0014-logging-Close-before-and-open-blackbox-after-fork.patch +Patch22: 0015-coverity-fixes.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build # openais is indeed gone and should be uninstalled. Yes, we do not @@ -162,6 +163,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-build %patch19 -p1 %patch20 -p1 %patch21 -p1 +%patch22 -p1 %build %if %{with runautogen}