Submitted By: Douglas R. Reno Date: 2020-06-03 Updated Date: 2020-06-22 Initial Package Version: 245 Origin: Upstream Upstream Status: Applied Description: Fixes the build of systemd to work with gcc-10. Also fixes a segfault in bringing up systemd-udevd on i686 (might apply to ARM too). diff -Naurp systemd-245.orig/meson.build systemd-245/meson.build --- systemd-245.orig/meson.build 2020-03-06 06:38:52.000000000 -0600 +++ systemd-245/meson.build 2020-06-22 15:03:52.429129206 -0500 @@ -423,6 +423,9 @@ add_project_arguments(cc.get_supported_a add_project_arguments(cc.get_supported_arguments(possible_cc_flags), language : 'c') add_project_link_arguments(cc.get_supported_link_arguments(possible_link_flags), language : 'c') +have = cc.has_argument('-Wzero-length-bounds') +conf.set10('HAVE_ZERO_LENGTH_BOUNDS', have) + if cc.compiles(''' #include #include diff -Naurp systemd-245.orig/src/core/path.c systemd-245/src/core/path.c --- systemd-245.orig/src/core/path.c 2020-03-06 06:38:52.000000000 -0600 +++ systemd-245/src/core/path.c 2020-06-22 15:03:52.429129206 -0500 @@ -223,11 +223,10 @@ static void path_spec_mkdir(PathSpec *s, } static void path_spec_dump(PathSpec *s, FILE *f, const char *prefix) { - fprintf(f, - "%s%s: %s\n", - prefix, - path_type_to_string(s->type), - s->path); + const char *type; + + assert_se(type = path_type_to_string(s->type)); + fprintf(f, "%s%s: %s\n", prefix, type, s->path); } void path_spec_done(PathSpec *s) { @@ -607,14 +606,16 @@ static int path_serialize(Unit *u, FILE (void) serialize_item(f, "result", path_result_to_string(p->result)); LIST_FOREACH(spec, s, p->specs) { + const char *type; _cleanup_free_ char *escaped = NULL; escaped = cescape(s->path); if (!escaped) return log_oom(); + assert_se(type = path_type_to_string(s->type)); (void) serialize_item_format(f, "path-spec", "%s %i %s", - path_type_to_string(s->type), + type, s->previous_exists, s->path); } diff -Naurp systemd-245.orig/src/shared/ethtool-util.c systemd-245/src/shared/ethtool-util.c --- systemd-245.orig/src/shared/ethtool-util.c 2020-03-06 06:38:52.000000000 -0600 +++ systemd-245/src/shared/ethtool-util.c 2020-06-22 15:03:52.429129206 -0500 @@ -256,8 +256,13 @@ int ethtool_get_permanent_macaddr(int *e if (epaddr.addr.size != 6) return -EOPNOTSUPP; +#pragma GCC diagnostic push +#if HAVE_ZERO_LENGTH_BOUNDS +#pragma GCC diagnostic ignored "-Wzero-length-bounds" +#endif for (size_t i = 0; i < epaddr.addr.size; i++) ret->ether_addr_octet[i] = epaddr.addr.data[i]; +#pragma GCC diagnostic pop return 0; } @@ -479,7 +484,12 @@ static int get_stringset(int ethtool_fd, if (!buffer.info.sset_mask) return -EINVAL; +#pragma GCC diagnostic push +#if HAVE_ZERO_LENGTH_BOUNDS +#pragma GCC diagnostic ignored "-Wzero-length-bounds" +#endif len = buffer.info.data[0]; +#pragma GCC diagnostic pop strings = malloc0(sizeof(struct ethtool_gstrings) + len * ETH_GSTRING_LEN); if (!strings) diff -Naurp systemd-245.orig/src/udev/net/link-config.c systemd-245/src/udev/net/link-config.c --- systemd-245.orig/src/udev/net/link-config.c 2020-03-06 06:38:52.000000000 -0600 +++ systemd-245/src/udev/net/link-config.c 2020-06-22 15:04:13.951128446 -0500 @@ -490,7 +490,7 @@ int link_config_apply(link_config_ctx *c if (config->alternative_names_policy) for (NamePolicy *p = config->alternative_names_policy; *p != _NAMEPOLICY_INVALID; p++) { - const char *n; + const char *n = NULL; switch (*p) { case NAMEPOLICY_DATABASE: