diff --git a/home/nipa/nipa_out/960719/ynl/old-code/ethtool-user.c b/home/nipa/nipa_out/960719/ynl/new-code/ethtool-user.c index 1c68b1b12975..694460daafe0 100644 --- a/home/nipa/nipa_out/960719/ynl/old-code/ethtool-user.c +++ b/home/nipa/nipa_out/960719/ynl/new-code/ethtool-user.c @@ -1125,14 +1125,21 @@ int ethtool_fec_stat_put(struct nlmsghdr *nlh, unsigned int attr_type, struct ethtool_fec_stat *obj) { struct nlattr *nest; + unsigned int i; nest = ynl_attr_nest_start(nlh, attr_type); - if (obj->_len.corrected) - ynl_attr_put(nlh, ETHTOOL_A_FEC_STAT_CORRECTED, obj->corrected, obj->_len.corrected); - if (obj->_len.uncorr) - ynl_attr_put(nlh, ETHTOOL_A_FEC_STAT_UNCORR, obj->uncorr, obj->_len.uncorr); - if (obj->_len.corr_bits) - ynl_attr_put(nlh, ETHTOOL_A_FEC_STAT_CORR_BITS, obj->corr_bits, obj->_len.corr_bits); + if (obj->_count.corrected) { + i = obj->_count.corrected * sizeof(__u64); + ynl_attr_put(nlh, ETHTOOL_A_FEC_STAT_CORRECTED, obj->corrected, i); + } + if (obj->_count.uncorr) { + i = obj->_count.uncorr * sizeof(__u64); + ynl_attr_put(nlh, ETHTOOL_A_FEC_STAT_UNCORR, obj->uncorr, i); + } + if (obj->_count.corr_bits) { + i = obj->_count.corr_bits * sizeof(__u64); + ynl_attr_put(nlh, ETHTOOL_A_FEC_STAT_CORR_BITS, obj->corr_bits, i); + } ynl_attr_nest_end(nlh, nest); return 0; @@ -1154,7 +1161,8 @@ int ethtool_fec_stat_parse(struct ynl_parse_arg *yarg, return YNL_PARSE_CB_ERROR; len = ynl_attr_data_len(attr); - dst->_len.corrected = len; + dst->_count.corrected = len / sizeof(__u64); + len = dst->_count.corrected * sizeof(__u64); dst->corrected = malloc(len); memcpy(dst->corrected, ynl_attr_data(attr), len); } else if (type == ETHTOOL_A_FEC_STAT_UNCORR) { @@ -1164,7 +1172,8 @@ int ethtool_fec_stat_parse(struct ynl_parse_arg *yarg, return YNL_PARSE_CB_ERROR; len = ynl_attr_data_len(attr); - dst->_len.uncorr = len; + dst->_count.uncorr = len / sizeof(__u64); + len = dst->_count.uncorr * sizeof(__u64); dst->uncorr = malloc(len); memcpy(dst->uncorr, ynl_attr_data(attr), len); } else if (type == ETHTOOL_A_FEC_STAT_CORR_BITS) { @@ -1174,7 +1183,8 @@ int ethtool_fec_stat_parse(struct ynl_parse_arg *yarg, return YNL_PARSE_CB_ERROR; len = ynl_attr_data_len(attr); - dst->_len.corr_bits = len; + dst->_count.corr_bits = len / sizeof(__u64); + len = dst->_count.corr_bits * sizeof(__u64); dst->corr_bits = malloc(len); memcpy(dst->corr_bits, ynl_attr_data(attr), len); } @@ -6364,7 +6374,8 @@ int ethtool_rss_get_rsp_parse(const struct nlmsghdr *nlh, return YNL_PARSE_CB_ERROR; len = ynl_attr_data_len(attr); - dst->_len.indir = len; + dst->_count.indir = len / sizeof(__u32); + len = dst->_count.indir * sizeof(__u32); dst->indir = malloc(len); memcpy(dst->indir, ynl_attr_data(attr), len); } else if (type == ETHTOOL_A_RSS_HKEY) { diff --git a/home/nipa/nipa_out/960719/ynl/old-code/ethtool-user.h b/home/nipa/nipa_out/960719/ynl/new-code/ethtool-user.h index 51fa0e758153..577bb3d9bf6d 100644 --- a/home/nipa/nipa_out/960719/ynl/old-code/ethtool-user.h +++ b/home/nipa/nipa_out/960719/ynl/new-code/ethtool-user.h @@ -99,11 +99,11 @@ struct ethtool_fec_stat { __u32 corrected; __u32 uncorr; __u32 corr_bits; - } _len; + } _count; - void *corrected; - void *uncorr; - void *corr_bits; + __u64 *corrected; + __u64 *uncorr; + __u64 *corr_bits; }; struct ethtool_c33_pse_pw_limit { @@ -5010,33 +5010,36 @@ ethtool_fec_set_req_set_active(struct ethtool_fec_set_req *req, __u32 active) } static inline void ethtool_fec_set_req_set_stats_corrected(struct ethtool_fec_set_req *req, - const void *corrected, size_t len) + __u64 *corrected, size_t count) { req->_present.stats = 1; free(req->stats.corrected); - req->stats._len.corrected = len; - req->stats.corrected = malloc(req->stats._len.corrected); - memcpy(req->stats.corrected, corrected, req->stats._len.corrected); + req->stats._count.corrected = count; + count *= sizeof(__u64); + req->stats.corrected = malloc(count); + memcpy(req->stats.corrected, corrected, count); } static inline void ethtool_fec_set_req_set_stats_uncorr(struct ethtool_fec_set_req *req, - const void *uncorr, size_t len) + __u64 *uncorr, size_t count) { req->_present.stats = 1; free(req->stats.uncorr); - req->stats._len.uncorr = len; - req->stats.uncorr = malloc(req->stats._len.uncorr); - memcpy(req->stats.uncorr, uncorr, req->stats._len.uncorr); + req->stats._count.uncorr = count; + count *= sizeof(__u64); + req->stats.uncorr = malloc(count); + memcpy(req->stats.uncorr, uncorr, count); } static inline void ethtool_fec_set_req_set_stats_corr_bits(struct ethtool_fec_set_req *req, - const void *corr_bits, size_t len) + __u64 *corr_bits, size_t count) { req->_present.stats = 1; free(req->stats.corr_bits); - req->stats._len.corr_bits = len; - req->stats.corr_bits = malloc(req->stats._len.corr_bits); - memcpy(req->stats.corr_bits, corr_bits, req->stats._len.corr_bits); + req->stats._count.corr_bits = count; + count *= sizeof(__u64); + req->stats.corr_bits = malloc(count); + memcpy(req->stats.corr_bits, corr_bits, count); } /* @@ -5861,14 +5864,16 @@ struct ethtool_rss_get_rsp { __u32 input_xfrm:1; } _present; struct { - __u32 indir; __u32 hkey; } _len; + struct { + __u32 indir; + } _count; struct ethtool_header header; __u32 context; __u32 hfunc; - void *indir; + __u32 *indir; void *hkey; __u32 input_xfrm; }; diff --git a/home/nipa/nipa_out/960719/ynl/old-code/nl80211-user.c b/home/nipa/nipa_out/960719/ynl/new-code/nl80211-user.c index 81765d5695ed..52f5cffbf100 100644 --- a/home/nipa/nipa_out/960719/ynl/old-code/nl80211-user.c +++ b/home/nipa/nipa_out/960719/ynl/new-code/nl80211-user.c @@ -2404,7 +2404,8 @@ int nl80211_get_wiphy_rsp_parse(const struct nlmsghdr *nlh, return YNL_PARSE_CB_ERROR; len = ynl_attr_data_len(attr); - dst->_len.cipher_suites = len; + dst->_count.cipher_suites = len / sizeof(__u32); + len = dst->_count.cipher_suites * sizeof(__u32); dst->cipher_suites = malloc(len); memcpy(dst->cipher_suites, ynl_attr_data(attr), len); } else if (type == NL80211_ATTR_CONTROL_PORT_ETHERTYPE) { @@ -2833,7 +2834,8 @@ int nl80211_get_wiphy_rsp_dump_parse(const struct nlmsghdr *nlh, return YNL_PARSE_CB_ERROR; len = ynl_attr_data_len(attr); - dst->_len.cipher_suites = len; + dst->_count.cipher_suites = len / sizeof(__u32); + len = dst->_count.cipher_suites * sizeof(__u32); dst->cipher_suites = malloc(len); memcpy(dst->cipher_suites, ynl_attr_data(attr), len); } else if (type == NL80211_ATTR_CONTROL_PORT_ETHERTYPE) { diff --git a/home/nipa/nipa_out/960719/ynl/old-code/nl80211-user.h b/home/nipa/nipa_out/960719/ynl/new-code/nl80211-user.h index 36088774a631..f61029979791 100644 --- a/home/nipa/nipa_out/960719/ynl/old-code/nl80211-user.h +++ b/home/nipa/nipa_out/960719/ynl/new-code/nl80211-user.h @@ -460,7 +460,6 @@ struct nl80211_get_wiphy_rsp { __u32 wowlan_triggers_supported:1; } _present; struct { - __u32 cipher_suites; __u32 ext_capa; __u32 ext_capa_mask; __u32 ext_features; @@ -471,12 +470,13 @@ struct nl80211_get_wiphy_rsp { __u32 wiphy_name; } _len; struct { + __u32 cipher_suites; __u32 interface_combinations; __u32 supported_commands; } _count; __u32 bands; - void *cipher_suites; + __u32 *cipher_suites; void *ext_capa; void *ext_capa_mask; void *ext_features; @@ -627,7 +627,6 @@ struct nl80211_get_wiphy_rsp_dump { __u32 wowlan_triggers_supported:1; } _present; struct { - __u32 cipher_suites; __u32 ext_capa; __u32 ext_capa_mask; __u32 ext_features; @@ -638,12 +637,13 @@ struct nl80211_get_wiphy_rsp_dump { __u32 wiphy_name; } _len; struct { + __u32 cipher_suites; __u32 interface_combinations; __u32 supported_commands; } _count; __u32 bands; - void *cipher_suites; + __u32 *cipher_suites; void *ext_capa; void *ext_capa_mask; void *ext_features; diff --git a/home/nipa/nipa_out/960719/ynl/old-code/ovs_datapath-user.c b/home/nipa/nipa_out/960719/ynl/new-code/ovs_datapath-user.c index fd54202d34d5..3665e18d55ca 100644 --- a/home/nipa/nipa_out/960719/ynl/old-code/ovs_datapath-user.c +++ b/home/nipa/nipa_out/960719/ynl/new-code/ovs_datapath-user.c @@ -115,7 +115,10 @@ int ovs_datapath_get_rsp_parse(const struct nlmsghdr *nlh, len = ynl_attr_data_len(attr); dst->_len.stats = len; - dst->stats = malloc(len); + if (len < sizeof(struct ovs_dp_stats)) + dst->stats = calloc(1, sizeof(struct ovs_dp_stats)); + else + dst->stats = malloc(len); memcpy(dst->stats, ynl_attr_data(attr), len); } else if (type == OVS_DP_ATTR_MEGAFLOW_STATS) { unsigned int len; @@ -125,7 +128,10 @@ int ovs_datapath_get_rsp_parse(const struct nlmsghdr *nlh, len = ynl_attr_data_len(attr); dst->_len.megaflow_stats = len; - dst->megaflow_stats = malloc(len); + if (len < sizeof(struct ovs_dp_megaflow_stats)) + dst->megaflow_stats = calloc(1, sizeof(struct ovs_dp_megaflow_stats)); + else + dst->megaflow_stats = malloc(len); memcpy(dst->megaflow_stats, ynl_attr_data(attr), len); } else if (type == OVS_DP_ATTR_USER_FEATURES) { if (ynl_attr_validate(yarg, attr)) @@ -144,7 +150,8 @@ int ovs_datapath_get_rsp_parse(const struct nlmsghdr *nlh, return YNL_PARSE_CB_ERROR; len = ynl_attr_data_len(attr); - dst->_len.per_cpu_pids = len; + dst->_count.per_cpu_pids = len / sizeof(__u32); + len = dst->_count.per_cpu_pids * sizeof(__u32); dst->per_cpu_pids = malloc(len); memcpy(dst->per_cpu_pids, ynl_attr_data(attr), len); } diff --git a/home/nipa/nipa_out/960719/ynl/old-code/ovs_datapath-user.h b/home/nipa/nipa_out/960719/ynl/new-code/ovs_datapath-user.h index 329b3592a2ae..659566695705 100644 --- a/home/nipa/nipa_out/960719/ynl/old-code/ovs_datapath-user.h +++ b/home/nipa/nipa_out/960719/ynl/new-code/ovs_datapath-user.h @@ -61,16 +61,18 @@ struct ovs_datapath_get_rsp { __u32 name; __u32 stats; __u32 megaflow_stats; - __u32 per_cpu_pids; } _len; + struct { + __u32 per_cpu_pids; + } _count; char *name; __u32 upcall_pid; - void *stats; - void *megaflow_stats; + struct ovs_dp_stats *stats; + struct ovs_dp_megaflow_stats *megaflow_stats; __u32 user_features; __u32 masks_cache_size; - void *per_cpu_pids; + __u32 *per_cpu_pids; }; void ovs_datapath_get_rsp_free(struct ovs_datapath_get_rsp *rsp); diff --git a/home/nipa/nipa_out/960719/ynl/old-code/ovs_flow-user.c b/home/nipa/nipa_out/960719/ynl/new-code/ovs_flow-user.c index 3eceae287fbb..28a14c133345 100644 --- a/home/nipa/nipa_out/960719/ynl/old-code/ovs_flow-user.c +++ b/home/nipa/nipa_out/960719/ynl/new-code/ovs_flow-user.c @@ -707,6 +707,7 @@ int ovs_flow_tunnel_key_attrs_put(struct nlmsghdr *nlh, unsigned int attr_type, struct ovs_flow_tunnel_key_attrs *obj) { struct nlattr *nest; + unsigned int i; nest = ynl_attr_nest_start(nlh, attr_type); if (obj->_present.id) @@ -725,8 +726,10 @@ int ovs_flow_tunnel_key_attrs_put(struct nlmsghdr *nlh, unsigned int attr_type, ynl_attr_put(nlh, OVS_TUNNEL_KEY_ATTR_CSUM, NULL, 0); if (obj->_present.oam) ynl_attr_put(nlh, OVS_TUNNEL_KEY_ATTR_OAM, NULL, 0); - if (obj->_len.geneve_opts) - ynl_attr_put(nlh, OVS_TUNNEL_KEY_ATTR_GENEVE_OPTS, obj->geneve_opts, obj->_len.geneve_opts); + if (obj->_count.geneve_opts) { + i = obj->_count.geneve_opts * sizeof(__u32); + ynl_attr_put(nlh, OVS_TUNNEL_KEY_ATTR_GENEVE_OPTS, obj->geneve_opts, i); + } if (obj->_present.tp_src) ynl_attr_put_u16(nlh, OVS_TUNNEL_KEY_ATTR_TP_SRC, obj->tp_src); if (obj->_present.tp_dst) @@ -804,7 +807,8 @@ int ovs_flow_tunnel_key_attrs_parse(struct ynl_parse_arg *yarg, return YNL_PARSE_CB_ERROR; len = ynl_attr_data_len(attr); - dst->_len.geneve_opts = len; + dst->_count.geneve_opts = len / sizeof(__u32); + len = dst->_count.geneve_opts * sizeof(__u32); dst->geneve_opts = malloc(len); memcpy(dst->geneve_opts, ynl_attr_data(attr), len); } else if (type == OVS_TUNNEL_KEY_ATTR_TP_SRC) { @@ -1140,7 +1144,10 @@ int ovs_flow_key_attrs_parse(struct ynl_parse_arg *yarg, len = ynl_attr_data_len(attr); dst->_len.ethernet = len; - dst->ethernet = malloc(len); + if (len < sizeof(struct ovs_key_ethernet)) + dst->ethernet = calloc(1, sizeof(struct ovs_key_ethernet)); + else + dst->ethernet = malloc(len); memcpy(dst->ethernet, ynl_attr_data(attr), len); } else if (type == OVS_KEY_ATTR_VLAN) { if (ynl_attr_validate(yarg, attr)) @@ -1160,7 +1167,10 @@ int ovs_flow_key_attrs_parse(struct ynl_parse_arg *yarg, len = ynl_attr_data_len(attr); dst->_len.ipv4 = len; - dst->ipv4 = malloc(len); + if (len < sizeof(struct ovs_key_ipv4)) + dst->ipv4 = calloc(1, sizeof(struct ovs_key_ipv4)); + else + dst->ipv4 = malloc(len); memcpy(dst->ipv4, ynl_attr_data(attr), len); } else if (type == OVS_KEY_ATTR_IPV6) { unsigned int len; @@ -1170,7 +1180,10 @@ int ovs_flow_key_attrs_parse(struct ynl_parse_arg *yarg, len = ynl_attr_data_len(attr); dst->_len.ipv6 = len; - dst->ipv6 = malloc(len); + if (len < sizeof(struct ovs_key_ipv6)) + dst->ipv6 = calloc(1, sizeof(struct ovs_key_ipv6)); + else + dst->ipv6 = malloc(len); memcpy(dst->ipv6, ynl_attr_data(attr), len); } else if (type == OVS_KEY_ATTR_TCP) { unsigned int len; @@ -1180,7 +1193,10 @@ int ovs_flow_key_attrs_parse(struct ynl_parse_arg *yarg, len = ynl_attr_data_len(attr); dst->_len.tcp = len; - dst->tcp = malloc(len); + if (len < sizeof(struct ovs_key_tcp)) + dst->tcp = calloc(1, sizeof(struct ovs_key_tcp)); + else + dst->tcp = malloc(len); memcpy(dst->tcp, ynl_attr_data(attr), len); } else if (type == OVS_KEY_ATTR_UDP) { unsigned int len; @@ -1190,7 +1206,10 @@ int ovs_flow_key_attrs_parse(struct ynl_parse_arg *yarg, len = ynl_attr_data_len(attr); dst->_len.udp = len; - dst->udp = malloc(len); + if (len < sizeof(struct ovs_key_udp)) + dst->udp = calloc(1, sizeof(struct ovs_key_udp)); + else + dst->udp = malloc(len); memcpy(dst->udp, ynl_attr_data(attr), len); } else if (type == OVS_KEY_ATTR_ICMP) { unsigned int len; @@ -1200,7 +1219,10 @@ int ovs_flow_key_attrs_parse(struct ynl_parse_arg *yarg, len = ynl_attr_data_len(attr); dst->_len.icmp = len; - dst->icmp = malloc(len); + if (len < sizeof(struct ovs_key_icmp)) + dst->icmp = calloc(1, sizeof(struct ovs_key_icmp)); + else + dst->icmp = malloc(len); memcpy(dst->icmp, ynl_attr_data(attr), len); } else if (type == OVS_KEY_ATTR_ICMPV6) { unsigned int len; @@ -1210,7 +1232,10 @@ int ovs_flow_key_attrs_parse(struct ynl_parse_arg *yarg, len = ynl_attr_data_len(attr); dst->_len.icmpv6 = len; - dst->icmpv6 = malloc(len); + if (len < sizeof(struct ovs_key_icmp)) + dst->icmpv6 = calloc(1, sizeof(struct ovs_key_icmp)); + else + dst->icmpv6 = malloc(len); memcpy(dst->icmpv6, ynl_attr_data(attr), len); } else if (type == OVS_KEY_ATTR_ARP) { unsigned int len; @@ -1220,7 +1245,10 @@ int ovs_flow_key_attrs_parse(struct ynl_parse_arg *yarg, len = ynl_attr_data_len(attr); dst->_len.arp = len; - dst->arp = malloc(len); + if (len < sizeof(struct ovs_key_arp)) + dst->arp = calloc(1, sizeof(struct ovs_key_arp)); + else + dst->arp = malloc(len); memcpy(dst->arp, ynl_attr_data(attr), len); } else if (type == OVS_KEY_ATTR_ND) { unsigned int len; @@ -1230,7 +1258,10 @@ int ovs_flow_key_attrs_parse(struct ynl_parse_arg *yarg, len = ynl_attr_data_len(attr); dst->_len.nd = len; - dst->nd = malloc(len); + if (len < sizeof(struct ovs_key_nd)) + dst->nd = calloc(1, sizeof(struct ovs_key_nd)); + else + dst->nd = malloc(len); memcpy(dst->nd, ynl_attr_data(attr), len); } else if (type == OVS_KEY_ATTR_SKB_MARK) { if (ynl_attr_validate(yarg, attr)) @@ -1254,7 +1285,10 @@ int ovs_flow_key_attrs_parse(struct ynl_parse_arg *yarg, len = ynl_attr_data_len(attr); dst->_len.sctp = len; - dst->sctp = malloc(len); + if (len < sizeof(struct ovs_key_sctp)) + dst->sctp = calloc(1, sizeof(struct ovs_key_sctp)); + else + dst->sctp = malloc(len); memcpy(dst->sctp, ynl_attr_data(attr), len); } else if (type == OVS_KEY_ATTR_TCP_FLAGS) { if (ynl_attr_validate(yarg, attr)) @@ -1279,7 +1313,10 @@ int ovs_flow_key_attrs_parse(struct ynl_parse_arg *yarg, len = ynl_attr_data_len(attr); dst->_len.mpls = len; - dst->mpls = malloc(len); + if (len < sizeof(struct ovs_key_mpls)) + dst->mpls = calloc(1, sizeof(struct ovs_key_mpls)); + else + dst->mpls = malloc(len); memcpy(dst->mpls, ynl_attr_data(attr), len); } else if (type == OVS_KEY_ATTR_CT_STATE) { if (ynl_attr_validate(yarg, attr)) @@ -1314,7 +1351,10 @@ int ovs_flow_key_attrs_parse(struct ynl_parse_arg *yarg, len = ynl_attr_data_len(attr); dst->_len.ct_orig_tuple_ipv4 = len; - dst->ct_orig_tuple_ipv4 = malloc(len); + if (len < sizeof(struct ovs_key_ct_tuple_ipv4)) + dst->ct_orig_tuple_ipv4 = calloc(1, sizeof(struct ovs_key_ct_tuple_ipv4)); + else + dst->ct_orig_tuple_ipv4 = malloc(len); memcpy(dst->ct_orig_tuple_ipv4, ynl_attr_data(attr), len); } else if (type == OVS_KEY_ATTR_CT_ORIG_TUPLE_IPV6) { unsigned int len; @@ -1368,7 +1408,10 @@ int ovs_flow_key_attrs_parse(struct ynl_parse_arg *yarg, len = ynl_attr_data_len(attr); dst->_len.ipv6_exthdrs = len; - dst->ipv6_exthdrs = malloc(len); + if (len < sizeof(struct ovs_key_ipv6_exthdrs)) + dst->ipv6_exthdrs = calloc(1, sizeof(struct ovs_key_ipv6_exthdrs)); + else + dst->ipv6_exthdrs = malloc(len); memcpy(dst->ipv6_exthdrs, ynl_attr_data(attr), len); } } @@ -1667,7 +1710,10 @@ int ovs_flow_action_attrs_parse(struct ynl_parse_arg *yarg, len = ynl_attr_data_len(attr); dst->_len.push_vlan = len; - dst->push_vlan = malloc(len); + if (len < sizeof(struct ovs_action_push_vlan)) + dst->push_vlan = calloc(1, sizeof(struct ovs_action_push_vlan)); + else + dst->push_vlan = malloc(len); memcpy(dst->push_vlan, ynl_attr_data(attr), len); } else if (type == OVS_ACTION_ATTR_POP_VLAN) { if (ynl_attr_validate(yarg, attr)) @@ -1695,7 +1741,10 @@ int ovs_flow_action_attrs_parse(struct ynl_parse_arg *yarg, len = ynl_attr_data_len(attr); dst->_len.hash = len; - dst->hash = malloc(len); + if (len < sizeof(struct ovs_action_hash)) + dst->hash = calloc(1, sizeof(struct ovs_action_hash)); + else + dst->hash = malloc(len); memcpy(dst->hash, ynl_attr_data(attr), len); } else if (type == OVS_ACTION_ATTR_PUSH_MPLS) { unsigned int len; @@ -1705,7 +1754,10 @@ int ovs_flow_action_attrs_parse(struct ynl_parse_arg *yarg, len = ynl_attr_data_len(attr); dst->_len.push_mpls = len; - dst->push_mpls = malloc(len); + if (len < sizeof(struct ovs_action_push_mpls)) + dst->push_mpls = calloc(1, sizeof(struct ovs_action_push_mpls)); + else + dst->push_mpls = malloc(len); memcpy(dst->push_mpls, ynl_attr_data(attr), len); } else if (type == OVS_ACTION_ATTR_POP_MPLS) { if (ynl_attr_validate(yarg, attr)) @@ -1797,7 +1849,10 @@ int ovs_flow_action_attrs_parse(struct ynl_parse_arg *yarg, len = ynl_attr_data_len(attr); dst->_len.add_mpls = len; - dst->add_mpls = malloc(len); + if (len < sizeof(struct ovs_action_add_mpls)) + dst->add_mpls = calloc(1, sizeof(struct ovs_action_add_mpls)); + else + dst->add_mpls = malloc(len); memcpy(dst->add_mpls, ynl_attr_data(attr), len); } else if (type == OVS_ACTION_ATTR_DEC_TTL) { if (ynl_attr_validate(yarg, attr)) @@ -1895,7 +1950,10 @@ int ovs_flow_get_rsp_parse(const struct nlmsghdr *nlh, len = ynl_attr_data_len(attr); dst->_len.stats = len; - dst->stats = malloc(len); + if (len < sizeof(struct ovs_flow_stats)) + dst->stats = calloc(1, sizeof(struct ovs_flow_stats)); + else + dst->stats = malloc(len); memcpy(dst->stats, ynl_attr_data(attr), len); } else if (type == OVS_FLOW_ATTR_ACTIONS) { if (ynl_attr_validate(yarg, attr)) diff --git a/home/nipa/nipa_out/960719/ynl/old-code/ovs_flow-user.h b/home/nipa/nipa_out/960719/ynl/new-code/ovs_flow-user.h index bbc6e79ec3c7..41f871935720 100644 --- a/home/nipa/nipa_out/960719/ynl/old-code/ovs_flow-user.h +++ b/home/nipa/nipa_out/960719/ynl/new-code/ovs_flow-user.h @@ -107,19 +107,21 @@ struct ovs_flow_tunnel_key_attrs { __u32 ipv4_info_bridge:1; } _present; struct { - __u32 geneve_opts; __u32 ipv6_src; __u32 ipv6_dst; __u32 pad; __u32 erspan_opts; } _len; + struct { + __u32 geneve_opts; + } _count; __u64 id /* big-endian */; __u32 ipv4_src /* big-endian */; __u32 ipv4_dst /* big-endian */; __u8 tos; __u8 ttl; - void *geneve_opts; + __u32 *geneve_opts; __u16 tp_src /* big-endian */; __u16 tp_dst /* big-endian */; struct ovs_flow_vxlan_ext_attrs vxlan_opts; @@ -194,35 +196,35 @@ struct ovs_flow_key_attrs { struct ovs_flow_key_attrs *encap; __u32 priority; __u32 in_port; - void *ethernet; + struct ovs_key_ethernet *ethernet; __u16 vlan /* big-endian */; __u16 ethertype /* big-endian */; - void *ipv4; - void *ipv6; - void *tcp; - void *udp; - void *icmp; - void *icmpv6; - void *arp; - void *nd; + struct ovs_key_ipv4 *ipv4; + struct ovs_key_ipv6 *ipv6; + struct ovs_key_tcp *tcp; + struct ovs_key_udp *udp; + struct ovs_key_icmp *icmp; + struct ovs_key_icmp *icmpv6; + struct ovs_key_arp *arp; + struct ovs_key_nd *nd; __u32 skb_mark; struct ovs_flow_tunnel_key_attrs tunnel; - void *sctp; + struct ovs_key_sctp *sctp; __u16 tcp_flags /* big-endian */; __u32 dp_hash; __u32 recirc_id; - void *mpls; + struct ovs_key_mpls *mpls; __u32 ct_state; __u16 ct_zone; __u32 ct_mark; void *ct_labels; - void *ct_orig_tuple_ipv4; + struct ovs_key_ct_tuple_ipv4 *ct_orig_tuple_ipv4; void *ct_orig_tuple_ipv6; struct ovs_flow_ovs_nsh_key_attrs nsh; __u32 packet_type /* big-endian */; void *nd_extensions; void *tunnel_info; - void *ipv6_exthdrs; + struct ovs_key_ipv6_exthdrs *ipv6_exthdrs; }; struct ovs_flow_sample_attrs { @@ -288,11 +290,11 @@ struct ovs_flow_action_attrs { __u32 output; struct ovs_flow_userspace_attrs userspace; struct ovs_flow_key_attrs *set; - void *push_vlan; + struct ovs_action_push_vlan *push_vlan; struct ovs_flow_sample_attrs sample; __u32 recirc; - void *hash; - void *push_mpls; + struct ovs_action_hash *hash; + struct ovs_action_push_mpls *push_mpls; __u16 pop_mpls /* big-endian */; struct ovs_flow_key_attrs *set_masked; struct ovs_flow_ct_attrs ct; @@ -302,7 +304,7 @@ struct ovs_flow_action_attrs { __u32 meter; struct ovs_flow_action_attrs *clone; struct ovs_flow_check_pkt_len_attrs check_pkt_len; - void *add_mpls; + struct ovs_action_add_mpls *add_mpls; struct ovs_flow_dec_ttl_attrs dec_ttl; struct ovs_flow_psample_attrs psample; }; @@ -524,15 +526,15 @@ ovs_flow_get_req_set_key_tunnel_oam(struct ovs_flow_get_req *req) } static inline void ovs_flow_get_req_set_key_tunnel_geneve_opts(struct ovs_flow_get_req *req, - const void *geneve_opts, - size_t len) + __u32 *geneve_opts, size_t count) { req->_present.key = 1; req->key._present.tunnel = 1; free(req->key.tunnel.geneve_opts); - req->key.tunnel._len.geneve_opts = len; - req->key.tunnel.geneve_opts = malloc(req->key.tunnel._len.geneve_opts); - memcpy(req->key.tunnel.geneve_opts, geneve_opts, req->key.tunnel._len.geneve_opts); + req->key.tunnel._count.geneve_opts = count; + count *= sizeof(__u32); + req->key.tunnel.geneve_opts = malloc(count); + memcpy(req->key.tunnel.geneve_opts, geneve_opts, count); } static inline void ovs_flow_get_req_set_key_tunnel_tp_src(struct ovs_flow_get_req *req, @@ -813,7 +815,7 @@ struct ovs_flow_get_rsp { struct ovs_flow_key_attrs key; void *ufid; struct ovs_flow_key_attrs mask; - void *stats; + struct ovs_flow_stats *stats; struct ovs_flow_action_attrs actions; }; @@ -1046,15 +1048,16 @@ ovs_flow_get_req_dump_set_key_tunnel_oam(struct ovs_flow_get_req_dump *req) } static inline void ovs_flow_get_req_dump_set_key_tunnel_geneve_opts(struct ovs_flow_get_req_dump *req, - const void *geneve_opts, - size_t len) + __u32 *geneve_opts, + size_t count) { req->_present.key = 1; req->key._present.tunnel = 1; free(req->key.tunnel.geneve_opts); - req->key.tunnel._len.geneve_opts = len; - req->key.tunnel.geneve_opts = malloc(req->key.tunnel._len.geneve_opts); - memcpy(req->key.tunnel.geneve_opts, geneve_opts, req->key.tunnel._len.geneve_opts); + req->key.tunnel._count.geneve_opts = count; + count *= sizeof(__u32); + req->key.tunnel.geneve_opts = malloc(count); + memcpy(req->key.tunnel.geneve_opts, geneve_opts, count); } static inline void ovs_flow_get_req_dump_set_key_tunnel_tp_src(struct ovs_flow_get_req_dump *req, @@ -1555,15 +1558,15 @@ ovs_flow_new_req_set_key_tunnel_oam(struct ovs_flow_new_req *req) } static inline void ovs_flow_new_req_set_key_tunnel_geneve_opts(struct ovs_flow_new_req *req, - const void *geneve_opts, - size_t len) + __u32 *geneve_opts, size_t count) { req->_present.key = 1; req->key._present.tunnel = 1; free(req->key.tunnel.geneve_opts); - req->key.tunnel._len.geneve_opts = len; - req->key.tunnel.geneve_opts = malloc(req->key.tunnel._len.geneve_opts); - memcpy(req->key.tunnel.geneve_opts, geneve_opts, req->key.tunnel._len.geneve_opts); + req->key.tunnel._count.geneve_opts = count; + count *= sizeof(__u32); + req->key.tunnel.geneve_opts = malloc(count); + memcpy(req->key.tunnel.geneve_opts, geneve_opts, count); } static inline void ovs_flow_new_req_set_key_tunnel_tp_src(struct ovs_flow_new_req *req, @@ -2016,15 +2019,15 @@ ovs_flow_new_req_set_mask_tunnel_oam(struct ovs_flow_new_req *req) } static inline void ovs_flow_new_req_set_mask_tunnel_geneve_opts(struct ovs_flow_new_req *req, - const void *geneve_opts, - size_t len) + __u32 *geneve_opts, size_t count) { req->_present.mask = 1; req->mask._present.tunnel = 1; free(req->mask.tunnel.geneve_opts); - req->mask.tunnel._len.geneve_opts = len; - req->mask.tunnel.geneve_opts = malloc(req->mask.tunnel._len.geneve_opts); - memcpy(req->mask.tunnel.geneve_opts, geneve_opts, req->mask.tunnel._len.geneve_opts); + req->mask.tunnel._count.geneve_opts = count; + count *= sizeof(__u32); + req->mask.tunnel.geneve_opts = malloc(count); + memcpy(req->mask.tunnel.geneve_opts, geneve_opts, count); } static inline void ovs_flow_new_req_set_mask_tunnel_tp_src(struct ovs_flow_new_req *req, diff --git a/home/nipa/nipa_out/960719/ynl/old-code/ovs_vport-user.c b/home/nipa/nipa_out/960719/ynl/new-code/ovs_vport-user.c index 5a4c1c2474fa..346d2ba420af 100644 --- a/home/nipa/nipa_out/960719/ynl/old-code/ovs_vport-user.c +++ b/home/nipa/nipa_out/960719/ynl/new-code/ovs_vport-user.c @@ -145,6 +145,7 @@ int ovs_vport_new(struct ynl_sock *ys, struct ovs_vport_new_req *req) struct ynl_req_state yrs = { .yarg = { .ys = ys, }, }; struct nlmsghdr *nlh; size_t hdr_len; + unsigned int i; void *hdr; int err; @@ -160,8 +161,10 @@ int ovs_vport_new(struct ynl_sock *ys, struct ovs_vport_new_req *req) ynl_attr_put_str(nlh, OVS_VPORT_ATTR_NAME, req->name); if (req->_present.type) ynl_attr_put_u32(nlh, OVS_VPORT_ATTR_TYPE, req->type); - if (req->_len.upcall_pid) - ynl_attr_put(nlh, OVS_VPORT_ATTR_UPCALL_PID, req->upcall_pid, req->_len.upcall_pid); + if (req->_count.upcall_pid) { + i = req->_count.upcall_pid * sizeof(__u32); + ynl_attr_put(nlh, OVS_VPORT_ATTR_UPCALL_PID, req->upcall_pid, i); + } if (req->_present.ifindex) ynl_attr_put_u32(nlh, OVS_VPORT_ATTR_IFINDEX, req->ifindex); if (req->_present.options) @@ -274,7 +277,8 @@ int ovs_vport_get_rsp_parse(const struct nlmsghdr *nlh, return YNL_PARSE_CB_ERROR; len = ynl_attr_data_len(attr); - dst->_len.upcall_pid = len; + dst->_count.upcall_pid = len / sizeof(__u32); + len = dst->_count.upcall_pid * sizeof(__u32); dst->upcall_pid = malloc(len); memcpy(dst->upcall_pid, ynl_attr_data(attr), len); } else if (type == OVS_VPORT_ATTR_STATS) { @@ -285,7 +289,10 @@ int ovs_vport_get_rsp_parse(const struct nlmsghdr *nlh, len = ynl_attr_data_len(attr); dst->_len.stats = len; - dst->stats = malloc(len); + if (len < sizeof(struct ovs_vport_stats)) + dst->stats = calloc(1, sizeof(struct ovs_vport_stats)); + else + dst->stats = malloc(len); memcpy(dst->stats, ynl_attr_data(attr), len); } else if (type == OVS_VPORT_ATTR_IFINDEX) { if (ynl_attr_validate(yarg, attr)) diff --git a/home/nipa/nipa_out/960719/ynl/old-code/ovs_vport-user.h b/home/nipa/nipa_out/960719/ynl/new-code/ovs_vport-user.h index 495037245c32..296ac3be01a5 100644 --- a/home/nipa/nipa_out/960719/ynl/old-code/ovs_vport-user.h +++ b/home/nipa/nipa_out/960719/ynl/new-code/ovs_vport-user.h @@ -52,12 +52,14 @@ struct ovs_vport_new_req { } _present; struct { __u32 name; - __u32 upcall_pid; } _len; + struct { + __u32 upcall_pid; + } _count; char *name; enum ovs_vport_type type; - void *upcall_pid; + __u32 *upcall_pid; __u32 ifindex; struct ovs_vport_vport_options options; }; @@ -86,12 +88,13 @@ ovs_vport_new_req_set_type(struct ovs_vport_new_req *req, } static inline void ovs_vport_new_req_set_upcall_pid(struct ovs_vport_new_req *req, - const void *upcall_pid, size_t len) + __u32 *upcall_pid, size_t count) { free(req->upcall_pid); - req->_len.upcall_pid = len; - req->upcall_pid = malloc(req->_len.upcall_pid); - memcpy(req->upcall_pid, upcall_pid, req->_len.upcall_pid); + req->_count.upcall_pid = count; + count *= sizeof(__u32); + req->upcall_pid = malloc(count); + memcpy(req->upcall_pid, upcall_pid, count); } static inline void ovs_vport_new_req_set_ifindex(struct ovs_vport_new_req *req, __u32 ifindex) @@ -213,15 +216,17 @@ struct ovs_vport_get_rsp { } _present; struct { __u32 name; - __u32 upcall_pid; __u32 stats; } _len; + struct { + __u32 upcall_pid; + } _count; __u32 port_no; enum ovs_vport_type type; char *name; - void *upcall_pid; - void *stats; + __u32 *upcall_pid; + struct ovs_vport_stats *stats; __u32 ifindex; __u32 netnsid; struct ovs_vport_upcall_stats upcall_stats; diff --git a/home/nipa/nipa_out/960719/ynl/old-code/rt-addr-user.c b/home/nipa/nipa_out/960719/ynl/new-code/rt-addr-user.c index ac4ce5922b87..5e366c7e4d96 100644 --- a/home/nipa/nipa_out/960719/ynl/old-code/rt-addr-user.c +++ b/home/nipa/nipa_out/960719/ynl/new-code/rt-addr-user.c @@ -204,7 +204,10 @@ int rt_addr_getaddr_rsp_parse(const struct nlmsghdr *nlh, len = ynl_attr_data_len(attr); dst->_len.cacheinfo = len; - dst->cacheinfo = malloc(len); + if (len < sizeof(struct ifa_cacheinfo)) + dst->cacheinfo = calloc(1, sizeof(struct ifa_cacheinfo)); + else + dst->cacheinfo = malloc(len); memcpy(dst->cacheinfo, ynl_attr_data(attr), len); } } @@ -315,7 +318,10 @@ int rt_addr_getmulticast_rsp_parse(const struct nlmsghdr *nlh, len = ynl_attr_data_len(attr); dst->_len.cacheinfo = len; - dst->cacheinfo = malloc(len); + if (len < sizeof(struct ifa_cacheinfo)) + dst->cacheinfo = calloc(1, sizeof(struct ifa_cacheinfo)); + else + dst->cacheinfo = malloc(len); memcpy(dst->cacheinfo, ynl_attr_data(attr), len); } } diff --git a/home/nipa/nipa_out/960719/ynl/old-code/rt-addr-user.h b/home/nipa/nipa_out/960719/ynl/new-code/rt-addr-user.h index cd198e1a9e68..6739a33494f0 100644 --- a/home/nipa/nipa_out/960719/ynl/old-code/rt-addr-user.h +++ b/home/nipa/nipa_out/960719/ynl/new-code/rt-addr-user.h @@ -37,7 +37,7 @@ struct rt_addr_newaddr_req { void *address; char *label; void *local; - void *cacheinfo; + struct ifa_cacheinfo *cacheinfo; }; static inline struct rt_addr_newaddr_req *rt_addr_newaddr_req_alloc(void) @@ -174,7 +174,7 @@ struct rt_addr_getaddr_rsp { void *address; char *label; void *local; - void *cacheinfo; + struct ifa_cacheinfo *cacheinfo; }; struct rt_addr_getaddr_list { @@ -218,7 +218,7 @@ struct rt_addr_getmulticast_rsp { } _len; void *multicast; - void *cacheinfo; + struct ifa_cacheinfo *cacheinfo; }; void rt_addr_getmulticast_rsp_free(struct rt_addr_getmulticast_rsp *rsp); diff --git a/home/nipa/nipa_out/960719/ynl/old-code/rt-route-user.c b/home/nipa/nipa_out/960719/ynl/new-code/rt-route-user.c index 08f3e657dd18..96a59cf00a3e 100644 --- a/home/nipa/nipa_out/960719/ynl/old-code/rt-route-user.c +++ b/home/nipa/nipa_out/960719/ynl/new-code/rt-route-user.c @@ -398,7 +398,10 @@ int rt_route_getroute_rsp_parse(const struct nlmsghdr *nlh, len = ynl_attr_data_len(attr); dst->_len.cacheinfo = len; - dst->cacheinfo = malloc(len); + if (len < sizeof(struct rta_cacheinfo)) + dst->cacheinfo = calloc(1, sizeof(struct rta_cacheinfo)); + else + dst->cacheinfo = malloc(len); memcpy(dst->cacheinfo, ynl_attr_data(attr), len); } else if (type == RTA_TABLE) { if (ynl_attr_validate(yarg, attr)) diff --git a/home/nipa/nipa_out/960719/ynl/old-code/rt-route-user.h b/home/nipa/nipa_out/960719/ynl/new-code/rt-route-user.h index e8980b4868c9..597c7d4f70a1 100644 --- a/home/nipa/nipa_out/960719/ynl/old-code/rt-route-user.h +++ b/home/nipa/nipa_out/960719/ynl/new-code/rt-route-user.h @@ -224,7 +224,7 @@ struct rt_route_getroute_rsp { struct rt_route_metrics metrics; void *multipath; __u32 flow; - void *cacheinfo; + struct rta_cacheinfo *cacheinfo; __u32 table; __u32 mark; void *mfc_stats; @@ -325,7 +325,7 @@ struct rt_route_newroute_req { struct rt_route_metrics metrics; void *multipath; __u32 flow; - void *cacheinfo; + struct rta_cacheinfo *cacheinfo; __u32 table; __u32 mark; void *mfc_stats; @@ -754,7 +754,7 @@ struct rt_route_delroute_req { struct rt_route_metrics metrics; void *multipath; __u32 flow; - void *cacheinfo; + struct rta_cacheinfo *cacheinfo; __u32 table; __u32 mark; void *mfc_stats;