|
 |
4a3166 |
From a045ef8abc1c81ac359103ac61841bae860d8960 Mon Sep 17 00:00:00 2001
|
|
 |
4a3166 |
From: "Jose M. Guisado Gomez" <guigom@riseup.net>
|
|
 |
4a3166 |
Date: Fri, 16 Aug 2019 11:25:11 +0200
|
|
 |
4a3166 |
Subject: [PATCH] src: fix strncpy -Wstringop-truncation warnings
|
|
 |
4a3166 |
MIME-Version: 1.0
|
|
 |
4a3166 |
Content-Type: text/plain; charset=UTF-8
|
|
 |
4a3166 |
Content-Transfer-Encoding: 8bit
|
|
 |
4a3166 |
|
|
 |
4a3166 |
-Wstringop-truncation warning was introduced in GCC-8 as truncation
|
|
 |
4a3166 |
checker for strncpy and strncat.
|
|
 |
4a3166 |
|
|
 |
4a3166 |
Systems using gcc version >= 8 would receive the following warnings:
|
|
 |
4a3166 |
|
|
 |
4a3166 |
read_config_yy.c: In function ‘yyparse’:
|
|
 |
4a3166 |
read_config_yy.y:1594:2: warning: ‘strncpy’ specified bound 16 equals destination size [-Wstringop-truncation]
|
|
 |
4a3166 |
1594 | strncpy(policy->name, $2, CTD_HELPER_NAME_LEN);
|
|
 |
4a3166 |
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
 |
4a3166 |
read_config_yy.y:1384:2: warning: ‘strncpy’ specified bound 256 equals destination size [-Wstringop-truncation]
|
|
 |
4a3166 |
1384 | strncpy(conf.stats.logfile, $2, FILENAME_MAXLEN);
|
|
 |
4a3166 |
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
 |
4a3166 |
read_config_yy.y:692:2: warning: ‘strncpy’ specified bound 108 equals destination size [-Wstringop-truncation]
|
|
 |
4a3166 |
692 | strncpy(conf.local.path, $2, UNIX_PATH_MAX);
|
|
 |
4a3166 |
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
 |
4a3166 |
read_config_yy.y:169:2: warning: ‘strncpy’ specified bound 256 equals destination size [-Wstringop-truncation]
|
|
 |
4a3166 |
169 | strncpy(conf.lockfile, $2, FILENAME_MAXLEN);
|
|
 |
4a3166 |
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
 |
4a3166 |
read_config_yy.y:119:2: warning: ‘strncpy’ specified bound 256 equals destination size [-Wstringop-truncation]
|
|
 |
4a3166 |
119 | strncpy(conf.logfile, $2, FILENAME_MAXLEN);
|
|
 |
4a3166 |
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
 |
4a3166 |
|
|
 |
4a3166 |
main.c: In function ‘main’:
|
|
 |
4a3166 |
main.c:168:5: warning: ‘strncpy’ specified bound 4096 equals destination size [-Wstringop-truncation]
|
|
 |
4a3166 |
168 | strncpy(config_file, argv[i], PATH_MAX);
|
|
 |
4a3166 |
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
 |
4a3166 |
|
|
 |
4a3166 |
Fix the issue by checking for string length first. Also using
|
|
 |
4a3166 |
snprintf instead.
|
|
 |
4a3166 |
|
|
 |
4a3166 |
In addition, correct an off-by-one when warning about maximum config
|
|
 |
4a3166 |
file path length.
|
|
 |
4a3166 |
|
|
 |
4a3166 |
Signed-off-by: Jose M. Guisado Gomez <guigom@riseup.net>
|
|
 |
4a3166 |
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
|
 |
4a3166 |
(cherry picked from commit f196de88cdd9764ddc2e4de737a960972d82fe9d)
|
|
 |
4a3166 |
---
|
|
 |
4a3166 |
include/conntrackd.h | 6 +++---
|
|
 |
4a3166 |
include/helper.h | 2 +-
|
|
 |
4a3166 |
include/local.h | 4 ++--
|
|
 |
4a3166 |
src/main.c | 7 +++----
|
|
 |
4a3166 |
src/read_config_yy.y | 39 +++++++++++++++++++++++++++++----------
|
|
 |
4a3166 |
5 files changed, 38 insertions(+), 20 deletions(-)
|
|
 |
4a3166 |
|
|
 |
4a3166 |
diff --git a/include/conntrackd.h b/include/conntrackd.h
|
|
 |
4a3166 |
index 81dff221e96de..fe9ec1854a7d2 100644
|
|
 |
4a3166 |
--- a/include/conntrackd.h
|
|
 |
4a3166 |
+++ b/include/conntrackd.h
|
|
 |
4a3166 |
@@ -85,9 +85,9 @@ union inet_address {
|
|
 |
4a3166 |
#define CONFIG(x) conf.x
|
|
 |
4a3166 |
|
|
 |
4a3166 |
struct ct_conf {
|
|
 |
4a3166 |
- char logfile[FILENAME_MAXLEN];
|
|
 |
4a3166 |
+ char logfile[FILENAME_MAXLEN + 1];
|
|
 |
4a3166 |
int syslog_facility;
|
|
 |
4a3166 |
- char lockfile[FILENAME_MAXLEN];
|
|
 |
4a3166 |
+ char lockfile[FILENAME_MAXLEN + 1];
|
|
 |
4a3166 |
int hashsize; /* hashtable size */
|
|
 |
4a3166 |
int channel_num;
|
|
 |
4a3166 |
int channel_default;
|
|
 |
4a3166 |
@@ -132,7 +132,7 @@ struct ct_conf {
|
|
 |
4a3166 |
int prio;
|
|
 |
4a3166 |
} sched;
|
|
 |
4a3166 |
struct {
|
|
 |
4a3166 |
- char logfile[FILENAME_MAXLEN];
|
|
 |
4a3166 |
+ char logfile[FILENAME_MAXLEN + 1];
|
|
 |
4a3166 |
int syslog_facility;
|
|
 |
4a3166 |
size_t buffer_size;
|
|
 |
4a3166 |
} stats;
|
|
 |
4a3166 |
diff --git a/include/helper.h b/include/helper.h
|
|
 |
4a3166 |
index 7353dfa9b2073..08d4cf4642802 100644
|
|
 |
4a3166 |
--- a/include/helper.h
|
|
 |
4a3166 |
+++ b/include/helper.h
|
|
 |
4a3166 |
@@ -13,7 +13,7 @@ struct pkt_buff;
|
|
 |
4a3166 |
#define CTD_HELPER_POLICY_MAX 4
|
|
 |
4a3166 |
|
|
 |
4a3166 |
struct ctd_helper_policy {
|
|
 |
4a3166 |
- char name[CTD_HELPER_NAME_LEN];
|
|
 |
4a3166 |
+ char name[CTD_HELPER_NAME_LEN + 1];
|
|
 |
4a3166 |
uint32_t expect_timeout;
|
|
 |
4a3166 |
uint32_t expect_max;
|
|
 |
4a3166 |
};
|
|
 |
4a3166 |
diff --git a/include/local.h b/include/local.h
|
|
 |
4a3166 |
index 22859d7ab60aa..9379446732eed 100644
|
|
 |
4a3166 |
--- a/include/local.h
|
|
 |
4a3166 |
+++ b/include/local.h
|
|
 |
4a3166 |
@@ -7,12 +7,12 @@
|
|
 |
4a3166 |
|
|
 |
4a3166 |
struct local_conf {
|
|
 |
4a3166 |
int reuseaddr;
|
|
 |
4a3166 |
- char path[UNIX_PATH_MAX];
|
|
 |
4a3166 |
+ char path[UNIX_PATH_MAX + 1];
|
|
 |
4a3166 |
};
|
|
 |
4a3166 |
|
|
 |
4a3166 |
struct local_server {
|
|
 |
4a3166 |
int fd;
|
|
 |
4a3166 |
- char path[UNIX_PATH_MAX];
|
|
 |
4a3166 |
+ char path[UNIX_PATH_MAX + 1];
|
|
 |
4a3166 |
};
|
|
 |
4a3166 |
|
|
 |
4a3166 |
/* callback return values */
|
|
 |
4a3166 |
diff --git a/src/main.c b/src/main.c
|
|
 |
4a3166 |
index 8c3fa1c943a96..de4773df8a204 100644
|
|
 |
4a3166 |
--- a/src/main.c
|
|
 |
4a3166 |
+++ b/src/main.c
|
|
 |
4a3166 |
@@ -120,8 +120,8 @@ do_chdir(const char *d)
|
|
 |
4a3166 |
|
|
 |
4a3166 |
int main(int argc, char *argv[])
|
|
 |
4a3166 |
{
|
|
 |
4a3166 |
+ char config_file[PATH_MAX + 1] = {};
|
|
 |
4a3166 |
int ret, i, action = -1;
|
|
 |
4a3166 |
- char config_file[PATH_MAX] = {};
|
|
 |
4a3166 |
int type = 0;
|
|
 |
4a3166 |
struct utsname u;
|
|
 |
4a3166 |
int version, major, minor;
|
|
 |
4a3166 |
@@ -165,13 +165,12 @@ int main(int argc, char *argv[])
|
|
 |
4a3166 |
break;
|
|
 |
4a3166 |
case 'C':
|
|
 |
4a3166 |
if (++i < argc) {
|
|
 |
4a3166 |
- strncpy(config_file, argv[i], PATH_MAX);
|
|
 |
4a3166 |
- if (strlen(argv[i]) >= PATH_MAX){
|
|
 |
4a3166 |
- config_file[PATH_MAX-1]='\0';
|
|
 |
4a3166 |
+ if (strlen(argv[i]) > PATH_MAX) {
|
|
 |
4a3166 |
dlog(LOG_WARNING, "Path to config file"
|
|
 |
4a3166 |
" to long. Cutting it down to %d"
|
|
 |
4a3166 |
" characters", PATH_MAX);
|
|
 |
4a3166 |
}
|
|
 |
4a3166 |
+ snprintf(config_file, PATH_MAX, "%s", argv[i]);
|
|
 |
4a3166 |
break;
|
|
 |
4a3166 |
}
|
|
 |
4a3166 |
show_usage(argv[0]);
|
|
 |
4a3166 |
diff --git a/src/read_config_yy.y b/src/read_config_yy.y
|
|
 |
4a3166 |
index 6aee67623953b..d963c494be1fc 100644
|
|
 |
4a3166 |
--- a/src/read_config_yy.y
|
|
 |
4a3166 |
+++ b/src/read_config_yy.y
|
|
 |
4a3166 |
@@ -116,7 +116,12 @@ logfile_bool : T_LOG T_OFF
|
|
 |
4a3166 |
|
|
 |
4a3166 |
logfile_path : T_LOG T_PATH_VAL
|
|
 |
4a3166 |
{
|
|
 |
4a3166 |
- strncpy(conf.logfile, $2, FILENAME_MAXLEN);
|
|
 |
4a3166 |
+ if (strlen($2) > FILENAME_MAXLEN) {
|
|
 |
4a3166 |
+ dlog(LOG_ERR, "LogFile path is longer than %u characters",
|
|
 |
4a3166 |
+ FILENAME_MAXLEN);
|
|
 |
4a3166 |
+ exit(EXIT_FAILURE);
|
|
 |
4a3166 |
+ }
|
|
 |
4a3166 |
+ snprintf(conf.logfile, FILENAME_MAXLEN, "%s", $2);
|
|
 |
4a3166 |
free($2);
|
|
 |
4a3166 |
};
|
|
 |
4a3166 |
|
|
 |
4a3166 |
@@ -166,7 +171,12 @@ syslog_facility : T_SYSLOG T_STRING
|
|
 |
4a3166 |
|
|
 |
4a3166 |
lock : T_LOCK T_PATH_VAL
|
|
 |
4a3166 |
{
|
|
 |
4a3166 |
- strncpy(conf.lockfile, $2, FILENAME_MAXLEN);
|
|
 |
4a3166 |
+ if (strlen($2) > FILENAME_MAXLEN) {
|
|
 |
4a3166 |
+ dlog(LOG_ERR, "LockFile path is longer than %u characters",
|
|
 |
4a3166 |
+ FILENAME_MAXLEN);
|
|
 |
4a3166 |
+ exit(EXIT_FAILURE);
|
|
 |
4a3166 |
+ }
|
|
 |
4a3166 |
+ snprintf(conf.lockfile, FILENAME_MAXLEN, "%s", $2);
|
|
 |
4a3166 |
free($2);
|
|
 |
4a3166 |
};
|
|
 |
4a3166 |
|
|
 |
4a3166 |
@@ -689,13 +699,13 @@ unix_options:
|
|
 |
4a3166 |
|
|
 |
4a3166 |
unix_option : T_PATH T_PATH_VAL
|
|
 |
4a3166 |
{
|
|
 |
4a3166 |
- strncpy(conf.local.path, $2, UNIX_PATH_MAX);
|
|
 |
4a3166 |
- free($2);
|
|
 |
4a3166 |
- if (conf.local.path[UNIX_PATH_MAX - 1]) {
|
|
 |
4a3166 |
- dlog(LOG_ERR, "UNIX Path is longer than %u characters",
|
|
 |
4a3166 |
- UNIX_PATH_MAX - 1);
|
|
 |
4a3166 |
+ if (strlen($2) > UNIX_PATH_MAX) {
|
|
 |
4a3166 |
+ dlog(LOG_ERR, "Path is longer than %u characters",
|
|
 |
4a3166 |
+ UNIX_PATH_MAX);
|
|
 |
4a3166 |
exit(EXIT_FAILURE);
|
|
 |
4a3166 |
}
|
|
 |
4a3166 |
+ snprintf(conf.local.path, UNIX_PATH_MAX, "%s", $2);
|
|
 |
4a3166 |
+ free($2);
|
|
 |
4a3166 |
};
|
|
 |
4a3166 |
|
|
 |
4a3166 |
unix_option : T_BACKLOG T_NUMBER
|
|
 |
4a3166 |
@@ -1381,7 +1391,12 @@ stat_logfile_bool : T_LOG T_OFF
|
|
 |
4a3166 |
|
|
 |
4a3166 |
stat_logfile_path : T_LOG T_PATH_VAL
|
|
 |
4a3166 |
{
|
|
 |
4a3166 |
- strncpy(conf.stats.logfile, $2, FILENAME_MAXLEN);
|
|
 |
4a3166 |
+ if (strlen($2) > FILENAME_MAXLEN) {
|
|
 |
4a3166 |
+ dlog(LOG_ERR, "stats LogFile path is longer than %u characters",
|
|
 |
4a3166 |
+ FILENAME_MAXLEN);
|
|
 |
4a3166 |
+ exit(EXIT_FAILURE);
|
|
 |
4a3166 |
+ }
|
|
 |
4a3166 |
+ snprintf(conf.stats.logfile, FILENAME_MAXLEN, "%s", $2);
|
|
 |
4a3166 |
free($2);
|
|
 |
4a3166 |
};
|
|
 |
4a3166 |
|
|
 |
4a3166 |
@@ -1589,11 +1604,15 @@ helper_type: T_HELPER_POLICY T_STRING '{' helper_policy_list '}'
|
|
 |
4a3166 |
exit(EXIT_FAILURE);
|
|
 |
4a3166 |
break;
|
|
 |
4a3166 |
}
|
|
 |
4a3166 |
+ if (strlen($2) > CTD_HELPER_NAME_LEN) {
|
|
 |
4a3166 |
+ dlog(LOG_ERR, "Helper Policy is longer than %u characters",
|
|
 |
4a3166 |
+ CTD_HELPER_NAME_LEN);
|
|
 |
4a3166 |
+ exit(EXIT_FAILURE);
|
|
 |
4a3166 |
+ }
|
|
 |
4a3166 |
|
|
 |
4a3166 |
policy = (struct ctd_helper_policy *) &e->data;
|
|
 |
4a3166 |
- strncpy(policy->name, $2, CTD_HELPER_NAME_LEN);
|
|
 |
4a3166 |
+ snprintf(policy->name, CTD_HELPER_NAME_LEN, "%s", $2);
|
|
 |
4a3166 |
free($2);
|
|
 |
4a3166 |
- policy->name[CTD_HELPER_NAME_LEN-1] = '\0';
|
|
 |
4a3166 |
/* Now object is complete. */
|
|
 |
4a3166 |
e->type = SYMBOL_HELPER_POLICY_EXPECT_ROOT;
|
|
 |
4a3166 |
stack_item_push(&symbol_stack, e);
|
|
 |
4a3166 |
--
|
|
 |
4a3166 |
2.34.1
|
|
 |
4a3166 |
|