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

Revert "net: ena: ethtool: add extra properties retrieval via get_priv_flags"

This reverts commit 315c28d2b714 ("net: ena: ethtool: add extra properties retrieval via get_priv_flags").

As discussed at netconf and on the mailing list we can't allow
for the the abuse of private flags for exposing arbitrary device
labels.

Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Jakub Kicinski and committed by
David S. Miller
eb203bae 1b2b01a7

+17 -190
-16
drivers/net/ethernet/amazon/ena/ena_admin_defs.h
··· 32 32 #ifndef _ENA_ADMIN_H_ 33 33 #define _ENA_ADMIN_H_ 34 34 35 - #define ENA_ADMIN_EXTRA_PROPERTIES_STRING_LEN 32 36 - #define ENA_ADMIN_EXTRA_PROPERTIES_COUNT 32 37 35 38 36 enum ena_admin_aq_opcode { 39 37 ENA_ADMIN_CREATE_SQ = 1, ··· 60 62 ENA_ADMIN_MAX_QUEUES_NUM = 2, 61 63 ENA_ADMIN_HW_HINTS = 3, 62 64 ENA_ADMIN_LLQ = 4, 63 - ENA_ADMIN_EXTRA_PROPERTIES_STRINGS = 5, 64 - ENA_ADMIN_EXTRA_PROPERTIES_FLAGS = 6, 65 65 ENA_ADMIN_MAX_QUEUES_EXT = 7, 66 66 ENA_ADMIN_RSS_HASH_FUNCTION = 10, 67 67 ENA_ADMIN_STATELESS_OFFLOAD_CONFIG = 11, ··· 595 599 u32 mtu; 596 600 }; 597 601 598 - struct ena_admin_get_extra_properties_strings_desc { 599 - u32 count; 600 - }; 601 - 602 - struct ena_admin_get_extra_properties_flags_desc { 603 - u32 flags; 604 - }; 605 - 606 602 struct ena_admin_set_feature_host_attr_desc { 607 603 /* host OS info base address in OS memory. host info is 4KB of 608 604 * physically contiguous ··· 914 926 struct ena_admin_feature_intr_moder_desc intr_moderation; 915 927 916 928 struct ena_admin_ena_hw_hints hw_hints; 917 - 918 - struct ena_admin_get_extra_properties_strings_desc extra_properties_strings; 919 - 920 - struct ena_admin_get_extra_properties_flags_desc extra_properties_flags; 921 929 } u; 922 930 }; 923 931
-56
drivers/net/ethernet/amazon/ena/ena_com.c
··· 1896 1896 return ena_com_get_feature(ena_dev, resp, ENA_ADMIN_LINK_CONFIG, 0); 1897 1897 } 1898 1898 1899 - int ena_com_extra_properties_strings_init(struct ena_com_dev *ena_dev) 1900 - { 1901 - struct ena_admin_get_feat_resp resp; 1902 - struct ena_extra_properties_strings *extra_properties_strings = 1903 - &ena_dev->extra_properties_strings; 1904 - u32 rc; 1905 - 1906 - extra_properties_strings->size = ENA_ADMIN_EXTRA_PROPERTIES_COUNT * 1907 - ENA_ADMIN_EXTRA_PROPERTIES_STRING_LEN; 1908 - 1909 - extra_properties_strings->virt_addr = 1910 - dma_alloc_coherent(ena_dev->dmadev, 1911 - extra_properties_strings->size, 1912 - &extra_properties_strings->dma_addr, 1913 - GFP_KERNEL); 1914 - if (unlikely(!extra_properties_strings->virt_addr)) { 1915 - pr_err("Failed to allocate extra properties strings\n"); 1916 - return 0; 1917 - } 1918 - 1919 - rc = ena_com_get_feature_ex(ena_dev, &resp, 1920 - ENA_ADMIN_EXTRA_PROPERTIES_STRINGS, 1921 - extra_properties_strings->dma_addr, 1922 - extra_properties_strings->size, 0); 1923 - if (rc) { 1924 - pr_debug("Failed to get extra properties strings\n"); 1925 - goto err; 1926 - } 1927 - 1928 - return resp.u.extra_properties_strings.count; 1929 - err: 1930 - ena_com_delete_extra_properties_strings(ena_dev); 1931 - return 0; 1932 - } 1933 - 1934 - void ena_com_delete_extra_properties_strings(struct ena_com_dev *ena_dev) 1935 - { 1936 - struct ena_extra_properties_strings *extra_properties_strings = 1937 - &ena_dev->extra_properties_strings; 1938 - 1939 - if (extra_properties_strings->virt_addr) { 1940 - dma_free_coherent(ena_dev->dmadev, 1941 - extra_properties_strings->size, 1942 - extra_properties_strings->virt_addr, 1943 - extra_properties_strings->dma_addr); 1944 - extra_properties_strings->virt_addr = NULL; 1945 - } 1946 - } 1947 - 1948 - int ena_com_get_extra_properties_flags(struct ena_com_dev *ena_dev, 1949 - struct ena_admin_get_feat_resp *resp) 1950 - { 1951 - return ena_com_get_feature(ena_dev, resp, 1952 - ENA_ADMIN_EXTRA_PROPERTIES_FLAGS, 0); 1953 - } 1954 - 1955 1899 int ena_com_get_dev_attr_feat(struct ena_com_dev *ena_dev, 1956 1900 struct ena_com_dev_get_features_ctx *get_feat_ctx) 1957 1901 {
-32
drivers/net/ethernet/amazon/ena/ena_com.h
··· 352 352 dma_addr_t host_info_dma_addr; 353 353 }; 354 354 355 - struct ena_extra_properties_strings { 356 - u8 *virt_addr; 357 - dma_addr_t dma_addr; 358 - u32 size; 359 - }; 360 - 361 355 /* Each ena_dev is a PCI function. */ 362 356 struct ena_com_dev { 363 357 struct ena_com_admin_queue admin_queue; ··· 380 386 struct ena_intr_moder_entry *intr_moder_tbl; 381 387 382 388 struct ena_com_llq_info llq_info; 383 - struct ena_extra_properties_strings extra_properties_strings; 384 389 }; 385 390 386 391 struct ena_com_dev_get_features_ctx { ··· 612 619 */ 613 620 int ena_com_get_link_params(struct ena_com_dev *ena_dev, 614 621 struct ena_admin_get_feat_resp *resp); 615 - 616 - /* ena_com_extra_properties_strings_init - Initialize the extra properties strings buffer. 617 - * @ena_dev: ENA communication layer struct 618 - * 619 - * Initialize the extra properties strings buffer. 620 - */ 621 - int ena_com_extra_properties_strings_init(struct ena_com_dev *ena_dev); 622 - 623 - /* ena_com_delete_extra_properties_strings - Free the extra properties strings buffer. 624 - * @ena_dev: ENA communication layer struct 625 - * 626 - * Free the allocated extra properties strings buffer. 627 - */ 628 - void ena_com_delete_extra_properties_strings(struct ena_com_dev *ena_dev); 629 - 630 - /* ena_com_get_extra_properties_flags - Retrieve extra properties flags. 631 - * @ena_dev: ENA communication layer struct 632 - * @resp: Extra properties flags. 633 - * 634 - * Retrieve the extra properties flags. 635 - * 636 - * @return - 0 on Success negative value otherwise. 637 - */ 638 - int ena_com_get_extra_properties_flags(struct ena_com_dev *ena_dev, 639 - struct ena_admin_get_feat_resp *resp); 640 622 641 623 /* ena_com_get_dma_width - Retrieve physical dma address width the device 642 624 * supports.
+17 -70
drivers/net/ethernet/amazon/ena/ena_ethtool.c
··· 198 198 ena_dev_admin_queue_stats(adapter, &data); 199 199 } 200 200 201 - static int get_stats_sset_count(struct ena_adapter *adapter) 202 - { 203 - return adapter->num_queues * (ENA_STATS_ARRAY_TX + ENA_STATS_ARRAY_RX) 204 - + ENA_STATS_ARRAY_GLOBAL + ENA_STATS_ARRAY_ENA_COM; 205 - } 206 - 207 201 int ena_get_sset_count(struct net_device *netdev, int sset) 208 202 { 209 203 struct ena_adapter *adapter = netdev_priv(netdev); 210 204 211 - switch (sset) { 212 - case ETH_SS_STATS: 213 - return get_stats_sset_count(adapter); 214 - case ETH_SS_PRIV_FLAGS: 215 - return adapter->ena_extra_properties_count; 216 - default: 205 + if (sset != ETH_SS_STATS) 217 206 return -EOPNOTSUPP; 218 - } 207 + 208 + return adapter->num_queues * (ENA_STATS_ARRAY_TX + ENA_STATS_ARRAY_RX) 209 + + ENA_STATS_ARRAY_GLOBAL + ENA_STATS_ARRAY_ENA_COM; 219 210 } 220 211 221 212 static void ena_queue_strings(struct ena_adapter *adapter, u8 **data) ··· 248 257 } 249 258 } 250 259 251 - static void get_stats_strings(struct ena_adapter *adapter, u8 *data) 252 - { 253 - const struct ena_stats *ena_stats; 254 - int i; 255 - 256 - for (i = 0; i < ENA_STATS_ARRAY_GLOBAL; i++) { 257 - ena_stats = &ena_stats_global_strings[i]; 258 - memcpy(data, ena_stats->name, ETH_GSTRING_LEN); 259 - data += ETH_GSTRING_LEN; 260 - } 261 - ena_queue_strings(adapter, &data); 262 - ena_com_dev_strings(&data); 263 - } 264 - 265 - static void get_private_flags_strings(struct ena_adapter *adapter, u8 *data) 266 - { 267 - struct ena_com_dev *ena_dev = adapter->ena_dev; 268 - u8 *strings = ena_dev->extra_properties_strings.virt_addr; 269 - int i; 270 - 271 - if (unlikely(!strings)) { 272 - adapter->ena_extra_properties_count = 0; 273 - return; 274 - } 275 - 276 - for (i = 0; i < adapter->ena_extra_properties_count; i++) { 277 - strlcpy(data, strings + ENA_ADMIN_EXTRA_PROPERTIES_STRING_LEN * i, 278 - ETH_GSTRING_LEN); 279 - data += ETH_GSTRING_LEN; 280 - } 281 - } 282 - 283 260 static void ena_get_strings(struct net_device *netdev, u32 sset, u8 *data) 284 261 { 285 262 struct ena_adapter *adapter = netdev_priv(netdev); 263 + const struct ena_stats *ena_stats; 264 + int i; 286 265 287 - switch (sset) { 288 - case ETH_SS_STATS: 289 - get_stats_strings(adapter, data); 290 - break; 291 - case ETH_SS_PRIV_FLAGS: 292 - get_private_flags_strings(adapter, data); 293 - break; 294 - default: 295 - break; 266 + if (sset != ETH_SS_STATS) 267 + return; 268 + 269 + for (i = 0; i < ENA_STATS_ARRAY_GLOBAL; i++) { 270 + ena_stats = &ena_stats_global_strings[i]; 271 + 272 + memcpy(data, ena_stats->name, ETH_GSTRING_LEN); 273 + data += ETH_GSTRING_LEN; 296 274 } 275 + 276 + ena_queue_strings(adapter, &data); 277 + ena_com_dev_strings(&data); 297 278 } 298 279 299 280 static int ena_get_link_ksettings(struct net_device *netdev, ··· 442 479 strlcpy(info->version, DRV_MODULE_VERSION, sizeof(info->version)); 443 480 strlcpy(info->bus_info, pci_name(adapter->pdev), 444 481 sizeof(info->bus_info)); 445 - info->n_priv_flags = adapter->ena_extra_properties_count; 446 482 } 447 483 448 484 static void ena_get_ringparam(struct net_device *netdev, ··· 818 856 return ret; 819 857 } 820 858 821 - static u32 ena_get_priv_flags(struct net_device *netdev) 822 - { 823 - struct ena_adapter *adapter = netdev_priv(netdev); 824 - struct ena_com_dev *ena_dev = adapter->ena_dev; 825 - struct ena_admin_get_feat_resp get_resp; 826 - u32 rc; 827 - 828 - rc = ena_com_get_extra_properties_flags(ena_dev, &get_resp); 829 - if (!rc) 830 - return get_resp.u.extra_properties_flags.flags; 831 - 832 - return 0; 833 - } 834 - 835 859 static const struct ethtool_ops ena_ethtool_ops = { 836 860 .get_link_ksettings = ena_get_link_ksettings, 837 861 .get_drvinfo = ena_get_drvinfo, ··· 840 892 .get_channels = ena_get_channels, 841 893 .get_tunable = ena_get_tunable, 842 894 .set_tunable = ena_set_tunable, 843 - .get_priv_flags = ena_get_priv_flags, 844 895 }; 845 896 846 897 void ena_set_ethtool_ops(struct net_device *netdev)
-14
drivers/net/ethernet/amazon/ena/ena_netdev.c
··· 2472 2472 ena_com_delete_debug_area(adapter->ena_dev); 2473 2473 } 2474 2474 2475 - static void ena_extra_properties_strings_destroy(struct net_device *netdev) 2476 - { 2477 - struct ena_adapter *adapter = netdev_priv(netdev); 2478 - 2479 - ena_com_delete_extra_properties_strings(adapter->ena_dev); 2480 - adapter->ena_extra_properties_count = 0; 2481 - } 2482 - 2483 2475 static void ena_get_stats64(struct net_device *netdev, 2484 2476 struct rtnl_link_stats64 *stats) 2485 2477 { ··· 3570 3578 3571 3579 ena_config_debug_area(adapter); 3572 3580 3573 - adapter->ena_extra_properties_count = 3574 - ena_com_extra_properties_strings_init(ena_dev); 3575 - 3576 3581 memcpy(adapter->netdev->perm_addr, adapter->mac_addr, netdev->addr_len); 3577 3582 3578 3583 netif_carrier_off(netdev); ··· 3609 3620 return 0; 3610 3621 3611 3622 err_rss: 3612 - ena_extra_properties_strings_destroy(netdev); 3613 3623 ena_com_delete_debug_area(ena_dev); 3614 3624 ena_com_rss_destroy(ena_dev); 3615 3625 err_free_msix: ··· 3674 3686 ena_com_delete_debug_area(ena_dev); 3675 3687 3676 3688 ena_com_delete_host_info(ena_dev); 3677 - 3678 - ena_extra_properties_strings_destroy(netdev); 3679 3689 3680 3690 ena_release_bars(ena_dev, pdev); 3681 3691
-2
drivers/net/ethernet/amazon/ena/ena_netdev.h
··· 378 378 u32 last_monitored_tx_qid; 379 379 380 380 enum ena_regs_reset_reason_types reset_reason; 381 - 382 - u8 ena_extra_properties_count; 383 381 }; 384 382 385 383 void ena_set_ethtool_ops(struct net_device *netdev);