diff --git a/0001-21-string-op-truncation-format-truncation-and-format.patch b/0001-21-string-op-truncation-format-truncation-and-format.patch deleted file mode 100644 index 1e569ad..0000000 --- a/0001-21-string-op-truncation-format-truncation-and-format.patch +++ /dev/null @@ -1,444 +0,0 @@ -From 329d7721a40e94547186bf680ba5ae033dda3006 Mon Sep 17 00:00:00 2001 -From: Chris Leech -Date: Fri, 18 Sep 2020 10:20:57 -0700 -Subject: [PATCH 1/1] 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 ---- - 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, - 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) - 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)); - --- -2.18.1 - diff --git a/0002-use-of-uninitialized-values-detected-during-LTO.patch b/0002-use-of-uninitialized-values-detected-during-LTO.patch deleted file mode 100644 index ae04024..0000000 --- a/0002-use-of-uninitialized-values-detected-during-LTO.patch +++ /dev/null @@ -1,51 +0,0 @@ -From 64254aee4509192831b9f9cf695abd81a9656f00 Mon Sep 17 00:00:00 2001 -From: Chris Leech -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 ---- - 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 - diff --git a/fcoe-utils-gcc7-fmt-truc-err.patch b/fcoe-utils-gcc7-fmt-truc-err.patch deleted file mode 100644 index 3de42b4..0000000 --- a/fcoe-utils-gcc7-fmt-truc-err.patch +++ /dev/null @@ -1,53 +0,0 @@ -diff --git a/fipvlan.c b/fipvlan.c -index 7c00c7c..065b742 100644 ---- a/fipvlan.c -+++ b/fipvlan.c -@@ -621,8 +621,10 @@ 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 >= IFNAMSIZ) -+ return -E2BIG; - rc = vlan_create(fcf->ifindex, fcf->vlan, vlan_name); - if (rc < 0) - printf("Failed to create VLAN device %s\n\t%s\n", -diff --git a/libopenfcoe.c b/libopenfcoe.c -index 07090d5..98fb975 100644 ---- a/libopenfcoe.c -+++ b/libopenfcoe.c -@@ -59,6 +59,7 @@ static int add_fcoe_fcf_device(struct dirent *dp, void *arg) - { - struct fcoe_ctlr_device *ctlr = (struct fcoe_ctlr_device *)arg; - struct fcoe_fcf_device *fcf; -+ int rc; - - if (!strstr(dp->d_name, "fcf") || - (!strcmp(dp->d_name, "fcf_dev_loss_tmo"))) -@@ -71,8 +72,10 @@ static int add_fcoe_fcf_device(struct dirent *dp, void *arg) - memset(fcf, 0, sizeof(struct fcoe_fcf_device)); - - /* Save the path */ -- snprintf(fcf->path, sizeof(fcf->path), -- "%s/%s", ctlr->path, dp->d_name); -+ rc = snprintf(fcf->path, sizeof(fcf->path), -+ "%s/%s", ctlr->path, dp->d_name); -+ if (rc >= sizeof(fcf->path)) -+ goto fail; - - /* Use the index from the logical enumeration */ - fcf->index = atoi(dp->d_name + sizeof("fcf_") - 1); -@@ -198,7 +201,9 @@ static int read_fcoe_ctlr_device(struct dirent *dp, void *arg) - sa_sys_read_line(ctlr->path, "mode", buf, sizeof(buf)); - sa_enum_encode(fip_conn_type_table, buf, &ctlr->mode); - -- snprintf(lesb_path, sizeof(lesb_path), "%s/lesb/", ctlr->path); -+ rc = snprintf(lesb_path, sizeof(lesb_path), "%s/lesb/", ctlr->path); -+ if (rc >= sizeof(lesb_path)) -+ goto fail; - - /* Get LESB statistics */ - sa_sys_read_u32(lesb_path, "link_fail", diff --git a/fcoe-utils-gcc8-fmt-truc-err.patch b/fcoe-utils-gcc8-fmt-truc-err.patch deleted file mode 100644 index d7602b0..0000000 --- a/fcoe-utils-gcc8-fmt-truc-err.patch +++ /dev/null @@ -1,119 +0,0 @@ -From: Chris Leech -Subject: fix build warnings/errors with GCC format-truncation checks - -diff --git a/fcoeadm_display.c b/fcoeadm_display.c -index 120c6084b7ca..f10cfb53d454 100644 ---- a/fcoeadm_display.c -+++ b/fcoeadm_display.c -@@ -254,6 +254,7 @@ 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", -@@ -287,10 +288,18 @@ 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 || rc >= sizeof(npath)) { -+ /* error or truncation, bailing out */ -+ return; -+ } - 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 || rc >= sizeof(npath)) { -+ /* error or truncation, bailing out */ -+ return; -+ } - sa_sys_read_u32(npath, "hw_sector_size", &blksize); - } - -@@ -340,6 +349,7 @@ 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/", -@@ -363,10 +373,18 @@ 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 || rc >= sizeof(npath)) { -+ /* error or truncation, bailing out */ -+ return; -+ } - 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 || rc >= sizeof(npath)) { -+ /* error or truncation, bailing out */ -+ return; -+ } - sa_sys_read_u32(npath, "hw_sector_size", &blksize); - } - -diff --git a/fcoemon.c b/fcoemon.c -index 9a400c56b72a..bf73a0d4c89e 100644 ---- a/fcoemon.c -+++ b/fcoemon.c -@@ -939,6 +939,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 +948,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 >= 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); -@@ -3549,7 +3557,7 @@ static void fcm_srv_receive(void *arg) - } - - cmd = data->cmd; -- strncpy(ifname, data->ifname, sizeof(data->ifname)); -+ strncpy(ifname, data->ifname, sizeof(ifname) - 1); - ifname[sizeof(data->ifname)] = 0; - - if (cmd != CLIF_PID_CMD) { -diff --git a/libopenfcoe.c b/libopenfcoe.c -index 07090d5a09aa..c1190adc2328 100644 ---- a/libopenfcoe.c -+++ b/libopenfcoe.c -@@ -179,7 +179,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)); - diff --git a/fcoe-utils.spec b/fcoe-utils.spec index 43fbafd..4418065 100644 --- a/fcoe-utils.spec +++ b/fcoe-utils.spec @@ -1,32 +1,26 @@ # https://fedoraproject.org/wiki/Packaging:Guidelines#Compiler_flags %global _hardened_build 1 -# v1.0.33-6-gfe376de5343 -%global commit0 fe376de5343c58f108a14e67819626424054591b +# v1.0.33-9-g848bcc6ba8c +%global commit0 848bcc6ba8cda1f344663b4e73f1bc4857bcb4e3 %global shortcommit0 %(c=%{commit0}; echo ${c:0:7}) Name: fcoe-utils Version: 1.0.33 -Release: 3.git%{shortcommit0}%{?dist} +Release: 4.git%{shortcommit0}%{?dist} Summary: Fibre Channel over Ethernet utilities License: GPLv2 URL: http://www.open-fcoe.org Source0: https://github.com/openSUSE/fcoe-utils/archive/%{commit0}.tar.gz#/%{name}-%{version}-%{shortcommit0}.tar.gz -Source1: quickstart.txt -Source2: fcoe.service -Source3: fcoe.config ExcludeArch: ppc s390 -Patch1: 0001-21-string-op-truncation-format-truncation-and-format.patch -Patch2: 0002-use-of-uninitialized-values-detected-during-LTO.patch Patch3: %{name}-gcc11.patch BuildRequires: autoconf BuildRequires: automake -BuildRequires: libpciaccess-devel BuildRequires: libtool +BuildRequires: libpciaccess-devel BuildRequires: lldpad-devel >= 0.9.43 BuildRequires: systemd -BuildRequires: libbsd-devel -BuildRequires: make +BuildRequires: make Requires: lldpad >= 0.9.43 Requires: iproute Requires: device-mapper-multipath @@ -41,50 +35,47 @@ fcoemon - service to configure DCB Ethernet QOS filters, works with lldpad %prep %autosetup -p1 -n fcoe-utils-%{commit0} -cp -v %{SOURCE1} quickstart.txt %build ./bootstrap.sh -%configure +%configure --with-systemdsystemunitdir=%{_unitdir} make %{?_smp_mflags} %install make install DESTDIR=%{buildroot} rm -rf %{buildroot}/etc/init.d -mkdir -p %{buildroot}%{_sysconfdir}/sysconfig %{buildroot}%{_unitdir} -rm -f %{buildroot}%{_unitdir}/* -install -m 644 %{SOURCE2} %{buildroot}%{_unitdir} -install -m 644 %{SOURCE3} %{buildroot}%{_sysconfdir}/sysconfig/fcoe mkdir -p %{buildroot}%{_libexecdir}/fcoe for file in \ contrib/*.sh \ debug/*sh do install -m 755 ${file} %{buildroot}%{_libexecdir}/fcoe/ done -# We supply our own config for fcoe.service -rm -f %{buildroot}/%{_sysconfdir}/fcoe/config %post -%systemd_post fcoe.service +%systemd_post fcoe.service fcoemon.socket %preun -%systemd_preun fcoe.service +%systemd_preun fcoe.service fcoemon.socket %postun -%systemd_postun_with_restart fcoe.service +%systemd_postun_with_restart fcoe.service fcoemon.socket %files -%doc README COPYING QUICKSTART quickstart.txt +%doc README COPYING QUICKSTART %{_sbindir}/* %{_mandir}/man8/* %{_unitdir}/fcoe.service +%{_unitdir}/fcoemon.socket %{_sysconfdir}/fcoe/ %config(noreplace) %{_sysconfdir}/fcoe/cfg-ethx -%config(noreplace) %{_sysconfdir}/sysconfig/fcoe +%config(noreplace) %{_sysconfdir}/fcoe/config %{_datadir}/bash-completion/completions/* %{_libexecdir}/fcoe/ %changelog +* Mon Feb 01 2021 Chris Leech - 1.0.33-4.git848bcc6 +- drop any differences with upstream service and config files + * Tue Jan 26 2021 Fedora Release Engineering - 1.0.33-3.gitfe376de - Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild diff --git a/fcoe.config b/fcoe.config deleted file mode 100644 index 2166c39..0000000 --- a/fcoe.config +++ /dev/null @@ -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" diff --git a/fcoe.service b/fcoe.service deleted file mode 100644 index 8c438c7..0000000 --- a/fcoe.service +++ /dev/null @@ -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 diff --git a/quickstart.txt b/quickstart.txt deleted file mode 100644 index fdb6e3f..0000000 --- a/quickstart.txt +++ /dev/null @@ -1,25 +0,0 @@ -Quick Start guide for Open-FCoE -=============================== - -1. Install fcoe-utils package. This should also install dcbd, libhbaapi and - libhbalinux as dependencies. - -2. Rename /etc/fcoe/cfg-ethx so it corresponds with name of your network - interface (e.g. /etc/fcoe/cfg-eth0). Copy and rename this file accordingly - if you have more interfaces, which should be fcoe-enabled - -3. Modify configuration files to enable FCoE. Set FCOE_ENABLE="yes" and - DCB_REQUIRED="yes". - -3. Run 'systemctl enable fcoe.service' to start FCoE per run level. This - will setup FCoE to start on reboot. - -4. Run 'systemctl enable lldpad.service' to start LLDP agent per run - level. This will setup DCB to start on reboot. - -5. Run 'systemctl start lldpad.service' to start LLDP agent. - -6. Run 'dcbtool sc ethX dcb on; dcbtool sc ethX app:0 e:1;' for each fcoe-enabled - interface to setup DCB for FCoE. - -7. Run 'systemctl start fcoe.sertvice' to start FCoE. diff --git a/sources b/sources index 1dc9485..5f6df35 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (fcoe-utils-1.0.33-fe376de.tar.gz) = 76f4225b6a235f955fd39499987d5dfef0dfd5d00fe603770b3ff162348b962d2c11b8b567a389314ca8284f110e155fe5e31b78511ad129a636c88ed25d4f3d +SHA512 (fcoe-utils-1.0.33-848bcc6.tar.gz) = 1f591d4b950032f015399a56233510146791d6c0ac510c1c384ce430273445f4be94aaaeb144469b856830401f2089bb951ec3ee253b425ec9e02fbd8d639bda