diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2022-01-12 15:50:08 +0100 |
|---|---|---|
| committer | Aleksandr Nogikh <wp32pw@gmail.com> | 2022-01-13 17:03:25 +0100 |
| commit | 7c9ea12ca3d0db0eeb2b448844ffbf80ba599f90 (patch) | |
| tree | 2a8769a10625493c1b42ec8a65a012f3446f913c | |
| parent | a252f56d36e0c85a0106b341188fcb19e87fda15 (diff) | |
tools/syz-check: don't check netlink policies as structs
They are not really structs in the kernel even if we describe them as structs.
| -rw-r--r-- | sys/linux/socket_netlink_generic_80211.txt.warn | 11 | ||||
| -rw-r--r-- | sys/linux/socket_netlink_generic_devlink.txt.warn | 2 | ||||
| -rw-r--r-- | sys/linux/socket_netlink_generic_team.txt.warn | 3 | ||||
| -rw-r--r-- | sys/linux/socket_netlink_generic_wireguard.txt.warn | 2 | ||||
| -rw-r--r-- | sys/linux/socket_netlink_netfilter_conntrack.txt.warn | 2 | ||||
| -rw-r--r-- | sys/linux/socket_netlink_netfilter_nftables.txt.warn | 1 | ||||
| -rw-r--r-- | sys/linux/socket_netlink_netfilter_osf.txt.warn | 1 | ||||
| -rw-r--r-- | sys/linux/socket_netlink_rdma.txt.warn | 2 | ||||
| -rw-r--r-- | sys/linux/socket_netlink_route.txt.warn | 2 | ||||
| -rw-r--r-- | tools/syz-check/check.go | 39 |
10 files changed, 19 insertions, 46 deletions
diff --git a/sys/linux/socket_netlink_generic_80211.txt.warn b/sys/linux/socket_netlink_generic_80211.txt.warn index 1df25d900..1df878b3a 100644 --- a/sys/linux/socket_netlink_generic_80211.txt.warn +++ b/sys/linux/socket_netlink_generic_80211.txt.warn @@ -1,10 +1,8 @@ no-such-struct: msg_nl80211_payload no-such-struct: nl80211_wdev -no-such-struct: mntr_flags_policy bad-netlink-attr: nl80211_policy$cmd_key.NL80211_ATTR_KEY_DATA_WEP104: duplicate attribute bad-netlink-attr: nl80211_key_policy.NL80211_KEY_DATA_WEP104: duplicate attribute bad-netlink-attr: he_obss_pd_policy: missing attributes: [3 4 5 6] -no-such-struct: he_obss_pd_policy no-such-netlink-policy: nl80211_tx_rates_policy no-such-struct: nl80211_ht_rate bad-netlink-attr: nl80211_txattr_policy: missing attributes: [5 6 7] @@ -18,18 +16,9 @@ bad-netlink-attr: nl80211_policy$connect.NL80211_ATTR_WIPHY_EDMG_BW_CONFIG: bad bad-netlink-attr: nl80211_pmsr_ftm_req_attr_policy: missing attributes: [12] no-such-netlink-policy: nl80211_psmr_peer_attr_policy bad-netlink-attr: nl80211_pmsr_attr_policy.NL80211_PMSR_ATTR_PEERS: unhandled type NLA_NESTED_ARRAY -no-such-struct: nl80211_policy$del_nan_func -no-such-struct: nl80211_policy$probe_client -no-such-struct: nl80211_policy$set_mcast_rate -no-such-struct: nl80211_policy$set_mcast_to_ucast -no-such-struct: nl80211_policy$set_noack_map -no-such-struct: nl80211_policy$del_pmk bad-netlink-attr: nl80211_policy$setdel_pmksa.NL80211_ATTR_FILS_CACHE_ID: bad min value 0, expect 2 -no-such-struct: nl80211_policy$cookie -no-such-struct: nl80211_policy$power_save no-such-struct: nl80211_qos_map_dscp_exception no-such-netlink-policy: nl80211_cqm -no-such-struct: nl80211_policy$set_wds_peer bad-netlink-attr: nl80211_tid_config_attr_policy.NL80211_TID_CONFIG_ATTR_RETRY_SHORT: bad max value 255, expect 0 bad-netlink-attr: nl80211_tid_config_attr_policy.NL80211_TID_CONFIG_ATTR_RETRY_LONG: bad max value 255, expect 0 bad-netlink-attr: nl80211_policy$set_tid_config.NL80211_ATTR_TID_CONFIG: unhandled type NLA_NESTED_ARRAY diff --git a/sys/linux/socket_netlink_generic_devlink.txt.warn b/sys/linux/socket_netlink_generic_devlink.txt.warn index be7dfccaf..fe1528485 100644 --- a/sys/linux/socket_netlink_generic_devlink.txt.warn +++ b/sys/linux/socket_netlink_generic_devlink.txt.warn @@ -1,4 +1,2 @@ no-such-struct: devlink_devname -no-such-struct: devlink_nl_policy$nsim bad-netlink-attr: devlink_nl_policy$nsim.DEVLINK_ATTR_DEV_NAME: expect string -no-such-struct: devlink_nl_policy$pci diff --git a/sys/linux/socket_netlink_generic_team.txt.warn b/sys/linux/socket_netlink_generic_team.txt.warn index 334524612..44e55cb31 100644 --- a/sys/linux/socket_netlink_generic_team.txt.warn +++ b/sys/linux/socket_netlink_generic_team.txt.warn @@ -1,5 +1,2 @@ bad-netlink-attr: team_nl_policy: missing attributes: [3] -no-such-struct: team_nl_option_policy -no-such-struct: team_nl_option_policy$per_port bad-netlink-attr: team_nl_option_policy$array: missing attributes: [2] -no-such-struct: team_nl_option_policy$array diff --git a/sys/linux/socket_netlink_generic_wireguard.txt.warn b/sys/linux/socket_netlink_generic_wireguard.txt.warn index d5c5b8c71..7e50b7875 100644 --- a/sys/linux/socket_netlink_generic_wireguard.txt.warn +++ b/sys/linux/socket_netlink_generic_wireguard.txt.warn @@ -1,7 +1,5 @@ bad-netlink-attr: device_policy: missing attributes: [4] bad-netlink-attr: peer_policy: missing attributes: [6 7 8] bad-netlink-attr: peer_policy.WGPEER_A_ENDPOINT6: duplicate attribute -no-such-struct: allowedip_policy$ipv4 -no-such-struct: allowedip_policy$ipv6 no-such-struct: wireguard_private_key no-such-struct: wireguard_public_key diff --git a/sys/linux/socket_netlink_netfilter_conntrack.txt.warn b/sys/linux/socket_netlink_netfilter_conntrack.txt.warn index 18ca2802d..7a12cf487 100644 --- a/sys/linux/socket_netlink_netfilter_conntrack.txt.warn +++ b/sys/linux/socket_netlink_netfilter_conntrack.txt.warn @@ -1,3 +1 @@ bad-netlink-attr: ct_nla_policy: missing attributes: [25 26] -no-such-struct: cta_ip_nla_policy$ipv4 -no-such-struct: cta_ip_nla_policy$ipv6 diff --git a/sys/linux/socket_netlink_netfilter_nftables.txt.warn b/sys/linux/socket_netlink_netfilter_nftables.txt.warn index b6232942f..ba58f9b22 100644 --- a/sys/linux/socket_netlink_netfilter_nftables.txt.warn +++ b/sys/linux/socket_netlink_netfilter_nftables.txt.warn @@ -11,5 +11,4 @@ bad-netlink-attr: nft_verdict_policy: missing attributes: [3] bad-netlink-attr: nft_obj_policy: missing attributes: [8] bad-netlink-attr: nft_bitwise_policy: missing attributes: [6 7] bad-netlink-attr: nft_dynset_policy: missing attributes: [10] -no-such-struct: nft_flow_offload_policy bad-netlink-attr: nft_socket_policy: missing attributes: [3] diff --git a/sys/linux/socket_netlink_netfilter_osf.txt.warn b/sys/linux/socket_netlink_netfilter_osf.txt.warn deleted file mode 100644 index 376107d01..000000000 --- a/sys/linux/socket_netlink_netfilter_osf.txt.warn +++ /dev/null @@ -1 +0,0 @@ -no-such-struct: nfnl_osf_policy diff --git a/sys/linux/socket_netlink_rdma.txt.warn b/sys/linux/socket_netlink_rdma.txt.warn deleted file mode 100644 index 7551b6af7..000000000 --- a/sys/linux/socket_netlink_rdma.txt.warn +++ /dev/null @@ -1,2 +0,0 @@ -no-such-struct: nldev_policy$NEWLINK -no-such-struct: nldev_policy$PORT_GET diff --git a/sys/linux/socket_netlink_route.txt.warn b/sys/linux/socket_netlink_route.txt.warn index 8c1942a12..fd66ec004 100644 --- a/sys/linux/socket_netlink_route.txt.warn +++ b/sys/linux/socket_netlink_route.txt.warn @@ -1,7 +1,6 @@ bad-netlink-attr: ifla_policy.IFLA_IFALIASn: duplicate attribute no-such-netlink-policy: ifla_af_spec_policy bad-netlink-attr: ifla_info_policy$t: missing attributes: [4] -no-such-struct: ifla_info_policy$t no-such-netlink-policy: batadv_policy bad-netlink-attr: macvlan_policy: missing attributes: [6 7] bad-netlink-attr: hsr_policy: missing attributes: [7] @@ -19,7 +18,6 @@ no-such-netlink-policy: fib6_rule_policy bad-netlink-attr: nda_policy: missing attributes: [12 13 14] bad-netlink-attr: nda_policy.NDA_DST_IPV6: duplicate attribute bad-netlink-attr: nda_policy.NDA_DST_MAC: duplicate attribute -no-such-struct: br_vlan_db_dump_pol bad-netlink-attr: br_vlan_db_policy: missing attributes: [6] no-such-netlink-policy: br_mdb_policy no-such-struct: br_mdb_entry_sub diff --git a/tools/syz-check/check.go b/tools/syz-check/check.go index 63606d23a..2634f27f7 100644 --- a/tools/syz-check/check.go +++ b/tools/syz-check/check.go @@ -213,6 +213,9 @@ func checkImpl(structs map[string]*dwarf.StructType, structTypes []prog.Type, if astStruct == nil { continue } + if _, ok := isNetlinkPolicy(typ); ok { + continue // netlink policies are not structs even if we describe them as structs + } // In some cases we split a single struct into multiple ones // (more precise description), so try to match our foo$bar with kernel foo. kernelStruct := structs[name] @@ -409,14 +412,8 @@ func checkNetlinkStruct(locs map[string]*ast.Struct, symbols map[string][]symbol if astStruct == nil { return nil, nil } - var fields []prog.Field - switch t := typ.(type) { - case *prog.StructType: - fields = t.Fields - case *prog.UnionType: - fields = t.Fields - } - if !isNetlinkPolicy(fields) { + fields, ok := isNetlinkPolicy(typ) + if !ok { return nil, nil } // In some cases we split a single policy into multiple ones (more precise description), @@ -513,7 +510,16 @@ func checkMissingAttrs(checkedAttrs map[string]*checkAttr) []Warn { return warnings } -func isNetlinkPolicy(fields []prog.Field) bool { +func isNetlinkPolicy(typ prog.Type) ([]prog.Field, bool) { + var fields []prog.Field + switch t := typ.(type) { + case *prog.StructType: + fields = t.Fields + case *prog.UnionType: + fields = t.Fields + default: + return nil, false + } haveAttr := false for _, fld := range fields { field := fld.Type @@ -527,19 +533,12 @@ func isNetlinkPolicy(fields []prog.Field) bool { if arr, ok := field.(*prog.ArrayType); ok { field = arr.Elem } - if field1, ok := field.(*prog.StructType); ok { - if isNetlinkPolicy(field1.Fields) { - continue - } - } - if field1, ok := field.(*prog.UnionType); ok { - if isNetlinkPolicy(field1.Fields) { - continue - } + if _, ok := isNetlinkPolicy(field); ok { + continue } - return false + return nil, false } - return haveAttr + return fields, haveAttr } const ( |
