Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

netlink: remove NLA_EXACT_LEN_WARN

Use a validation type instead, so we can later expose
the NLA_* values to userspace for policy descriptions.

Some transformations were done with this spatch:

@@
identifier p;
expression X, L, A;
@@
struct nla_policy p[X] = {
[A] =
-{ .type = NLA_EXACT_LEN_WARN, .len = L },
+NLA_POLICY_EXACT_LEN_WARN(L),
...
};

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Johannes Berg and committed by
David S. Miller
c7721c05 da4063bd

+36 -76
+8 -7
include/net/netlink.h
··· 182 182 NLA_BITFIELD32, 183 183 NLA_REJECT, 184 184 NLA_EXACT_LEN, 185 - NLA_EXACT_LEN_WARN, 186 185 NLA_MIN_LEN, 187 186 __NLA_TYPE_MAX, 188 187 }; ··· 203 204 NLA_VALIDATE_MAX, 204 205 NLA_VALIDATE_RANGE_PTR, 205 206 NLA_VALIDATE_FUNCTION, 207 + NLA_VALIDATE_WARN_TOO_LONG, 206 208 }; 207 209 208 210 /** ··· 237 237 * just like "All other" 238 238 * NLA_BITFIELD32 Unused 239 239 * NLA_REJECT Unused 240 - * NLA_EXACT_LEN Attribute must have exactly this length, otherwise 241 - * it is rejected. 242 - * NLA_EXACT_LEN_WARN Attribute should have exactly this length, a warning 243 - * is logged if it is longer, shorter is rejected. 240 + * NLA_EXACT_LEN Attribute should have exactly this length, otherwise 241 + * it is rejected or warned about, the latter happening 242 + * if and only if the `validation_type' is set to 243 + * NLA_VALIDATE_WARN_TOO_LONG. 244 244 * NLA_MIN_LEN Minimum length of attribute payload 245 245 * All other Minimum length of attribute payload 246 246 * ··· 350 350 }; 351 351 352 352 #define NLA_POLICY_EXACT_LEN(_len) { .type = NLA_EXACT_LEN, .len = _len } 353 - #define NLA_POLICY_EXACT_LEN_WARN(_len) { .type = NLA_EXACT_LEN_WARN, \ 354 - .len = _len } 353 + #define NLA_POLICY_EXACT_LEN_WARN(_len) \ 354 + { .type = NLA_EXACT_LEN, .len = _len, \ 355 + .validation_type = NLA_VALIDATE_WARN_TOO_LONG, } 355 356 #define NLA_POLICY_MIN_LEN(_len) { .type = NLA_MIN_LEN, .len = _len } 356 357 357 358 #define NLA_POLICY_ETH_ADDR NLA_POLICY_EXACT_LEN(ETH_ALEN)
+10 -6
lib/nlattr.c
··· 261 261 BUG_ON(pt->type > NLA_TYPE_MAX); 262 262 263 263 if ((nla_attr_len[pt->type] && attrlen != nla_attr_len[pt->type]) || 264 - (pt->type == NLA_EXACT_LEN_WARN && attrlen != pt->len)) { 264 + (pt->type == NLA_EXACT_LEN && 265 + pt->validation_type == NLA_VALIDATE_WARN_TOO_LONG && 266 + attrlen != pt->len)) { 265 267 pr_warn_ratelimited("netlink: '%s': attribute type %d has an invalid length.\n", 266 268 current->comm, type); 267 269 if (validate & NL_VALIDATE_STRICT_ATTRS) { ··· 289 287 } 290 288 291 289 switch (pt->type) { 292 - case NLA_EXACT_LEN: 293 - if (attrlen != pt->len) 294 - goto out_err; 295 - break; 296 - 297 290 case NLA_REJECT: 298 291 if (extack && pt->reject_message) { 299 292 NL_SET_BAD_ATTR(extack, nla); ··· 402 405 goto out_err; 403 406 break; 404 407 408 + case NLA_EXACT_LEN: 409 + if (pt->validation_type != NLA_VALIDATE_WARN_TOO_LONG) { 410 + if (attrlen != pt->len) 411 + goto out_err; 412 + break; 413 + } 414 + /* fall through */ 405 415 default: 406 416 if (pt->len) 407 417 minlen = pt->len;
+18 -63
net/wireless/nl80211.c
··· 376 376 [NL80211_ATTR_IFINDEX] = { .type = NLA_U32 }, 377 377 [NL80211_ATTR_IFNAME] = { .type = NLA_NUL_STRING, .len = IFNAMSIZ-1 }, 378 378 379 - [NL80211_ATTR_MAC] = { .type = NLA_EXACT_LEN_WARN, .len = ETH_ALEN }, 380 - [NL80211_ATTR_PREV_BSSID] = { 381 - .type = NLA_EXACT_LEN_WARN, 382 - .len = ETH_ALEN 383 - }, 379 + [NL80211_ATTR_MAC] = NLA_POLICY_EXACT_LEN_WARN(ETH_ALEN), 380 + [NL80211_ATTR_PREV_BSSID] = NLA_POLICY_EXACT_LEN_WARN(ETH_ALEN), 384 381 385 382 [NL80211_ATTR_KEY] = { .type = NLA_NESTED, }, 386 383 [NL80211_ATTR_KEY_DATA] = { .type = NLA_BINARY, ··· 429 432 [NL80211_ATTR_MESH_CONFIG] = { .type = NLA_NESTED }, 430 433 [NL80211_ATTR_SUPPORT_MESH_AUTH] = { .type = NLA_FLAG }, 431 434 432 - [NL80211_ATTR_HT_CAPABILITY] = { 433 - .type = NLA_EXACT_LEN_WARN, 434 - .len = NL80211_HT_CAPABILITY_LEN 435 - }, 435 + [NL80211_ATTR_HT_CAPABILITY] = NLA_POLICY_EXACT_LEN_WARN(NL80211_HT_CAPABILITY_LEN), 436 436 437 437 [NL80211_ATTR_MGMT_SUBTYPE] = { .type = NLA_U8 }, 438 438 [NL80211_ATTR_IE] = NLA_POLICY_VALIDATE_FN(NLA_BINARY, ··· 460 466 [NL80211_ATTR_WPA_VERSIONS] = { .type = NLA_U32 }, 461 467 [NL80211_ATTR_PID] = { .type = NLA_U32 }, 462 468 [NL80211_ATTR_4ADDR] = { .type = NLA_U8 }, 463 - [NL80211_ATTR_PMKID] = { 464 - .type = NLA_EXACT_LEN_WARN, 465 - .len = WLAN_PMKID_LEN 466 - }, 469 + [NL80211_ATTR_PMKID] = NLA_POLICY_EXACT_LEN_WARN(WLAN_PMKID_LEN), 467 470 [NL80211_ATTR_DURATION] = { .type = NLA_U32 }, 468 471 [NL80211_ATTR_COOKIE] = { .type = NLA_U64 }, 469 472 [NL80211_ATTR_TX_RATES] = { .type = NLA_NESTED }, ··· 524 533 [NL80211_ATTR_WDEV] = { .type = NLA_U64 }, 525 534 [NL80211_ATTR_USER_REG_HINT_TYPE] = { .type = NLA_U32 }, 526 535 [NL80211_ATTR_AUTH_DATA] = { .type = NLA_BINARY, }, 527 - [NL80211_ATTR_VHT_CAPABILITY] = { 528 - .type = NLA_EXACT_LEN_WARN, 529 - .len = NL80211_VHT_CAPABILITY_LEN 530 - }, 536 + [NL80211_ATTR_VHT_CAPABILITY] = NLA_POLICY_EXACT_LEN_WARN(NL80211_VHT_CAPABILITY_LEN), 531 537 [NL80211_ATTR_SCAN_FLAGS] = { .type = NLA_U32 }, 532 538 [NL80211_ATTR_P2P_CTWINDOW] = NLA_POLICY_MAX(NLA_U8, 127), 533 539 [NL80211_ATTR_P2P_OPPPS] = NLA_POLICY_MAX(NLA_U8, 1), ··· 562 574 [NL80211_ATTR_VENDOR_DATA] = { .type = NLA_BINARY }, 563 575 [NL80211_ATTR_QOS_MAP] = { .type = NLA_BINARY, 564 576 .len = IEEE80211_QOS_MAP_LEN_MAX }, 565 - [NL80211_ATTR_MAC_HINT] = { 566 - .type = NLA_EXACT_LEN_WARN, 567 - .len = ETH_ALEN 568 - }, 577 + [NL80211_ATTR_MAC_HINT] = NLA_POLICY_EXACT_LEN_WARN(ETH_ALEN), 569 578 [NL80211_ATTR_WIPHY_FREQ_HINT] = { .type = NLA_U32 }, 570 579 [NL80211_ATTR_TDLS_PEER_CAPABILITY] = { .type = NLA_U32 }, 571 580 [NL80211_ATTR_SOCKET_OWNER] = { .type = NLA_FLAG }, ··· 574 589 [NL80211_ATTR_ADMITTED_TIME] = { .type = NLA_U16 }, 575 590 [NL80211_ATTR_SMPS_MODE] = { .type = NLA_U8 }, 576 591 [NL80211_ATTR_OPER_CLASS] = { .type = NLA_U8 }, 577 - [NL80211_ATTR_MAC_MASK] = { 578 - .type = NLA_EXACT_LEN_WARN, 579 - .len = ETH_ALEN 580 - }, 592 + [NL80211_ATTR_MAC_MASK] = NLA_POLICY_EXACT_LEN_WARN(ETH_ALEN), 581 593 [NL80211_ATTR_WIPHY_SELF_MANAGED_REG] = { .type = NLA_FLAG }, 582 594 [NL80211_ATTR_NETNS_FD] = { .type = NLA_U32 }, 583 595 [NL80211_ATTR_SCHED_SCAN_DELAY] = { .type = NLA_U32 }, ··· 586 604 [NL80211_ATTR_MU_MIMO_GROUP_DATA] = { 587 605 .len = VHT_MUMIMO_GROUPS_DATA_LEN 588 606 }, 589 - [NL80211_ATTR_MU_MIMO_FOLLOW_MAC_ADDR] = { 590 - .type = NLA_EXACT_LEN_WARN, 591 - .len = ETH_ALEN 592 - }, 607 + [NL80211_ATTR_MU_MIMO_FOLLOW_MAC_ADDR] = NLA_POLICY_EXACT_LEN_WARN(ETH_ALEN), 593 608 [NL80211_ATTR_NAN_MASTER_PREF] = NLA_POLICY_MIN(NLA_U8, 1), 594 609 [NL80211_ATTR_BANDS] = { .type = NLA_U32 }, 595 610 [NL80211_ATTR_NAN_FUNC] = { .type = NLA_NESTED }, 596 611 [NL80211_ATTR_FILS_KEK] = { .type = NLA_BINARY, 597 612 .len = FILS_MAX_KEK_LEN }, 598 - [NL80211_ATTR_FILS_NONCES] = { 599 - .type = NLA_EXACT_LEN_WARN, 600 - .len = 2 * FILS_NONCE_LEN 601 - }, 613 + [NL80211_ATTR_FILS_NONCES] = NLA_POLICY_EXACT_LEN_WARN(2 * FILS_NONCE_LEN), 602 614 [NL80211_ATTR_MULTICAST_TO_UNICAST_ENABLED] = { .type = NLA_FLAG, }, 603 - [NL80211_ATTR_BSSID] = { .type = NLA_EXACT_LEN_WARN, .len = ETH_ALEN }, 615 + [NL80211_ATTR_BSSID] = NLA_POLICY_EXACT_LEN_WARN(ETH_ALEN), 604 616 [NL80211_ATTR_SCHED_SCAN_RELATIVE_RSSI] = { .type = NLA_S8 }, 605 617 [NL80211_ATTR_SCHED_SCAN_RSSI_ADJUST] = { 606 618 .len = sizeof(struct nl80211_bss_select_rssi_adjust) ··· 607 631 [NL80211_ATTR_FILS_ERP_NEXT_SEQ_NUM] = { .type = NLA_U16 }, 608 632 [NL80211_ATTR_FILS_ERP_RRK] = { .type = NLA_BINARY, 609 633 .len = FILS_ERP_MAX_RRK_LEN }, 610 - [NL80211_ATTR_FILS_CACHE_ID] = { .type = NLA_EXACT_LEN_WARN, .len = 2 }, 634 + [NL80211_ATTR_FILS_CACHE_ID] = NLA_POLICY_EXACT_LEN_WARN(2), 611 635 [NL80211_ATTR_PMK] = { .type = NLA_BINARY, .len = PMK_MAX_LEN }, 612 636 [NL80211_ATTR_SCHED_SCAN_MULTI] = { .type = NLA_FLAG }, 613 637 [NL80211_ATTR_EXTERNAL_AUTH_SUPPORT] = { .type = NLA_FLAG }, ··· 677 701 nl80211_wowlan_tcp_policy[NUM_NL80211_WOWLAN_TCP] = { 678 702 [NL80211_WOWLAN_TCP_SRC_IPV4] = { .type = NLA_U32 }, 679 703 [NL80211_WOWLAN_TCP_DST_IPV4] = { .type = NLA_U32 }, 680 - [NL80211_WOWLAN_TCP_DST_MAC] = { 681 - .type = NLA_EXACT_LEN_WARN, 682 - .len = ETH_ALEN 683 - }, 704 + [NL80211_WOWLAN_TCP_DST_MAC] = NLA_POLICY_EXACT_LEN_WARN(ETH_ALEN), 684 705 [NL80211_WOWLAN_TCP_SRC_PORT] = { .type = NLA_U16 }, 685 706 [NL80211_WOWLAN_TCP_DST_PORT] = { .type = NLA_U16 }, 686 707 [NL80211_WOWLAN_TCP_DATA_PAYLOAD] = { .type = NLA_MIN_LEN, .len = 1 }, ··· 707 734 /* policy for GTK rekey offload attributes */ 708 735 static const struct nla_policy 709 736 nl80211_rekey_policy[NUM_NL80211_REKEY_DATA] = { 710 - [NL80211_REKEY_DATA_KEK] = { 711 - .type = NLA_EXACT_LEN_WARN, 712 - .len = NL80211_KEK_LEN, 713 - }, 714 - [NL80211_REKEY_DATA_KCK] = { 715 - .type = NLA_EXACT_LEN_WARN, 716 - .len = NL80211_KCK_LEN, 717 - }, 718 - [NL80211_REKEY_DATA_REPLAY_CTR] = { 719 - .type = NLA_EXACT_LEN_WARN, 720 - .len = NL80211_REPLAY_CTR_LEN 721 - }, 737 + [NL80211_REKEY_DATA_KEK] = NLA_POLICY_EXACT_LEN_WARN(NL80211_KEK_LEN), 738 + [NL80211_REKEY_DATA_KCK] = NLA_POLICY_EXACT_LEN_WARN(NL80211_KCK_LEN), 739 + [NL80211_REKEY_DATA_REPLAY_CTR] = NLA_POLICY_EXACT_LEN_WARN(NL80211_REPLAY_CTR_LEN), 722 740 }; 723 741 724 742 static const struct nla_policy ··· 724 760 nl80211_match_policy[NL80211_SCHED_SCAN_MATCH_ATTR_MAX + 1] = { 725 761 [NL80211_SCHED_SCAN_MATCH_ATTR_SSID] = { .type = NLA_BINARY, 726 762 .len = IEEE80211_MAX_SSID_LEN }, 727 - [NL80211_SCHED_SCAN_MATCH_ATTR_BSSID] = { 728 - .type = NLA_EXACT_LEN_WARN, 729 - .len = ETH_ALEN 730 - }, 763 + [NL80211_SCHED_SCAN_MATCH_ATTR_BSSID] = NLA_POLICY_EXACT_LEN_WARN(ETH_ALEN), 731 764 [NL80211_SCHED_SCAN_MATCH_ATTR_RSSI] = { .type = NLA_U32 }, 732 765 [NL80211_SCHED_SCAN_MATCH_PER_BAND_RSSI] = 733 766 NLA_POLICY_NESTED(nl80211_match_band_rssi_policy), ··· 756 795 [NL80211_NAN_FUNC_SUBSCRIBE_ACTIVE] = { .type = NLA_FLAG }, 757 796 [NL80211_NAN_FUNC_FOLLOW_UP_ID] = { .type = NLA_U8 }, 758 797 [NL80211_NAN_FUNC_FOLLOW_UP_REQ_ID] = { .type = NLA_U8 }, 759 - [NL80211_NAN_FUNC_FOLLOW_UP_DEST] = { 760 - .type = NLA_EXACT_LEN_WARN, 761 - .len = ETH_ALEN 762 - }, 798 + [NL80211_NAN_FUNC_FOLLOW_UP_DEST] = NLA_POLICY_EXACT_LEN_WARN(ETH_ALEN), 763 799 [NL80211_NAN_FUNC_CLOSE_RANGE] = { .type = NLA_FLAG }, 764 800 [NL80211_NAN_FUNC_TTL] = { .type = NLA_U32 }, 765 801 [NL80211_NAN_FUNC_SERVICE_INFO] = { .type = NLA_BINARY, ··· 4362 4404 .len = NL80211_MAX_SUPP_RATES }, 4363 4405 [NL80211_TXRATE_HT] = { .type = NLA_BINARY, 4364 4406 .len = NL80211_MAX_SUPP_HT_RATES }, 4365 - [NL80211_TXRATE_VHT] = { 4366 - .type = NLA_EXACT_LEN_WARN, 4367 - .len = sizeof(struct nl80211_txrate_vht), 4368 - }, 4407 + [NL80211_TXRATE_VHT] = NLA_POLICY_EXACT_LEN_WARN(sizeof(struct nl80211_txrate_vht)), 4369 4408 [NL80211_TXRATE_GI] = { .type = NLA_U8 }, 4370 4409 }; 4371 4410