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

Merge branch 'net-constify-dev_addr-passing-for-protocols'

Jakub Kicinski says:

====================
net: constify dev_addr passing for protocols

Commit 406f42fa0d3c ("net-next: When a bond have a massive amount
of VLANs...") introduced a rbtree for faster Ethernet address look
up. To maintain netdev->dev_addr in this tree we need to make all
the writes to it got through appropriate helpers.

netdev->dev_addr will be made const to prevent direct writes.
This set sprinkles const across variables and arguments in protocol
code which are used to hold references to netdev->dev_addr.
====================

Link: https://lore.kernel.org/r/20211012155840.4151590-1-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

+63 -58
+7 -6
include/net/ax25.h
··· 304 304 void ax25_cb_add(ax25_cb *); 305 305 struct sock *ax25_find_listener(ax25_address *, int, struct net_device *, int); 306 306 struct sock *ax25_get_socket(ax25_address *, ax25_address *, int); 307 - ax25_cb *ax25_find_cb(ax25_address *, ax25_address *, ax25_digi *, 307 + ax25_cb *ax25_find_cb(const ax25_address *, ax25_address *, ax25_digi *, 308 308 struct net_device *); 309 309 void ax25_send_to_raw(ax25_address *, struct sk_buff *, int); 310 310 void ax25_destroy_socket(ax25_cb *); ··· 384 384 385 385 void ax25_linkfail_register(struct ax25_linkfail *lf); 386 386 void ax25_linkfail_release(struct ax25_linkfail *lf); 387 - int __must_check ax25_listen_register(ax25_address *, struct net_device *); 388 - void ax25_listen_release(ax25_address *, struct net_device *); 387 + int __must_check ax25_listen_register(const ax25_address *, 388 + struct net_device *); 389 + void ax25_listen_release(const ax25_address *, struct net_device *); 389 390 int(*ax25_protocol_function(unsigned int))(struct sk_buff *, ax25_cb *); 390 - int ax25_listen_mine(ax25_address *, struct net_device *); 391 + int ax25_listen_mine(const ax25_address *, struct net_device *); 391 392 void ax25_link_failed(ax25_cb *, int); 392 393 int ax25_protocol_is_registered(unsigned int); 393 394 ··· 402 401 extern const struct header_ops ax25_header_ops; 403 402 404 403 /* ax25_out.c */ 405 - ax25_cb *ax25_send_frame(struct sk_buff *, int, ax25_address *, ax25_address *, 406 - ax25_digi *, struct net_device *); 404 + ax25_cb *ax25_send_frame(struct sk_buff *, int, const ax25_address *, 405 + ax25_address *, ax25_digi *, struct net_device *); 407 406 void ax25_output(ax25_cb *, int, struct sk_buff *); 408 407 void ax25_kick(ax25_cb *); 409 408 void ax25_transmit_buffer(ax25_cb *, struct sk_buff *, int);
+1 -1
include/net/datalink.h
··· 12 12 int (*rcvfunc)(struct sk_buff *, struct net_device *, 13 13 struct packet_type *, struct net_device *); 14 14 int (*request)(struct datalink_proto *, struct sk_buff *, 15 - unsigned char *); 15 + const unsigned char *); 16 16 struct list_head node; 17 17 }; 18 18
+1 -1
include/net/dn.h
··· 166 166 int iif; 167 167 }; 168 168 169 - static inline __le16 dn_eth2dn(unsigned char *ethaddr) 169 + static inline __le16 dn_eth2dn(const unsigned char *ethaddr) 170 170 { 171 171 return get_unaligned((__le16 *)(ethaddr + 4)); 172 172 }
+1 -1
include/net/llc.h
··· 133 133 struct llc_sap *llc_sap_find(unsigned char sap_value); 134 134 135 135 int llc_build_and_send_ui_pkt(struct llc_sap *sap, struct sk_buff *skb, 136 - unsigned char *dmac, unsigned char dsap); 136 + const unsigned char *dmac, unsigned char dsap); 137 137 138 138 void llc_sap_handler(struct llc_sap *sap, struct sk_buff *skb); 139 139 void llc_conn_handler(struct llc_sap *sap, struct sk_buff *skb);
+2 -1
include/net/llc_if.h
··· 62 62 #define LLC_STATUS_CONFLICT 7 /* disconnect conn */ 63 63 #define LLC_STATUS_RESET_DONE 8 /* */ 64 64 65 - int llc_establish_connection(struct sock *sk, u8 *lmac, u8 *dmac, u8 dsap); 65 + int llc_establish_connection(struct sock *sk, const u8 *lmac, u8 *dmac, 66 + u8 dsap); 66 67 int llc_build_and_send_pkt(struct sock *sk, struct sk_buff *skb); 67 68 int llc_send_disc(struct sock *sk); 68 69 #endif /* LLC_IF_H */
+1 -1
include/net/ndisc.h
··· 137 137 u8 *opt, int opt_len, 138 138 struct ndisc_options *ndopts); 139 139 140 - void __ndisc_fill_addr_option(struct sk_buff *skb, int type, void *data, 140 + void __ndisc_fill_addr_option(struct sk_buff *skb, int type, const void *data, 141 141 int data_len, int pad); 142 142 143 143 #define NDISC_OPS_REDIRECT_DATA_SPACE 2
+4 -4
include/net/rose.h
··· 162 162 extern int sysctl_rose_maximum_vcs; 163 163 extern int sysctl_rose_window_size; 164 164 165 - int rosecmp(rose_address *, rose_address *); 166 - int rosecmpm(rose_address *, rose_address *, unsigned short); 165 + int rosecmp(const rose_address *, const rose_address *); 166 + int rosecmpm(const rose_address *, const rose_address *, unsigned short); 167 167 char *rose2asc(char *buf, const rose_address *); 168 168 struct sock *rose_find_socket(unsigned int, struct rose_neigh *); 169 169 void rose_kill_by_neigh(struct rose_neigh *); ··· 205 205 extern struct seq_operations rose_route_seqops; 206 206 207 207 void rose_add_loopback_neigh(void); 208 - int __must_check rose_add_loopback_node(rose_address *); 209 - void rose_del_loopback_node(rose_address *); 208 + int __must_check rose_add_loopback_node(const rose_address *); 209 + void rose_del_loopback_node(const rose_address *); 210 210 void rose_rt_device_down(struct net_device *); 211 211 void rose_link_device_down(struct net_device *); 212 212 struct net_device *rose_dev_first(void);
+1 -1
net/802/p8022.c
··· 23 23 #include <net/p8022.h> 24 24 25 25 static int p8022_request(struct datalink_proto *dl, struct sk_buff *skb, 26 - unsigned char *dest) 26 + const unsigned char *dest) 27 27 { 28 28 llc_build_and_send_ui_pkt(dl->sap, skb, dest, dl->sap->laddr.lsap); 29 29 return 0;
+1 -1
net/802/psnap.c
··· 79 79 * Put a SNAP header on a frame and pass to 802.2 80 80 */ 81 81 static int snap_request(struct datalink_proto *dl, 82 - struct sk_buff *skb, u8 *dest) 82 + struct sk_buff *skb, const u8 *dest) 83 83 { 84 84 memcpy(skb_push(skb, 5), dl->type, 5); 85 85 llc_build_and_send_ui_pkt(snap_sap, skb, dest, snap_sap->laddr.lsap);
+1 -1
net/ax25/af_ax25.c
··· 202 202 * Find an AX.25 control block given both ends. It will only pick up 203 203 * floating AX.25 control blocks or non Raw socket bound control blocks. 204 204 */ 205 - ax25_cb *ax25_find_cb(ax25_address *src_addr, ax25_address *dest_addr, 205 + ax25_cb *ax25_find_cb(const ax25_address *src_addr, ax25_address *dest_addr, 206 206 ax25_digi *digi, struct net_device *dev) 207 207 { 208 208 ax25_cb *s;
+1 -1
net/ax25/ax25_dev.c
··· 35 35 36 36 spin_lock_bh(&ax25_dev_lock); 37 37 for (ax25_dev = ax25_dev_list; ax25_dev != NULL; ax25_dev = ax25_dev->next) 38 - if (ax25cmp(addr, (ax25_address *)ax25_dev->dev->dev_addr) == 0) { 38 + if (ax25cmp(addr, (const ax25_address *)ax25_dev->dev->dev_addr) == 0) { 39 39 res = ax25_dev; 40 40 } 41 41 spin_unlock_bh(&ax25_dev_lock);
+3 -3
net/ax25/ax25_iface.c
··· 98 98 99 99 EXPORT_SYMBOL(ax25_linkfail_release); 100 100 101 - int ax25_listen_register(ax25_address *callsign, struct net_device *dev) 101 + int ax25_listen_register(const ax25_address *callsign, struct net_device *dev) 102 102 { 103 103 struct listen_struct *listen; 104 104 ··· 121 121 122 122 EXPORT_SYMBOL(ax25_listen_register); 123 123 124 - void ax25_listen_release(ax25_address *callsign, struct net_device *dev) 124 + void ax25_listen_release(const ax25_address *callsign, struct net_device *dev) 125 125 { 126 126 struct listen_struct *s, *listen; 127 127 ··· 171 171 return res; 172 172 } 173 173 174 - int ax25_listen_mine(ax25_address *callsign, struct net_device *dev) 174 + int ax25_listen_mine(const ax25_address *callsign, struct net_device *dev) 175 175 { 176 176 struct listen_struct *listen; 177 177
+2 -2
net/ax25/ax25_in.c
··· 181 181 } 182 182 183 183 static int ax25_rcv(struct sk_buff *skb, struct net_device *dev, 184 - ax25_address *dev_addr, struct packet_type *ptype) 184 + const ax25_address *dev_addr, struct packet_type *ptype) 185 185 { 186 186 ax25_address src, dest, *next_digi = NULL; 187 187 int type = 0, mine = 0, dama; ··· 447 447 448 448 skb_pull(skb, AX25_KISS_HEADER_LEN); /* Remove the KISS byte */ 449 449 450 - return ax25_rcv(skb, dev, (ax25_address *)dev->dev_addr, ptype); 450 + return ax25_rcv(skb, dev, (const ax25_address *)dev->dev_addr, ptype); 451 451 }
+1 -1
net/ax25/ax25_out.c
··· 29 29 30 30 static DEFINE_SPINLOCK(ax25_frag_lock); 31 31 32 - ax25_cb *ax25_send_frame(struct sk_buff *skb, int paclen, ax25_address *src, ax25_address *dest, ax25_digi *digi, struct net_device *dev) 32 + ax25_cb *ax25_send_frame(struct sk_buff *skb, int paclen, const ax25_address *src, ax25_address *dest, ax25_digi *digi, struct net_device *dev) 33 33 { 34 34 ax25_dev *ax25_dev; 35 35 ax25_cb *ax25;
+2 -2
net/ipv6/addrconf.c
··· 2237 2237 2238 2238 static int addrconf_ifid_ieee1394(u8 *eui, struct net_device *dev) 2239 2239 { 2240 - union fwnet_hwaddr *ha; 2240 + const union fwnet_hwaddr *ha; 2241 2241 2242 2242 if (dev->addr_len != FWNET_ALEN) 2243 2243 return -1; 2244 2244 2245 - ha = (union fwnet_hwaddr *)dev->dev_addr; 2245 + ha = (const union fwnet_hwaddr *)dev->dev_addr; 2246 2246 2247 2247 memcpy(eui, &ha->uc.uniq_id, sizeof(ha->uc.uniq_id)); 2248 2248 eui[0] ^= 2;
+2 -2
net/ipv6/ndisc.c
··· 142 142 }; 143 143 EXPORT_SYMBOL_GPL(nd_tbl); 144 144 145 - void __ndisc_fill_addr_option(struct sk_buff *skb, int type, void *data, 145 + void __ndisc_fill_addr_option(struct sk_buff *skb, int type, const void *data, 146 146 int data_len, int pad) 147 147 { 148 148 int space = __ndisc_opt_addr_space(data_len, pad); ··· 165 165 EXPORT_SYMBOL_GPL(__ndisc_fill_addr_option); 166 166 167 167 static inline void ndisc_fill_addr_option(struct sk_buff *skb, int type, 168 - void *data, u8 icmp6_type) 168 + const void *data, u8 icmp6_type) 169 169 { 170 170 __ndisc_fill_addr_option(skb, type, data, skb->dev->addr_len, 171 171 ndisc_addr_option_pad(skb->dev->type));
+1 -1
net/llc/llc_c_ac.c
··· 781 781 782 782 if (nskb) { 783 783 struct llc_sap *sap = llc->sap; 784 - u8 *dmac = llc->daddr.mac; 784 + const u8 *dmac = llc->daddr.mac; 785 785 786 786 if (llc->dev->flags & IFF_LOOPBACK) 787 787 dmac = llc->dev->dev_addr;
+1 -1
net/llc/llc_if.c
··· 80 80 * establishment will inform to upper layer via calling it's confirm 81 81 * function and passing proper information. 82 82 */ 83 - int llc_establish_connection(struct sock *sk, u8 *lmac, u8 *dmac, u8 dsap) 83 + int llc_establish_connection(struct sock *sk, const u8 *lmac, u8 *dmac, u8 dsap) 84 84 { 85 85 int rc = -EISCONN; 86 86 struct llc_addr laddr, daddr;
+1 -1
net/llc/llc_output.c
··· 56 56 * package primitive as an event and send to SAP event handler 57 57 */ 58 58 int llc_build_and_send_ui_pkt(struct llc_sap *sap, struct sk_buff *skb, 59 - unsigned char *dmac, unsigned char dsap) 59 + const unsigned char *dmac, unsigned char dsap) 60 60 { 61 61 int rc; 62 62 llc_pdu_header_init(skb, LLC_PDU_TYPE_U, sap->laddr.lsap,
+1 -1
net/llc/llc_proc.c
··· 26 26 #include <net/llc_c_st.h> 27 27 #include <net/llc_conn.h> 28 28 29 - static void llc_ui_format_mac(struct seq_file *seq, u8 *addr) 29 + static void llc_ui_format_mac(struct seq_file *seq, const u8 *addr) 30 30 { 31 31 seq_printf(seq, "%pM", addr); 32 32 }
+2 -2
net/netrom/af_netrom.c
··· 633 633 struct sock *sk = sock->sk; 634 634 struct nr_sock *nr = nr_sk(sk); 635 635 struct sockaddr_ax25 *addr = (struct sockaddr_ax25 *)uaddr; 636 - ax25_address *source = NULL; 636 + const ax25_address *source = NULL; 637 637 ax25_uid_assoc *user; 638 638 struct net_device *dev; 639 639 int err = 0; ··· 673 673 err = -ENETUNREACH; 674 674 goto out_release; 675 675 } 676 - source = (ax25_address *)dev->dev_addr; 676 + source = (const ax25_address *)dev->dev_addr; 677 677 678 678 user = ax25_findbyuid(current_euid()); 679 679 if (user) {
+3 -3
net/netrom/nr_dev.c
··· 108 108 if (err) 109 109 return err; 110 110 111 - ax25_listen_release((ax25_address *)dev->dev_addr, NULL); 111 + ax25_listen_release((const ax25_address *)dev->dev_addr, NULL); 112 112 } 113 113 114 114 dev_addr_set(dev, sa->sa_data); ··· 120 120 { 121 121 int err; 122 122 123 - err = ax25_listen_register((ax25_address *)dev->dev_addr, NULL); 123 + err = ax25_listen_register((const ax25_address *)dev->dev_addr, NULL); 124 124 if (err) 125 125 return err; 126 126 ··· 131 131 132 132 static int nr_close(struct net_device *dev) 133 133 { 134 - ax25_listen_release((ax25_address *)dev->dev_addr, NULL); 134 + ax25_listen_release((const ax25_address *)dev->dev_addr, NULL); 135 135 netif_stop_queue(dev); 136 136 return 0; 137 137 }
+2 -2
net/netrom/nr_route.c
··· 598 598 rcu_read_lock(); 599 599 for_each_netdev_rcu(&init_net, dev) { 600 600 if ((dev->flags & IFF_UP) && dev->type == ARPHRD_NETROM && 601 - ax25cmp(addr, (ax25_address *)dev->dev_addr) == 0) { 601 + ax25cmp(addr, (const ax25_address *)dev->dev_addr) == 0) { 602 602 dev_hold(dev); 603 603 goto out; 604 604 } ··· 825 825 826 826 ax25s = nr_neigh->ax25; 827 827 nr_neigh->ax25 = ax25_send_frame(skb, 256, 828 - (ax25_address *)dev->dev_addr, 828 + (const ax25_address *)dev->dev_addr, 829 829 &nr_neigh->callsign, 830 830 nr_neigh->digipeat, nr_neigh->dev); 831 831 if (ax25s)
+3 -2
net/rose/af_rose.c
··· 109 109 /* 110 110 * Compare two ROSE addresses, 0 == equal. 111 111 */ 112 - int rosecmp(rose_address *addr1, rose_address *addr2) 112 + int rosecmp(const rose_address *addr1, const rose_address *addr2) 113 113 { 114 114 int i; 115 115 ··· 123 123 /* 124 124 * Compare two ROSE addresses for only mask digits, 0 == equal. 125 125 */ 126 - int rosecmpm(rose_address *addr1, rose_address *addr2, unsigned short mask) 126 + int rosecmpm(const rose_address *addr1, const rose_address *addr2, 127 + unsigned short mask) 127 128 { 128 129 unsigned int i, j; 129 130
+3 -3
net/rose/rose_dev.c
··· 66 66 if (err) 67 67 return err; 68 68 69 - rose_del_loopback_node((rose_address *)dev->dev_addr); 69 + rose_del_loopback_node((const rose_address *)dev->dev_addr); 70 70 } 71 71 72 72 dev_addr_set(dev, sa->sa_data); ··· 78 78 { 79 79 int err; 80 80 81 - err = rose_add_loopback_node((rose_address *)dev->dev_addr); 81 + err = rose_add_loopback_node((const rose_address *)dev->dev_addr); 82 82 if (err) 83 83 return err; 84 84 ··· 90 90 static int rose_close(struct net_device *dev) 91 91 { 92 92 netif_stop_queue(dev); 93 - rose_del_loopback_node((rose_address *)dev->dev_addr); 93 + rose_del_loopback_node((const rose_address *)dev->dev_addr); 94 94 return 0; 95 95 } 96 96
+4 -4
net/rose/rose_link.c
··· 94 94 */ 95 95 static int rose_send_frame(struct sk_buff *skb, struct rose_neigh *neigh) 96 96 { 97 - ax25_address *rose_call; 97 + const ax25_address *rose_call; 98 98 ax25_cb *ax25s; 99 99 100 100 if (ax25cmp(&rose_callsign, &null_ax25_address) == 0) 101 - rose_call = (ax25_address *)neigh->dev->dev_addr; 101 + rose_call = (const ax25_address *)neigh->dev->dev_addr; 102 102 else 103 103 rose_call = &rose_callsign; 104 104 ··· 117 117 */ 118 118 static int rose_link_up(struct rose_neigh *neigh) 119 119 { 120 - ax25_address *rose_call; 120 + const ax25_address *rose_call; 121 121 ax25_cb *ax25s; 122 122 123 123 if (ax25cmp(&rose_callsign, &null_ax25_address) == 0) 124 - rose_call = (ax25_address *)neigh->dev->dev_addr; 124 + rose_call = (const ax25_address *)neigh->dev->dev_addr; 125 125 else 126 126 rose_call = &rose_callsign; 127 127
+6 -4
net/rose/rose_route.c
··· 401 401 /* 402 402 * Add a loopback node. 403 403 */ 404 - int rose_add_loopback_node(rose_address *address) 404 + int rose_add_loopback_node(const rose_address *address) 405 405 { 406 406 struct rose_node *rose_node; 407 407 int err = 0; ··· 446 446 /* 447 447 * Delete a loopback node. 448 448 */ 449 - void rose_del_loopback_node(rose_address *address) 449 + void rose_del_loopback_node(const rose_address *address) 450 450 { 451 451 struct rose_node *rose_node; 452 452 ··· 629 629 630 630 rcu_read_lock(); 631 631 for_each_netdev_rcu(&init_net, dev) { 632 - if ((dev->flags & IFF_UP) && dev->type == ARPHRD_ROSE && rosecmp(addr, (rose_address *)dev->dev_addr) == 0) { 632 + if ((dev->flags & IFF_UP) && dev->type == ARPHRD_ROSE && 633 + rosecmp(addr, (const rose_address *)dev->dev_addr) == 0) { 633 634 dev_hold(dev); 634 635 goto out; 635 636 } ··· 647 646 648 647 rcu_read_lock(); 649 648 for_each_netdev_rcu(&init_net, dev) { 650 - if ((dev->flags & IFF_UP) && dev->type == ARPHRD_ROSE && rosecmp(addr, (rose_address *)dev->dev_addr) == 0) 649 + if ((dev->flags & IFF_UP) && dev->type == ARPHRD_ROSE && 650 + rosecmp(addr, (const rose_address *)dev->dev_addr) == 0) 651 651 goto out; 652 652 } 653 653 dev = NULL;
+2 -2
net/tipc/bearer.c
··· 462 462 b->bcast_addr.media_id = b->media->type_id; 463 463 b->bcast_addr.broadcast = TIPC_BROADCAST_SUPPORT; 464 464 b->mtu = dev->mtu; 465 - b->media->raw2addr(b, &b->addr, (char *)dev->dev_addr); 465 + b->media->raw2addr(b, &b->addr, (const char *)dev->dev_addr); 466 466 rcu_assign_pointer(dev->tipc_ptr, b); 467 467 return 0; 468 468 } ··· 703 703 break; 704 704 case NETDEV_CHANGEADDR: 705 705 b->media->raw2addr(b, &b->addr, 706 - (char *)dev->dev_addr); 706 + (const char *)dev->dev_addr); 707 707 tipc_reset_bearer(net, b); 708 708 break; 709 709 case NETDEV_UNREGISTER:
+1 -1
net/tipc/bearer.h
··· 117 117 char *msg); 118 118 int (*raw2addr)(struct tipc_bearer *b, 119 119 struct tipc_media_addr *addr, 120 - char *raw); 120 + const char *raw); 121 121 u32 priority; 122 122 u32 tolerance; 123 123 u32 min_win;
+1 -1
net/tipc/eth_media.c
··· 60 60 /* Convert raw mac address format to media addr format */ 61 61 static int tipc_eth_raw2addr(struct tipc_bearer *b, 62 62 struct tipc_media_addr *addr, 63 - char *msg) 63 + const char *msg) 64 64 { 65 65 memset(addr, 0, sizeof(*addr)); 66 66 ether_addr_copy(addr->value, msg);
+1 -1
net/tipc/ib_media.c
··· 67 67 /* Convert raw InfiniBand address format to media addr format */ 68 68 static int tipc_ib_raw2addr(struct tipc_bearer *b, 69 69 struct tipc_media_addr *addr, 70 - char *msg) 70 + const char *msg) 71 71 { 72 72 memset(addr, 0, sizeof(*addr)); 73 73 memcpy(addr->value, msg, INFINIBAND_ALEN);