Compare commits

...

10 Commits

Author SHA1 Message Date
openeuler-ci-bot
25353ada7a
!39 Upgrade version to 1.0.34
From: @cherry530 
Reviewed-by: @wu-leilei 
Signed-off-by: @wu-leilei
2023-10-07 08:40:18 +00:00
cherry530
83983ba721 Upgrade version to 1.0.34
Signed-off-by: cherry530 <707078654@qq.com>
2023-10-07 10:57:38 +08:00
openeuler-ci-bot
6ab9a539d5
!37 【LLVM平行宇宙】Support build with clang
From: @SaltyFruit 
Reviewed-by: @zhuchunyi 
Signed-off-by: @zhuchunyi
2023-08-31 11:38:58 +00:00
SaltyFruit
5b6ff4bfd3 Fix clang build error 2023-08-28 05:46:32 +00:00
openeuler-ci-bot
fb03a9f9f0
!34 fix build error caused by upgrading gcc to 12.3.0
From: @chen-jan 
Reviewed-by: @wu-leilei 
Signed-off-by: @wu-leilei
2023-07-14 09:33:23 +00:00
chen-jan
c728af63d4 fix build error caused by upgrading gcc to 12.3.0 2023-07-14 17:18:10 +08:00
openeuler-ci-bot
b0d241019c
!19 [sync] PR-13: 修复arm架构编译失败
From: @openeuler-sync-bot 
Reviewed-by: @gitee-cmd 
Signed-off-by: @gitee-cmd
2022-07-30 07:53:01 +00:00
cherry530
de22e4f268 Fix build error
Signed-off-by: cherry530 <xuping33@huawei.com>
(cherry picked from commit 35d0cca39133fb4e1c6d588938d0caa2a371283c)
2022-07-30 11:35:50 +08:00
openeuler-ci-bot
9ac39cc532
!17 [sync] PR-11: fix fcoe.service start error
From: @openeuler-sync-bot 
Reviewed-by: @gitee-cmd 
Signed-off-by: @gitee-cmd
2022-07-30 03:32:29 +00:00
sunguoshuai
e5eadcdbec fix fcoe.service start error
(cherry picked from commit 8911d1b50ccadc9dbf4e161724d381c242b293bc)
2022-07-30 11:16:36 +08:00
11 changed files with 160 additions and 633 deletions

View File

@ -0,0 +1,38 @@
From f6401524e1be537a78b24aef686968e2b9af7493 Mon Sep 17 00:00:00 2001
From: Martin Liska <mliska@suse.cz>
Date: Thu, 27 Jan 2022 14:36:01 +0100
Subject: [PATCH] Fix GCC 12 warning.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Fixes:
inlined from show_full_lun_info at fcoeadm_display.c:310:2:
/usr/include/bits/stdio2.h:112:10: error: osname may be used uninitialized [-Werror=maybe-uninitialized]
112 | return __printf_chk (__USE_FORTIFY_LEVEL - 1, __fmt, __va_arg_pack ());
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fcoeadm_display.c: In function show_full_lun_info:
fcoeadm_display.c:249:15: note: osname was declared here
249 | char *osname;
| ^~~~~~
reference: https://github.com/morbidrsa/fcoe-utils/commit/f6401524e1be537a78b24aef686968e2b9af7493
---
fcoeadm_display.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/fcoeadm_display.c b/fcoeadm_display.c
index c2ef33b82cf..3a18138eefd 100644
--- a/fcoeadm_display.c
+++ b/fcoeadm_display.c
@@ -246,7 +246,7 @@ static void show_full_lun_info(unsigned int hba, unsigned int port,
char vendor[256];
char model[256];
char rev[256];
- char *osname;
+ char *osname = NULL;
char *capstr;
uint64_t lba = 0;
uint32_t blksize = 0;
--
2.39.1

View File

@ -0,0 +1,97 @@
From c54147b3ada8c37a536a4df90e8707538021ed20 Mon Sep 17 00:00:00 2001
From: Chris Leech <cleech@redhat.com>
Date: Fri, 4 Feb 2022 09:21:47 -0800
Subject: [PATCH] fcoemon: add snprintf string precision modifiers in
fcm_netif_advance
GCC 12 is warning of potential snprintf truncations
fcm_netif.ifname is an IFNAMSIZ array, but formating with %s doesn't
understand that, so add a precision modifier every time we print it to
limit the output. This allows the compiler to verify that the output
buffer is of sufficient length to never truncate.
Signed-off-by: Chris Leech <cleech@redhat.com>
reference: https://github.com/morbidrsa/fcoe-utils/commit/c54147b3ada8c37a536a4df90e8707538021ed20
---
fcoemon.c | 28 ++++++++++++++--------------
1 file changed, 14 insertions(+), 14 deletions(-)
diff --git a/fcoemon.c b/fcoemon.c
index 8c08bc5a032..b85f276c7df 100644
--- a/fcoemon.c
+++ b/fcoemon.c
@@ -3135,55 +3135,55 @@ static void fcm_netif_advance(struct fcm_netif *ff)
case FCD_ERROR:
break;
case FCD_GET_DCB_STATE:
- snprintf(buf, sizeof(buf), "%c%x%2.2x%2.2x%2.2x%2.2x%s",
+ snprintf(buf, sizeof(buf), "%c%x%2.2x%2.2x%2.2x%2.2x%.*s",
DCB_CMD, CLIF_RSP_VERSION,
CMD_GET_CONFIG, FEATURE_DCB, 0,
- (u_int) strlen(ff->ifname), ff->ifname);
+ (u_int) strlen(ff->ifname), IFNAMSIZ, ff->ifname);
ff->response_pending = fcm_dcbd_request(buf);
break;
case FCD_SEND_CONF:
snprintf(params, sizeof(params), "%x1%x02",
ff->ff_app_info.enable,
ff->ff_app_info.willing);
- snprintf(buf, sizeof(buf), "%c%x%2.2x%2.2x%2.2x%2.2x%s%s",
+ snprintf(buf, sizeof(buf), "%c%x%2.2x%2.2x%2.2x%2.2x%.*s%s",
DCB_CMD, CLIF_RSP_VERSION,
CMD_SET_CONFIG, FEATURE_APP, APP_FCOE_STYPE,
- (u_int) strlen(ff->ifname), ff->ifname, params);
+ (u_int) strlen(ff->ifname), IFNAMSIZ, ff->ifname, params);
ff->response_pending = fcm_dcbd_request(buf);
break;
case FCD_GET_PFC_CONFIG:
- snprintf(buf, sizeof(buf), "%c%x%2.2x%2.2x%2.2x%2.2x%s%s",
+ snprintf(buf, sizeof(buf), "%c%x%2.2x%2.2x%2.2x%2.2x%.*s%s",
DCB_CMD, CLIF_RSP_VERSION,
CMD_GET_CONFIG, FEATURE_PFC, 0,
- (u_int) strlen(ff->ifname), ff->ifname, "");
+ (u_int) strlen(ff->ifname), IFNAMSIZ, ff->ifname, "");
ff->response_pending = fcm_dcbd_request(buf);
break;
case FCD_GET_APP_CONFIG:
- snprintf(buf, sizeof(buf), "%c%x%2.2x%2.2x%2.2x%2.2x%s%s",
+ snprintf(buf, sizeof(buf), "%c%x%2.2x%2.2x%2.2x%2.2x%.*s%s",
DCB_CMD, CLIF_RSP_VERSION,
CMD_GET_CONFIG, FEATURE_APP, APP_FCOE_STYPE,
- (u_int) strlen(ff->ifname), ff->ifname, "");
+ (u_int) strlen(ff->ifname), IFNAMSIZ, ff->ifname, "");
ff->response_pending = fcm_dcbd_request(buf);
break;
case FCD_GET_PFC_OPER:
- snprintf(buf, sizeof(buf), "%c%x%2.2x%2.2x%2.2x%2.2x%s%s",
+ snprintf(buf, sizeof(buf), "%c%x%2.2x%2.2x%2.2x%2.2x%.*s%s",
DCB_CMD, CLIF_RSP_VERSION,
CMD_GET_OPER, FEATURE_PFC, 0,
- (u_int) strlen(ff->ifname), ff->ifname, "");
+ (u_int) strlen(ff->ifname), IFNAMSIZ, ff->ifname, "");
ff->response_pending = fcm_dcbd_request(buf);
break;
case FCD_GET_APP_OPER:
- snprintf(buf, sizeof(buf), "%c%x%2.2x%2.2x%2.2x%2.2x%s%s",
+ snprintf(buf, sizeof(buf), "%c%x%2.2x%2.2x%2.2x%2.2x%.*s%s",
DCB_CMD, CLIF_RSP_VERSION,
CMD_GET_OPER, FEATURE_APP, APP_FCOE_STYPE,
- (u_int) strlen(ff->ifname), ff->ifname, "");
+ (u_int) strlen(ff->ifname), IFNAMSIZ, ff->ifname, "");
ff->response_pending = fcm_dcbd_request(buf);
break;
case FCD_GET_PEER:
- snprintf(buf, sizeof(buf), "%c%x%2.2x%2.2x%2.2x%2.2x%s%s",
+ snprintf(buf, sizeof(buf), "%c%x%2.2x%2.2x%2.2x%2.2x%.*s%s",
DCB_CMD, CLIF_RSP_VERSION,
CMD_GET_PEER, FEATURE_APP, APP_FCOE_STYPE,
- (u_int) strlen(ff->ifname), ff->ifname, "");
+ (u_int) strlen(ff->ifname), IFNAMSIZ, ff->ifname, "");
ff->response_pending = fcm_dcbd_request(buf);
break;
case FCD_DONE:
--
2.39.1

View File

@ -1,75 +0,0 @@
From 1e6837c8ce063399eeb9580104da33f807e15443 Mon Sep 17 00:00:00 2001
From: Chris Leech <cleech@redhat.com>
Date: Tue, 23 Mar 2021 11:16:06 -0700
Subject: [PATCH] Revert "Make gcc compiler happy about ifname string
truncation."
This change dropped the "." from between the physical interface name and
the vlan number, making fipvlan created vlan names incompatible with
fcoeadm commands that ended up calling get_pci_dev_from_netdev in
lib/sysfs_hba.c (fcoeadm -i). That requirement should be fixed, but for
now lets deal with the fipvlan naming regression.
safe_makevlan_name isn't doing anything that can't be handled by
checking the return from snprintf
This reverts commit eee875e6526786031ec916274deec92148677c38.
Signed-off-by: Chris Leech <cleech@redhat.com>
---
fipvlan.c | 34 +---------------------------------
1 file changed, 1 insertion(+), 33 deletions(-)
diff --git a/fipvlan.c b/fipvlan.c
index c8a07339314..fe8d7955cc5 100644
--- a/fipvlan.c
+++ b/fipvlan.c
@@ -595,36 +595,6 @@ static int rtnl_listener_handler(struct nlmsghdr *nh, UNUSED void *arg)
return -1;
}
-static int
-safe_makevlan_name(char *vlan_name, size_t vsz,
- char *ifname, int vlan_num, char *suffix)
-{
- size_t ifsz = strlen(ifname);
- size_t susz = strlen(suffix); /* should never be NULL */
- int nusz;
- char numbuf[16];
- char *cp = vlan_name;
-
- nusz = snprintf(numbuf, sizeof(numbuf), "%d", vlan_num);
-
- if ((ifsz + susz + nusz + 2) > vsz) {
- FIP_LOG_ERR(EINVAL,
- "Cannot make VLAN name from ifname=\"%s\", vlan %d, and suffix=\"%s\"\n",
- ifname, vlan_num, suffix);
- return -EINVAL;
- }
- memcpy(cp, ifname, ifsz);
- cp += ifsz;
- memcpy(cp, numbuf, nusz);
- cp += nusz;
- if (susz > 0) {
- memcpy(cp, suffix, susz);
- cp += susz;
- }
- *cp = '\0';
- return 0;
-}
-
static int
create_and_start_vlan(struct fcf *fcf, bool vn2vn)
{
@@ -654,10 +624,8 @@ create_and_start_vlan(struct fcf *fcf, bool vn2vn)
real_dev->ifname, fcf->vlan, vlan->ifname);
rc = 0;
} else {
- rc = safe_makevlan_name(vlan_name, sizeof(vlan_name),
+ snprintf(vlan_name, IFNAMSIZ, "%s.%d%s",
real_dev->ifname, fcf->vlan, config.suffix);
- if (rc < 0)
- return rc;
rc = vlan_create(fcf->ifindex, fcf->vlan, vlan_name);
if (rc < 0)
printf("Failed to create VLAN device %s\n\t%s\n",

View File

@ -1,35 +0,0 @@
From b9885692cb283a674e04528486984fb61f92a190 Mon Sep 17 00:00:00 2001
From: Chris Leech <cleech@redhat.com>
Date: Tue, 23 Mar 2021 11:21:17 -0700
Subject: [PATCH] fix VLAN device name overflow check
check snprintf return for truncation
Signed-off-by: Chris Leech <cleech@redhat.com>
---
fipvlan.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/fipvlan.c b/fipvlan.c
index fe8d7955cc5..3ce913d5eaf 100644
--- a/fipvlan.c
+++ b/fipvlan.c
@@ -624,8 +624,16 @@ create_and_start_vlan(struct fcf *fcf, bool vn2vn)
real_dev->ifname, fcf->vlan, vlan->ifname);
rc = 0;
} else {
- snprintf(vlan_name, IFNAMSIZ, "%s.%d%s",
- real_dev->ifname, fcf->vlan, config.suffix);
+ rc = snprintf(vlan_name, IFNAMSIZ, "%s.%d%s",
+ real_dev->ifname, fcf->vlan,
+ config.suffix);
+ if (rc < 0 || rc >= IFNAMSIZ) {
+ printf("Failed to create VLAN device "
+ "(name %s.%d%s is too long)\n",
+ real_dev->ifname, fcf->vlan,
+ config.suffix);
+ return -EINVAL;
+ }
rc = vlan_create(fcf->ifindex, fcf->vlan, vlan_name);
if (rc < 0)
printf("Failed to create VLAN device %s\n\t%s\n",

View File

@ -1,441 +0,0 @@
From 329d7721a40e94547186bf680ba5ae033dda3006 Mon Sep 17 00:00:00 2001
From: Chris Leech <cleech@redhat.com>
Date: Fri, 18 Sep 2020 10:20:57 -0700
Subject: [PATCH] 21 string-op truncation, format truncation, and format
overflow errors
This isn't a full audit of the source, just addressing anything gcc 10.2 flagged.
There's two basic mitigations added, depending on the likelyhood and severity
of truncation to correct functioning.
1) When a truncation is unlikely (copy between two IFNAMSIZ buffers) or
non-critical (output formating) I forced a null-terminiation at the buffer end
after a strncpy to satisfy the compiler.
2) Where truncation needs proper detection and handling, I used snprintf and
corrected the error checking.
Signed-off-by: Chris Leech <cleech@redhat.com>
---
fcoeadm.c | 8 +++---
fcoeadm_display.c | 62 ++++++++++++++++++++++++++++++++++-------------
fcoemon.c | 44 ++++++++++++++++++++++++++-------
fipvlan.c | 5 +++-
lib/fcoe_utils.c | 17 ++++++-------
lib/sysfs_hba.c | 6 +++++
libopenfcoe.c | 4 ++-
7 files changed, 106 insertions(+), 40 deletions(-)
diff --git a/fcoeadm.c b/fcoeadm.c
index 776b4e32b2e..8b9112d63c3 100644
--- a/fcoeadm.c
+++ b/fcoeadm.c
@@ -185,9 +185,10 @@ fcoeadm_action(enum clif_action cmd, char *ifname, enum clif_flags flags)
struct clif_sock_info clif_info;
int rc;
- if (ifname)
- strncpy(data.ifname, ifname, sizeof(data.ifname));
- else
+ if (ifname) {
+ strncpy(data.ifname, ifname, IFNAMSIZ);
+ data.ifname[IFNAMSIZ - 1] = '\0';
+ } else
data.ifname[0] = '\0';
data.cmd = cmd;
data.flags = flags;
@@ -232,6 +233,7 @@ int main(int argc, char *argv[])
* expects progname to be valid.
*/
strncpy(progname, basename(argv[0]), sizeof(progname));
+ progname[sizeof(progname) - 1] = '\0';
/* check if we have sysfs */
if (fcoe_checkdir(SYSFS_MOUNT)) {
diff --git a/fcoeadm_display.c b/fcoeadm_display.c
index 7d29422e91f..4b1d358d1c8 100644
--- a/fcoeadm_display.c
+++ b/fcoeadm_display.c
@@ -188,6 +188,7 @@ static void sa_dir_crawl(char *dir_name, //30yuan ma wu gai han shu
struct dirent *dp;
void (*f)(char *dirname, enum disp_style style);
char path[1024];
+ int rc;
f = func;
@@ -199,8 +200,9 @@ static void sa_dir_crawl(char *dir_name,
if (dp->d_name[0] == '.' && (dp->d_name[1] == '\0' ||
(dp->d_name[1] == '.' && dp->d_name[2] == '\0')))
continue;
- snprintf(path, sizeof(path), "%s/%s", dir_name, dp->d_name);
-
+ rc = snprintf(path, sizeof(path), "%s/%s", dir_name, dp->d_name);
+ if (rc < 0 || (size_t) rc >= sizeof(path))
+ continue;
f(path, style);
}
closedir(dir);
@@ -254,10 +256,13 @@ static void show_full_lun_info(unsigned int hba, unsigned int port,
struct dirent *dp;
struct port_attributes *rport_attrs;
struct port_attributes *port_attrs;
+ int rc;
- snprintf(path, sizeof(path),
- "/sys/class/scsi_device/%u:%u:%u:%u",
- hba, port, tgt, lun);
+ rc = snprintf(path, sizeof(path),
+ "/sys/class/scsi_device/%u:%u:%u:%u",
+ hba, port, tgt, lun);
+ if (rc < 0 || (size_t) rc >= sizeof(path))
+ return;
rport_attrs = get_rport_attribs_by_device(path);
if (!rport_attrs)
@@ -287,10 +292,14 @@ static void show_full_lun_info(unsigned int hba, unsigned int port,
osname = dp->d_name;
- snprintf(npath, sizeof(npath), "%s/%s/", path, osname);
+ rc = snprintf(npath, sizeof(npath), "%s/%s/", path, osname);
+ if (rc < 0 || (size_t) rc >= sizeof(npath))
+ continue;
sa_sys_read_u64(npath, "size", &lba);
- snprintf(npath, sizeof(npath), "%s/%s/queue/", path, osname);
+ rc = snprintf(npath, sizeof(npath), "%s/%s/queue/", path, osname);
+ if (rc < 0 || (size_t) rc >= sizeof(npath))
+ continue;
sa_sys_read_u32(npath, "hw_sector_size", &blksize);
}
@@ -340,10 +349,13 @@ static void show_short_lun_info(unsigned int hba, unsigned int port,
char *capstr = "Unknown";
char *osname = "Unknown";
uint64_t size;
+ int rc;
- snprintf(path, sizeof(path),
- "/sys/class/scsi_device/%u:%u:%u:%u/device/",
- hba, port, tgt, lun);
+ rc = snprintf(path, sizeof(path),
+ "/sys/class/scsi_device/%u:%u:%u:%u/device/",
+ hba, port, tgt, lun);
+ if (rc < 0 || (size_t) rc >= sizeof(path))
+ return;
sa_sys_read_line(path, "rev", rev, sizeof(rev));
sa_sys_read_line(path, "model", model, sizeof(model));
@@ -363,10 +375,14 @@ static void show_short_lun_info(unsigned int hba, unsigned int port,
osname = dp->d_name;
- snprintf(npath, sizeof(npath), "%s/%s/", path, osname);
+ rc = snprintf(npath, sizeof(npath), "%s/%s/", path, osname);
+ if (rc < 0 || (size_t) rc >= sizeof(npath))
+ continue;
sa_sys_read_u64(npath, "size", &size);
- snprintf(npath, sizeof(npath), "%s/%s/queue/", path, osname);
+ rc = snprintf(npath, sizeof(npath), "%s/%s/queue/", path, osname);
+ if (rc < 0 || (size_t) rc >= sizeof(npath))
+ continue;
sa_sys_read_u32(npath, "hw_sector_size", &blksize);
}
@@ -419,8 +435,11 @@ static void list_luns_by_rport(char *rport, enum disp_style style)
char *substr;
int len;
int ret;
+ int rc;
- snprintf(path, sizeof(path), "/sys/class/fc_remote_ports/%s", rport);
+ rc = snprintf(path, sizeof(path), "/sys/class/fc_remote_ports/%s", rport);
+ if (rc < 0 || (size_t) rc >= sizeof(path))
+ return;
ret = readlink(path, link, sizeof(link));
if (ret == -1)
@@ -430,7 +449,9 @@ static void list_luns_by_rport(char *rport, enum disp_style style)
link[ret] = '\0';
substr = strstr(link, "net");
- snprintf(path, sizeof(path), "/sys/class/%s", substr);
+ rc = snprintf(path, sizeof(path), "/sys/class/%s", substr);
+ if (rc < 0 || (size_t) rc >= sizeof(path))
+ return;
substr = strstr(path, "fc_remote_ports");
@@ -560,11 +581,16 @@ static int get_host_from_vport(struct dirent *dp,
static int crawl_vports(struct dirent *dp, void *arg)
{
char *oldpath = arg;
+ int rc;
if (!strncmp(dp->d_name, "vport", strlen("vport"))) {
char path[1024];
- snprintf(path, sizeof(path), "%s/%s", oldpath, dp->d_name);
+ rc = snprintf(path, sizeof(path), "%s/%s", oldpath, dp->d_name);
+ if (rc < 0 || (size_t) rc >= sizeof(path)) {
+ // ignore error and continue
+ return 0;
+ }
sa_dir_read(path, get_host_from_vport, NULL);
}
return 0;
@@ -573,10 +599,12 @@ static int crawl_vports(struct dirent *dp, void *arg)wl_vports
static void show_host_vports(const char *host)
{
char path[1024];
+ int rc;
- snprintf(path, sizeof(path), "%s/%s/device/", SYSFS_HOST_DIR, host);
+ rc = snprintf(path, sizeof(path), "%s/%s/device/", SYSFS_HOST_DIR, host);
+ if (rc < 0 || (size_t) rc >= sizeof(path))
+ return;
sa_dir_read(path, crawl_vports, path);
-
}
static enum fcoe_status display_one_adapter_info(char *ifname)
diff --git a/fcoemon.c b/fcoemon.c
index 60dbc1e444d..8c08bc5a032 100644
--- a/fcoemon.c
+++ b/fcoemon.c
@@ -518,6 +518,7 @@ static int fcm_read_config_files(void)
}
strncpy(file, CONFIG_DIR "/", sizeof(file));
strncat(file, dp->d_name, sizeof(file) - strlen(file));
+ file[sizeof(file) - 1] = '\0';
fp = fopen(file, "r");
if (!fp) {
FCM_LOG_ERR(errno, "Failed to read %s\n", file);
@@ -939,6 +940,7 @@ static struct fcoe_port *fcm_new_vlan(int ifindex, int vid, bool vn2vn)
[false] = CLIF_FLAGS_FABRIC,
[true] = CLIF_FLAGS_VN2VN,
};
+ int rc;
if (vn2vn)
FCM_LOG_DBG("Auto VLAN found vn2vn on VID %d\n", vid);
@@ -947,8 +949,15 @@ static struct fcoe_port *fcm_new_vlan(int ifindex, int vid, bool vn2vn)
if (rtnl_find_vlan(ifindex, vid, vlan_name)) {
rtnl_get_linkname(ifindex, real_name);
- snprintf(vlan_name, sizeof(vlan_name), FCOE_VLAN_FORMAT,
- real_name, vid);
+ rc = snprintf(vlan_name, sizeof(vlan_name), FCOE_VLAN_FORMAT,
+ real_name, vid);
+ if (rc < 0 || (size_t) rc >= sizeof(vlan_name)) {
+ FCM_LOG("Warning: Generating FCoE VLAN device name for"
+ "interface %s VLAN %d: format resulted in a"
+ "name larger than IFNAMSIZ\n", real_name, vid);
+ vlan_name[sizeof(vlan_name) - 1] = 0;
+ FCM_LOG("\tTruncating VLAN name to %s\n", vlan_name);
+ }
vlan_create(ifindex, vid, vlan_name);
}
rtnl_set_iff_up(0, vlan_name);
@@ -1077,6 +1086,7 @@ static void fcm_vlan_dev_real_dev(char *vlan_ifname, char *real_ifname)
{
int fd;
struct vlan_ioctl_args ifv;
+ int rc;
real_ifname[0] = '\0';
@@ -1093,9 +1103,18 @@ static void fcm_vlan_dev_real_dev(char *vlan_ifname, char *real_ifname)
FCM_LOG_ERR(ENOSPC, "no room for vlan ifname");
goto close_fd;
}
- strncpy(ifv.device1, vlan_ifname, sizeof(ifv.device1));
- if (ioctl(fd, SIOCGIFVLAN, &ifv) == 0)
- strncpy(real_ifname, ifv.u.device2, IFNAMSIZ-1);
+
+ rc = snprintf(ifv.device1, IFNAMSIZ, "%s", vlan_ifname);
+ if (rc < 0 || rc >= IFNAMSIZ)
+ goto close_fd;
+
+ if (ioctl(fd, SIOCGIFVLAN, &ifv) == 0) {
+ rc = snprintf(real_ifname, IFNAMSIZ, "%s", ifv.u.device2);
+ if (rc < 0 || rc >= IFNAMSIZ) {
+ real_ifname[0] = '\0';
+ goto close_fd;
+ }
+ }
close_fd:
close(fd);
}
@@ -1647,8 +1666,10 @@ static void fcm_process_link_msg(struct ifinfomsg *ip, int len, unsigned type)
/* try to find the real device name */
real_dev[0] = '\0';
fcm_vlan_dev_real_dev(ifname, real_dev);
- if (strlen(real_dev))
- strncpy(p->real_ifname, real_dev, IFNAMSIZ-1);
+ if (strlen(real_dev)) {
+ strncpy(p->real_ifname, real_dev, IFNAMSIZ);
+ p->real_ifname[IFNAMSIZ - 1] = '\0';
+ }
if (p->ready)
update_fcoe_port_state(p, type, operstate,
FCP_CFG_IFNAME);
@@ -1660,7 +1681,8 @@ static void fcm_process_link_msg(struct ifinfomsg *ip, int len, unsigned type)
if (p) {
p->ifindex = ifindex;
memcpy(p->mac, mac, ETHER_ADDR_LEN);
- strncpy(p->real_ifname, ifname, IFNAMSIZ-1);
+ strncpy(p->real_ifname, ifname, IFNAMSIZ);
+ p->real_ifname[IFNAMSIZ - 1] = '\0';
update_fcoe_port_state(p, type, operstate,
FCP_REAL_IFNAME);
}
@@ -1788,7 +1810,9 @@ static void fcm_process_ieee_msg(struct nlmsghdr *nlh)
if (rta_parent->rta_type != DCB_ATTR_IFNAME)
return;
- strncpy(ifname, NLA_DATA(rta_parent), sizeof(ifname));
+ strncpy(ifname, NLA_DATA(rta_parent), IFNAMSIZ);
+ ifname[IFNAMSIZ - 1] = '\0';
+
ff = fcm_netif_lookup_create(ifname);
if (!ff) {
FCM_LOG("Processing IEEE message: %s not found or created\n",
@@ -3699,6 +3723,8 @@ int main(int argc, char **argv)
memset(&fcoe_config, 0, sizeof(fcoe_config));
strncpy(progname, basename(argv[0]), sizeof(progname));
+ progname[sizeof(progname) - 1] = '\0';
+
sa_log_prefix = progname;
sa_log_flags = 0;
openlog(sa_log_prefix, LOG_CONS, LOG_DAEMON);
diff --git a/fipvlan.c b/fipvlan.c
index 2e9a8f2b047..c8a07339314 100644
--- a/fipvlan.c
+++ b/fipvlan.c
@@ -449,6 +449,7 @@ static void rtnl_recv_newlink(struct nlmsghdr *nh)
iff->iflink = iff->ifindex;
memcpy(iff->mac_addr, RTA_DATA(ifla[IFLA_ADDRESS]), ETHER_ADDR_LEN);
strncpy(iff->ifname, RTA_DATA(ifla[IFLA_IFNAME]), IFNAMSIZ);
+ iff->ifname[IFNAMSIZ - 1] = '\0';
if (ifla[IFLA_LINKINFO]) {
parse_linkinfo(linkinfo, ifla[IFLA_LINKINFO]);
@@ -541,8 +542,10 @@ static void parse_cmdline(int argc, char **argv)
config.start = true;
break;
case 'f':
- if (optarg && strlen(optarg))
+ if (optarg && strlen(optarg)) {
strncpy(config.suffix, optarg, 256);
+ config.suffix[256 - 1] = '\0';
+ }
break;
case 'l':
config.link_retry = strtoul(optarg, NULL, 10);
diff --git a/lib/fcoe_utils.c b/lib/fcoe_utils.c
index 516eac5247d..4d13dd7ecf9 100644
--- a/lib/fcoe_utils.c
+++ b/lib/fcoe_utils.c
@@ -68,9 +68,10 @@ static int fcoe_check_fchost(const char *ifname, const char *dname)
enum fcoe_status fcoe_find_fchost(const char *ifname, char *fchost, int len)
{
- int n, dname_len, status;
+ int n, status;
struct dirent **namelist;
int rc = ENOFCOECONN;
+ int rrc;
status = n = scandir(SYSFS_FCHOST, &namelist, 0, alphasort);
@@ -78,19 +79,17 @@ enum fcoe_status fcoe_find_fchost(const char *ifname, char *fchost, int len)
if (rc) {
/* check symbolic name */
if (!fcoe_check_fchost(ifname, namelist[n]->d_name)) {
- dname_len = strnlen(namelist[n]->d_name, len);
-
- if (len > dname_len) {
- strncpy(fchost, namelist[n]->d_name,
- dname_len + 1);
- /* rc = 0 indicates found */
- rc = SUCCESS;
- } else {
+ rrc = snprintf(fchost, len, "%s", namelist[n]->d_name);
+ if (rrc < 0 || rrc >= len) {
+ fchost[0] = '\0';
/*
* The fc_host is too large
* for the buffer.
*/
rc = EINTERR;
+ } else {
+ /* rc = 0 indicates found */
+ rc = SUCCESS;
}
}
}
diff --git a/lib/sysfs_hba.c b/lib/sysfs_hba.c
index ce781e2e0ed..a8d557e92b5 100644
--- a/lib/sysfs_hba.c
+++ b/lib/sysfs_hba.c
@@ -215,6 +215,7 @@ static void get_pci_device_info(struct pci_device *dev, struct hba_info *info)
vname = unknown;
strncpy(info->manufacturer, vname, sizeof(info->manufacturer));
+ info->manufacturer[sizeof(info->manufacturer) - 1] = '\0';
dname = pci_device_get_device_name(dev);
if (!dname)
@@ -222,6 +223,7 @@ static void get_pci_device_info(struct pci_device *dev, struct hba_info *info)
strncpy(info->model_description, dname,
sizeof(info->model_description));
+ info->model_description[sizeof(info->model_description) - 1] = '\0';
pci_device_cfg_read_u8(dev, &revision, PCI_REVISION_ID);
snprintf(info->hardware_version, sizeof(info->hardware_version),
@@ -259,6 +261,7 @@ static void get_module_info(const char *pcidev, struct hba_info *info)
strncpy(info->driver_name,
strstr(buf, "module") + strlen("module") + 1,
sizeof(info->driver_name));
+ info->driver_name[sizeof(info->driver_name) - 1] = '\0';
}
@@ -316,6 +319,8 @@ struct port_attributes *get_rport_attribs(const char *rport)
goto free_path;
strncpy(pa->device_name, rport, sizeof(pa->device_name));
+ pa->device_name[sizeof(pa->device_name) - 1] = '\0';
+
sa_sys_read_line(path, "node_name", pa->node_name,
sizeof(pa->node_name));
sa_sys_read_line(path, "port_name", pa->port_name,
@@ -391,6 +396,7 @@ struct port_attributes *get_port_attribs(const char *host)
goto free_path;
strncpy(pa->device_name, host, sizeof(pa->device_name));
+ pa->device_name[sizeof(pa->device_name) - 1] = '\0';
sa_sys_read_line(path, "symbolic_name", pa->symbolic_name,
sizeof(pa->symbolic_name));
diff --git a/libopenfcoe.c b/libopenfcoe.c
index c3fd1b031f8..452ee803e63 100644
--- a/libopenfcoe.c
+++ b/libopenfcoe.c
@@ -207,7 +207,9 @@ static int read_fcoe_ctlr_device(struct dirent *dp, void *arg)
if (!rc)
goto fail;
- sprintf(hpath, "%s/%s/", SYSFS_FCHOST, fchost);
+ rc = snprintf(hpath, MAX_STR_LEN, "%s/%s/", SYSFS_FCHOST, fchost);
+ if (rc < 0 || rc >= MAX_STR_LEN)
+ goto fail;
rc = sa_sys_read_line(hpath, "symbolic_name", buf, sizeof(buf));

View File

@ -1,50 +0,0 @@
From 64254aee4509192831b9f9cf695abd81a9656f00 Mon Sep 17 00:00:00 2001
From: Chris Leech <cleech@redhat.com>
Date: Mon, 21 Sep 2020 09:33:23 -0700
Subject: [PATCH 2/2] use of uninitialized values detected during LTO
lto-wrapper build errors
Signed-off-by: Chris Leech <cleech@redhat.com>
---
fcoeadm_display.c | 2 +-
lib/sysfs_hba.c | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/fcoeadm_display.c b/fcoeadm_display.c
index 4b1d358d1c8..585ecfae54e 100644
--- a/fcoeadm_display.c
+++ b/fcoeadm_display.c
@@ -348,7 +348,7 @@ static void show_short_lun_info(unsigned int hba, unsigned int port,
uint32_t blksize = 0;
char *capstr = "Unknown";
char *osname = "Unknown";
- uint64_t size;
+ uint64_t size = 0;
int rc;
rc = snprintf(path, sizeof(path),
diff --git a/lib/sysfs_hba.c b/lib/sysfs_hba.c
index a8d557e92b5..381f335d7ea 100644
--- a/lib/sysfs_hba.c
+++ b/lib/sysfs_hba.c
@@ -528,7 +528,7 @@ char *get_host_by_fcid(uint32_t fcid)
DIR *dir;
char *host = NULL;
char path[1024];
- uint32_t port_id;
+ uint32_t port_id = 0;
dir = opendir(SYSFS_HOST_DIR);
if (!dir)
@@ -562,7 +562,7 @@ char *get_rport_by_fcid(uint32_t fcid)
DIR *dir;
char *rport = NULL;
char path[1024];
- uint32_t port_id;
+ uint32_t port_id = 0;
dir = opendir(SYSFS_RPORT_DIR);
if (!dir)
--
2.18.1

Binary file not shown.

BIN
fcoe-utils-1.0.34.tar.gz Normal file

Binary file not shown.

View File

@ -1,19 +1,14 @@
Name: fcoe-utils
Version: 1.0.33
Version: 1.0.34
Release: 1
Summary: Fibre Channel over Ethernet utilities
License: GPLv2
URL: https://github.com/morbidrsa/fcoe-utils
Source0: https://github.com/morbidrsa/fcoe-utils/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz
Source0: https://github.com/openSUSE/fcoe-utils/archive/v{version}/%{name}-%{version}.tar.gz
Source1: quickstart.txt
Source2: fcoe.service
Source3: fcoe.config
Patch0: backport-00-Revert_Make_gcc_compiler_happy_about_ifname_string.patch
Patch1: backport-01-fix_VLAN_device_name_overflow_check.patch
Patch2: backport-02-string_op_truncation_format_trauncation.patch
Patch3: backport-03-use-of-uninitialized-values-detected-during-LTO.patch
#This patch refer to ubuntu's version
Patch1: 0001-Fix-GCC-12-warning.patch
Patch2: 0001-fcoemon-add-snprintf-string-precision-modifiers-in-f.patch
BuildRequires: autoconf automake libpciaccess-devel libtool lldpad-devel systemd
Requires: lldpad iproute device-mapper-multipath
@ -31,6 +26,10 @@ fcoemon - service to configure DCB Ethernet QOS filters, works with lldpad
cp -v %{SOURCE1} quickstart.txt
%build
%if "%toolchain" == "clang"
CFLAGS="$CFLAGS -Wno-error=format-nonliteral -Wno-error=strncat-size -Wno-error=strict-prototypes"
%endif
./bootstrap.sh
%configure
%make_build
@ -38,15 +37,10 @@ cp -v %{SOURCE1} quickstart.txt
%install
%make_install
rm -rf %{buildroot}/etc/init.d
install -d %{buildroot}%{_sysconfdir}/sysconfig %{buildroot}%{_unitdir}
rm -f %{buildroot}%{_unitdir}/*
install -m 644 %{SOURCE2} %{buildroot}%{_unitdir}
install -m 644 %{SOURCE3} %{buildroot}%{_sysconfdir}/sysconfig/fcoe
install -d %{buildroot}%{_libexecdir}/fcoe
for file in contrib/*.sh debug/*sh
do install -m 755 ${file} %{buildroot}%{_libexecdir}/fcoe/
done
rm -f %{buildroot}/%{_sysconfdir}/fcoe/config
%post
%systemd_post fcoe.service
@ -61,8 +55,9 @@ rm -f %{buildroot}/%{_sysconfdir}/fcoe/config
%defattr(-,root,root)
%doc COPYING
%config(noreplace) %{_sysconfdir}/fcoe/cfg-ethx
%config(noreplace) %{_sysconfdir}/sysconfig/fcoe
%config(noreplace) %{_sysconfdir}/fcoe/config
%{_unitdir}/fcoe.service
%{_unitdir}/fcoemon.socket
%{_sbindir}/*
%{_datadir}/bash-completion/completions/*
%{_libexecdir}/fcoe/
@ -73,6 +68,21 @@ rm -f %{buildroot}/%{_sysconfdir}/fcoe/config
%{_mandir}/man8/*
%changelog
* Sat Oct 07 2023 xu_ping <707078654@qq.com> - 1.0.34-1
- Upgrade version to 1.0.34
* Thu Aug 24 2023 Xiaoya Huang <huangxiaoya@iscas.ac.cn> - 1.0.33-5
- Fix clang build error
* Fri Jul 14 2023 chenchen <chen_aka_jan@163.com> - 1.0.33-4
- fix build error caused by upgrading gcc to 12.3.0
* Thu Mar 03 2022 xu_ping <xuping33@huawei.com> - 1.0.33-3
- Backport upstream patch to avoid non-X86 build break.
* Wed Aug 2021 sunguoshuai <sunguoshuai@huawei.com> - 1.0.33-2
- Fix fcoe.service start error
* Tue Mar 30 2021 lijingyuan <lijingyuan@huawei.com> - 1.0.33-1
- Type:requirement
- Id:NA

View File

@ -1,5 +0,0 @@
# All supported drivers listed here are loaded when service starts
SUPPORTED_DRIVERS="libfc fcoe bnx2fc"
# Add --debug to enable debug messages
FCOEMON_OPTS="--syslog"

View File

@ -1,12 +0,0 @@
[Unit]
Description=Open-FCoE Inititator.
After=syslog.target network.target lldpad.service
[Service]
Type=forking
EnvironmentFile=/etc/sysconfig/fcoe
ExecStartPre=/sbin/modprobe -qa $SUPPORTED_DRIVERS
ExecStart=/usr/sbin/fcoemon $FCOEMON_OPTS
[Install]
WantedBy=multi-user.target