* [PATCH 0/7] net: Convert dev_set_mac_address() to struct sockaddr_storage
@ 2025-05-20 22:30 Kees Cook
2025-05-20 22:31 ` [PATCH 1/7] net: core: Convert inet_addr_is_any() to sockaddr_storage Kees Cook
` (7 more replies)
0 siblings, 8 replies; 21+ messages in thread
From: Kees Cook @ 2025-05-20 22:30 UTC (permalink / raw)
To: Kuniyuki Iwashima
Cc: Kees Cook, Christoph Hellwig, Sagi Grimberg, Chaitanya Kulkarni,
Martin K. Petersen, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Mike Christie, Max Gurtovoy, Maurizio Lombardi,
Dmitry Bogdanov, Mingzhe Zou, Christophe Leroy, Simon Horman,
Dr. David Alan Gilbert, Andrew Lunn, Stanislav Fomichev,
Cosmin Ratiu, Lei Yang, Ido Schimmel, Samuel Mendoza-Jonas,
Paul Fertser, Alexander Aring, Stefan Schmidt, Miquel Raynal,
Hayes Wang, Douglas Anderson, Grant Grundler, Jay Vosburgh,
K. Y. Srinivasan, Haiyang Zhang, Wei Liu, Dexuan Cui, Jiri Pirko,
Eric Biggers, Milan Broz, Philipp Hahn, Ard Biesheuvel, Al Viro,
Ahmed Zaki, Alexander Lobakin, Xiao Liang, linux-kernel,
linux-nvme, linux-scsi, target-devel, netdev, linux-wpan,
linux-usb, linux-hyperv, linux-hardening
Hi,
As part of the effort to allow the compiler to reason about object sizes,
we need to deal with the problematic variably sized struct sockaddr,
which has no internal runtime size tracking. In much of the network
stack the use of struct sockaddr_storage has been adopted. Continue the
transition toward this for more of the internal APIs. Specifically:
- inet_addr_is_any()
- netif_set_mac_address()
- dev_set_mac_address()
Only 3 callers of dev_set_mac_address() needed adjustment; all others
were already using struct sockaddr_storage internally.
-Kees
Kees Cook (7):
net: core: Convert inet_addr_is_any() to sockaddr_storage
net: core: Switch netif_set_mac_address() to struct sockaddr_storage
net/ncsi: Use struct sockaddr_storage for pending_mac
ieee802154: Use struct sockaddr_storage with dev_set_mac_address()
net: usb: r8152: Convert to use struct sockaddr_storage internally
net: core: Convert dev_set_mac_address() to struct sockaddr_storage
rtnetlink: do_setlink: Use struct sockaddr_storage
include/linux/inet.h | 2 +-
include/linux/netdevice.h | 4 +--
net/ncsi/internal.h | 2 +-
drivers/net/bonding/bond_alb.c | 8 ++---
drivers/net/bonding/bond_main.c | 10 +++---
drivers/net/hyperv/netvsc_drv.c | 6 ++--
drivers/net/macvlan.c | 10 +++---
drivers/net/team/team_core.c | 2 +-
drivers/net/usb/r8152.c | 52 +++++++++++++++--------------
drivers/nvme/target/rdma.c | 2 +-
drivers/nvme/target/tcp.c | 2 +-
drivers/target/iscsi/iscsi_target.c | 2 +-
net/core/dev.c | 11 +++---
net/core/dev_api.c | 6 ++--
net/core/rtnetlink.c | 19 +++--------
net/core/utils.c | 8 ++---
net/ieee802154/nl-phy.c | 6 ++--
net/ncsi/ncsi-rsp.c | 18 +++++-----
18 files changed, 79 insertions(+), 91 deletions(-)
--
2.34.1
^ permalink raw reply [flat|nested] 21+ messages in thread
* [PATCH 1/7] net: core: Convert inet_addr_is_any() to sockaddr_storage
2025-05-20 22:30 [PATCH 0/7] net: Convert dev_set_mac_address() to struct sockaddr_storage Kees Cook
@ 2025-05-20 22:31 ` Kees Cook
2025-05-21 0:04 ` Kuniyuki Iwashima
2025-05-21 1:26 ` Martin K. Petersen
2025-05-20 22:31 ` [PATCH 2/7] net: core: Switch netif_set_mac_address() to struct sockaddr_storage Kees Cook
` (6 subsequent siblings)
7 siblings, 2 replies; 21+ messages in thread
From: Kees Cook @ 2025-05-20 22:31 UTC (permalink / raw)
To: Kuniyuki Iwashima
Cc: Kees Cook, Gustavo A . R . Silva, Christoph Hellwig,
Sagi Grimberg, Chaitanya Kulkarni, Martin K. Petersen,
David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Mike Christie, Max Gurtovoy, Maurizio Lombardi, Dmitry Bogdanov,
Mingzhe Zou, Christophe Leroy, Simon Horman,
Dr. David Alan Gilbert, linux-nvme, linux-scsi, target-devel,
netdev, Andrew Lunn, Stanislav Fomichev, Cosmin Ratiu, Lei Yang,
Ido Schimmel, Samuel Mendoza-Jonas, Paul Fertser, Alexander Aring,
Stefan Schmidt, Miquel Raynal, Hayes Wang, Douglas Anderson,
Grant Grundler, Jay Vosburgh, K. Y. Srinivasan, Haiyang Zhang,
Wei Liu, Dexuan Cui, Jiri Pirko, Eric Biggers, Milan Broz,
Philipp Hahn, Ard Biesheuvel, Al Viro, Ahmed Zaki,
Alexander Lobakin, Xiao Liang, linux-kernel, linux-wpan,
linux-usb, linux-hyperv, linux-hardening
All the callers of inet_addr_is_any() have a sockaddr_storage-backed
sockaddr. Avoid casts and switch prototype to the actual object being
used.
Acked-by: Gustavo A. R. Silva <gustavoars@kernel.org>
Signed-off-by: Kees Cook <kees@kernel.org>
---
Cc: Christoph Hellwig <hch@lst.de>
Cc: Sagi Grimberg <sagi@grimberg.me>
Cc: Chaitanya Kulkarni <kch@nvidia.com>
Cc: "Martin K. Petersen" <martin.petersen@oracle.com>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Eric Dumazet <edumazet@google.com>
Cc: Jakub Kicinski <kuba@kernel.org>
Cc: Paolo Abeni <pabeni@redhat.com>
Cc: Mike Christie <michael.christie@oracle.com>
Cc: Max Gurtovoy <mgurtovoy@nvidia.com>
Cc: Maurizio Lombardi <mlombard@redhat.com>
Cc: Dmitry Bogdanov <d.bogdanov@yadro.com>
Cc: Mingzhe Zou <mingzhe.zou@easystack.cn>
Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
Cc: Simon Horman <horms@kernel.org>
Cc: "Dr. David Alan Gilbert" <linux@treblig.org>
Cc: linux-nvme@lists.infradead.org
Cc: linux-scsi@vger.kernel.org
Cc: target-devel@vger.kernel.org
Cc: netdev@vger.kernel.org
---
include/linux/inet.h | 2 +-
drivers/nvme/target/rdma.c | 2 +-
drivers/nvme/target/tcp.c | 2 +-
drivers/target/iscsi/iscsi_target.c | 2 +-
net/core/utils.c | 8 ++++----
5 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/include/linux/inet.h b/include/linux/inet.h
index bd8276e96e60..9158772f3559 100644
--- a/include/linux/inet.h
+++ b/include/linux/inet.h
@@ -55,6 +55,6 @@ extern int in6_pton(const char *src, int srclen, u8 *dst, int delim, const char
extern int inet_pton_with_scope(struct net *net, unsigned short af,
const char *src, const char *port, struct sockaddr_storage *addr);
-extern bool inet_addr_is_any(struct sockaddr *addr);
+bool inet_addr_is_any(struct sockaddr_storage *addr);
#endif /* _LINUX_INET_H */
diff --git a/drivers/nvme/target/rdma.c b/drivers/nvme/target/rdma.c
index 2a4536ef6184..79a5aad2e9d0 100644
--- a/drivers/nvme/target/rdma.c
+++ b/drivers/nvme/target/rdma.c
@@ -1999,7 +1999,7 @@ static void nvmet_rdma_disc_port_addr(struct nvmet_req *req,
struct nvmet_rdma_port *port = nport->priv;
struct rdma_cm_id *cm_id = port->cm_id;
- if (inet_addr_is_any((struct sockaddr *)&cm_id->route.addr.src_addr)) {
+ if (inet_addr_is_any(&cm_id->route.addr.src_addr)) {
struct nvmet_rdma_rsp *rsp =
container_of(req, struct nvmet_rdma_rsp, req);
struct rdma_cm_id *req_cm_id = rsp->queue->cm_id;
diff --git a/drivers/nvme/target/tcp.c b/drivers/nvme/target/tcp.c
index 12a5cb8641ca..5cd1cf74f8ff 100644
--- a/drivers/nvme/target/tcp.c
+++ b/drivers/nvme/target/tcp.c
@@ -2194,7 +2194,7 @@ static void nvmet_tcp_disc_port_addr(struct nvmet_req *req,
{
struct nvmet_tcp_port *port = nport->priv;
- if (inet_addr_is_any((struct sockaddr *)&port->addr)) {
+ if (inet_addr_is_any(&port->addr)) {
struct nvmet_tcp_cmd *cmd =
container_of(req, struct nvmet_tcp_cmd, req);
struct nvmet_tcp_queue *queue = cmd->queue;
diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c
index 620ba6e0ab07..a2dde08c8a62 100644
--- a/drivers/target/iscsi/iscsi_target.c
+++ b/drivers/target/iscsi/iscsi_target.c
@@ -3419,7 +3419,7 @@ iscsit_build_sendtargets_response(struct iscsit_cmd *cmd,
}
}
- if (inet_addr_is_any((struct sockaddr *)&np->np_sockaddr))
+ if (inet_addr_is_any(&np->np_sockaddr))
sockaddr = &conn->local_sockaddr;
else
sockaddr = &np->np_sockaddr;
diff --git a/net/core/utils.c b/net/core/utils.c
index 27f4cffaae05..e47feeaa5a49 100644
--- a/net/core/utils.c
+++ b/net/core/utils.c
@@ -399,9 +399,9 @@ int inet_pton_with_scope(struct net *net, __kernel_sa_family_t af,
}
EXPORT_SYMBOL(inet_pton_with_scope);
-bool inet_addr_is_any(struct sockaddr *addr)
+bool inet_addr_is_any(struct sockaddr_storage *addr)
{
- if (addr->sa_family == AF_INET6) {
+ if (addr->ss_family == AF_INET6) {
struct sockaddr_in6 *in6 = (struct sockaddr_in6 *)addr;
const struct sockaddr_in6 in6_any =
{ .sin6_addr = IN6ADDR_ANY_INIT };
@@ -409,13 +409,13 @@ bool inet_addr_is_any(struct sockaddr *addr)
if (!memcmp(in6->sin6_addr.s6_addr,
in6_any.sin6_addr.s6_addr, 16))
return true;
- } else if (addr->sa_family == AF_INET) {
+ } else if (addr->ss_family == AF_INET) {
struct sockaddr_in *in = (struct sockaddr_in *)addr;
if (in->sin_addr.s_addr == htonl(INADDR_ANY))
return true;
} else {
- pr_warn("unexpected address family %u\n", addr->sa_family);
+ pr_warn("unexpected address family %u\n", addr->ss_family);
}
return false;
--
2.34.1
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 2/7] net: core: Switch netif_set_mac_address() to struct sockaddr_storage
2025-05-20 22:30 [PATCH 0/7] net: Convert dev_set_mac_address() to struct sockaddr_storage Kees Cook
2025-05-20 22:31 ` [PATCH 1/7] net: core: Convert inet_addr_is_any() to sockaddr_storage Kees Cook
@ 2025-05-20 22:31 ` Kees Cook
2025-05-20 22:47 ` Gustavo A. R. Silva
2025-05-20 22:31 ` [PATCH 3/7] net/ncsi: Use struct sockaddr_storage for pending_mac Kees Cook
` (5 subsequent siblings)
7 siblings, 1 reply; 21+ messages in thread
From: Kees Cook @ 2025-05-20 22:31 UTC (permalink / raw)
To: Kuniyuki Iwashima
Cc: Kees Cook, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Simon Horman, Andrew Lunn, Stanislav Fomichev,
Cosmin Ratiu, Lei Yang, Ido Schimmel, netdev, Christoph Hellwig,
Sagi Grimberg, Chaitanya Kulkarni, Martin K. Petersen,
Mike Christie, Max Gurtovoy, Maurizio Lombardi, Dmitry Bogdanov,
Mingzhe Zou, Christophe Leroy, Dr. David Alan Gilbert,
Samuel Mendoza-Jonas, Paul Fertser, Alexander Aring,
Stefan Schmidt, Miquel Raynal, Hayes Wang, Douglas Anderson,
Grant Grundler, Jay Vosburgh, K. Y. Srinivasan, Haiyang Zhang,
Wei Liu, Dexuan Cui, Jiri Pirko, Eric Biggers, Milan Broz,
Philipp Hahn, Ard Biesheuvel, Al Viro, Ahmed Zaki,
Alexander Lobakin, Xiao Liang, linux-kernel, linux-nvme,
linux-scsi, target-devel, linux-wpan, linux-usb, linux-hyperv,
linux-hardening
In order to avoid passing around struct sockaddr that has a size the
compiler cannot reason about (nor track at runtime), convert
netif_set_mac_address() to take struct sockaddr_storage. This is just a
cast conversion, so there is are no binary changes. Following patches
will make actual allocation changes.
Signed-off-by: Kees Cook <kees@kernel.org>
---
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Eric Dumazet <edumazet@google.com>
Cc: Jakub Kicinski <kuba@kernel.org>
Cc: Paolo Abeni <pabeni@redhat.com>
Cc: Simon Horman <horms@kernel.org>
Cc: Andrew Lunn <andrew+netdev@lunn.ch>
Cc: Stanislav Fomichev <sdf@fomichev.me>
Cc: Cosmin Ratiu <cratiu@nvidia.com>
Cc: Lei Yang <leiyang@redhat.com>
Cc: Kuniyuki Iwashima <kuniyu@amazon.com>
Cc: Ido Schimmel <idosch@nvidia.com>
Cc: <netdev@vger.kernel.org>
---
include/linux/netdevice.h | 2 +-
net/core/dev.c | 10 +++++-----
net/core/dev_api.c | 4 ++--
net/core/rtnetlink.c | 2 +-
4 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index ea9d335de130..47200a394a02 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -4212,7 +4212,7 @@ int netif_set_mtu(struct net_device *dev, int new_mtu);
int dev_set_mtu(struct net_device *, int);
int dev_pre_changeaddr_notify(struct net_device *dev, const char *addr,
struct netlink_ext_ack *extack);
-int netif_set_mac_address(struct net_device *dev, struct sockaddr *sa,
+int netif_set_mac_address(struct net_device *dev, struct sockaddr_storage *ss,
struct netlink_ext_ack *extack);
int dev_set_mac_address(struct net_device *dev, struct sockaddr *sa,
struct netlink_ext_ack *extack);
diff --git a/net/core/dev.c b/net/core/dev.c
index fccf2167b235..f8c8aad7df2e 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -9655,7 +9655,7 @@ int dev_pre_changeaddr_notify(struct net_device *dev, const char *addr,
}
EXPORT_SYMBOL(dev_pre_changeaddr_notify);
-int netif_set_mac_address(struct net_device *dev, struct sockaddr *sa,
+int netif_set_mac_address(struct net_device *dev, struct sockaddr_storage *ss,
struct netlink_ext_ack *extack)
{
const struct net_device_ops *ops = dev->netdev_ops;
@@ -9663,15 +9663,15 @@ int netif_set_mac_address(struct net_device *dev, struct sockaddr *sa,
if (!ops->ndo_set_mac_address)
return -EOPNOTSUPP;
- if (sa->sa_family != dev->type)
+ if (ss->ss_family != dev->type)
return -EINVAL;
if (!netif_device_present(dev))
return -ENODEV;
- err = dev_pre_changeaddr_notify(dev, sa->sa_data, extack);
+ err = dev_pre_changeaddr_notify(dev, ss->__data, extack);
if (err)
return err;
- if (memcmp(dev->dev_addr, sa->sa_data, dev->addr_len)) {
- err = ops->ndo_set_mac_address(dev, sa);
+ if (memcmp(dev->dev_addr, ss->__data, dev->addr_len)) {
+ err = ops->ndo_set_mac_address(dev, ss);
if (err)
return err;
}
diff --git a/net/core/dev_api.c b/net/core/dev_api.c
index f9a160ab596f..b5f293e637d9 100644
--- a/net/core/dev_api.c
+++ b/net/core/dev_api.c
@@ -91,7 +91,7 @@ int dev_set_mac_address_user(struct net_device *dev, struct sockaddr *sa,
down_write(&dev_addr_sem);
netdev_lock_ops(dev);
- ret = netif_set_mac_address(dev, sa, extack);
+ ret = netif_set_mac_address(dev, (struct sockaddr_storage *)sa, extack);
netdev_unlock_ops(dev);
up_write(&dev_addr_sem);
@@ -332,7 +332,7 @@ int dev_set_mac_address(struct net_device *dev, struct sockaddr *sa,
int ret;
netdev_lock_ops(dev);
- ret = netif_set_mac_address(dev, sa, extack);
+ ret = netif_set_mac_address(dev, (struct sockaddr_storage *)sa, extack);
netdev_unlock_ops(dev);
return ret;
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index 8a914b37ef6e..9743f1c2ae3c 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -3100,7 +3100,7 @@ static int do_setlink(const struct sk_buff *skb, struct net_device *dev,
memcpy(sa->sa_data, nla_data(tb[IFLA_ADDRESS]),
dev->addr_len);
- err = netif_set_mac_address(dev, sa, extack);
+ err = netif_set_mac_address(dev, (struct sockaddr_storage *)sa, extack);
kfree(sa);
if (err) {
up_write(&dev_addr_sem);
--
2.34.1
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 3/7] net/ncsi: Use struct sockaddr_storage for pending_mac
2025-05-20 22:30 [PATCH 0/7] net: Convert dev_set_mac_address() to struct sockaddr_storage Kees Cook
2025-05-20 22:31 ` [PATCH 1/7] net: core: Convert inet_addr_is_any() to sockaddr_storage Kees Cook
2025-05-20 22:31 ` [PATCH 2/7] net: core: Switch netif_set_mac_address() to struct sockaddr_storage Kees Cook
@ 2025-05-20 22:31 ` Kees Cook
2025-05-20 22:48 ` Gustavo A. R. Silva
2025-05-20 22:31 ` [PATCH 4/7] ieee802154: Use struct sockaddr_storage with dev_set_mac_address() Kees Cook
` (4 subsequent siblings)
7 siblings, 1 reply; 21+ messages in thread
From: Kees Cook @ 2025-05-20 22:31 UTC (permalink / raw)
To: Kuniyuki Iwashima
Cc: Kees Cook, Samuel Mendoza-Jonas, Paul Fertser, David S. Miller,
Eric Dumazet, Jakub Kicinski, Paolo Abeni, Simon Horman, netdev,
Christoph Hellwig, Sagi Grimberg, Chaitanya Kulkarni,
Martin K. Petersen, Mike Christie, Max Gurtovoy,
Maurizio Lombardi, Dmitry Bogdanov, Mingzhe Zou, Christophe Leroy,
Dr. David Alan Gilbert, Andrew Lunn, Stanislav Fomichev,
Cosmin Ratiu, Lei Yang, Ido Schimmel, Alexander Aring,
Stefan Schmidt, Miquel Raynal, Hayes Wang, Douglas Anderson,
Grant Grundler, Jay Vosburgh, K. Y. Srinivasan, Haiyang Zhang,
Wei Liu, Dexuan Cui, Jiri Pirko, Eric Biggers, Milan Broz,
Philipp Hahn, Ard Biesheuvel, Al Viro, Ahmed Zaki,
Alexander Lobakin, Xiao Liang, linux-kernel, linux-nvme,
linux-scsi, target-devel, linux-wpan, linux-usb, linux-hyperv,
linux-hardening
To avoid future casting with coming API type changes, switch struct
ncsi_dev_priv::pending_mac to a full struct sockaddr_storage.
Signed-off-by: Kees Cook <kees@kernel.org>
---
Cc: Samuel Mendoza-Jonas <sam@mendozajonas.com>
Cc: Paul Fertser <fercerpav@gmail.com>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Eric Dumazet <edumazet@google.com>
Cc: Jakub Kicinski <kuba@kernel.org>
Cc: Paolo Abeni <pabeni@redhat.com>
Cc: Simon Horman <horms@kernel.org>
Cc: <netdev@vger.kernel.org>
---
net/ncsi/internal.h | 2 +-
net/ncsi/ncsi-manage.c | 2 +-
net/ncsi/ncsi-rsp.c | 18 +++++++++---------
3 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/net/ncsi/internal.h b/net/ncsi/internal.h
index 2c260f33b55c..e76c6de0c784 100644
--- a/net/ncsi/internal.h
+++ b/net/ncsi/internal.h
@@ -322,7 +322,7 @@ struct ncsi_dev_priv {
#define NCSI_DEV_RESHUFFLE 4
#define NCSI_DEV_RESET 8 /* Reset state of NC */
unsigned int gma_flag; /* OEM GMA flag */
- struct sockaddr pending_mac; /* MAC address received from GMA */
+ struct sockaddr_storage pending_mac; /* MAC address received from GMA */
spinlock_t lock; /* Protect the NCSI device */
unsigned int package_probe_id;/* Current ID during probe */
unsigned int package_num; /* Number of packages */
diff --git a/net/ncsi/ncsi-manage.c b/net/ncsi/ncsi-manage.c
index b36947063783..0202db2aea3e 100644
--- a/net/ncsi/ncsi-manage.c
+++ b/net/ncsi/ncsi-manage.c
@@ -1058,7 +1058,7 @@ static void ncsi_configure_channel(struct ncsi_dev_priv *ndp)
break;
case ncsi_dev_state_config_apply_mac:
rtnl_lock();
- ret = dev_set_mac_address(dev, &ndp->pending_mac, NULL);
+ ret = dev_set_mac_address(dev, (struct sockaddr *)&ndp->pending_mac, NULL);
rtnl_unlock();
if (ret < 0)
netdev_warn(dev, "NCSI: 'Writing MAC address to device failed\n");
diff --git a/net/ncsi/ncsi-rsp.c b/net/ncsi/ncsi-rsp.c
index 8668888c5a2f..472cc68ad86f 100644
--- a/net/ncsi/ncsi-rsp.c
+++ b/net/ncsi/ncsi-rsp.c
@@ -628,7 +628,7 @@ static int ncsi_rsp_handler_snfc(struct ncsi_request *nr)
static int ncsi_rsp_handler_oem_gma(struct ncsi_request *nr, int mfr_id)
{
struct ncsi_dev_priv *ndp = nr->ndp;
- struct sockaddr *saddr = &ndp->pending_mac;
+ struct sockaddr_storage *saddr = &ndp->pending_mac;
struct net_device *ndev = ndp->ndev.dev;
struct ncsi_rsp_oem_pkt *rsp;
u32 mac_addr_off = 0;
@@ -644,11 +644,11 @@ static int ncsi_rsp_handler_oem_gma(struct ncsi_request *nr, int mfr_id)
else if (mfr_id == NCSI_OEM_MFR_INTEL_ID)
mac_addr_off = INTEL_MAC_ADDR_OFFSET;
- saddr->sa_family = ndev->type;
- memcpy(saddr->sa_data, &rsp->data[mac_addr_off], ETH_ALEN);
+ saddr->ss_family = ndev->type;
+ memcpy(saddr->__data, &rsp->data[mac_addr_off], ETH_ALEN);
if (mfr_id == NCSI_OEM_MFR_BCM_ID || mfr_id == NCSI_OEM_MFR_INTEL_ID)
- eth_addr_inc((u8 *)saddr->sa_data);
- if (!is_valid_ether_addr((const u8 *)saddr->sa_data))
+ eth_addr_inc(saddr->__data);
+ if (!is_valid_ether_addr(saddr->__data))
return -ENXIO;
/* Set the flag for GMA command which should only be called once */
@@ -1088,7 +1088,7 @@ static int ncsi_rsp_handler_netlink(struct ncsi_request *nr)
static int ncsi_rsp_handler_gmcma(struct ncsi_request *nr)
{
struct ncsi_dev_priv *ndp = nr->ndp;
- struct sockaddr *saddr = &ndp->pending_mac;
+ struct sockaddr_storage *saddr = &ndp->pending_mac;
struct net_device *ndev = ndp->ndev.dev;
struct ncsi_rsp_gmcma_pkt *rsp;
int i;
@@ -1105,15 +1105,15 @@ static int ncsi_rsp_handler_gmcma(struct ncsi_request *nr)
rsp->addresses[i][4], rsp->addresses[i][5]);
}
- saddr->sa_family = ndev->type;
+ saddr->ss_family = ndev->type;
for (i = 0; i < rsp->address_count; i++) {
if (!is_valid_ether_addr(rsp->addresses[i])) {
netdev_warn(ndev, "NCSI: Unable to assign %pM to device\n",
rsp->addresses[i]);
continue;
}
- memcpy(saddr->sa_data, rsp->addresses[i], ETH_ALEN);
- netdev_warn(ndev, "NCSI: Will set MAC address to %pM\n", saddr->sa_data);
+ memcpy(saddr->__data, rsp->addresses[i], ETH_ALEN);
+ netdev_warn(ndev, "NCSI: Will set MAC address to %pM\n", saddr->__data);
break;
}
--
2.34.1
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 4/7] ieee802154: Use struct sockaddr_storage with dev_set_mac_address()
2025-05-20 22:30 [PATCH 0/7] net: Convert dev_set_mac_address() to struct sockaddr_storage Kees Cook
` (2 preceding siblings ...)
2025-05-20 22:31 ` [PATCH 3/7] net/ncsi: Use struct sockaddr_storage for pending_mac Kees Cook
@ 2025-05-20 22:31 ` Kees Cook
2025-05-20 22:49 ` Gustavo A. R. Silva
2025-05-20 22:31 ` [PATCH 5/7] net: usb: r8152: Convert to use struct sockaddr_storage internally Kees Cook
` (3 subsequent siblings)
7 siblings, 1 reply; 21+ messages in thread
From: Kees Cook @ 2025-05-20 22:31 UTC (permalink / raw)
To: Kuniyuki Iwashima
Cc: Kees Cook, Alexander Aring, Stefan Schmidt, Miquel Raynal,
David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Simon Horman, linux-wpan, netdev, Christoph Hellwig,
Sagi Grimberg, Chaitanya Kulkarni, Martin K. Petersen,
Mike Christie, Max Gurtovoy, Maurizio Lombardi, Dmitry Bogdanov,
Mingzhe Zou, Christophe Leroy, Dr. David Alan Gilbert,
Andrew Lunn, Stanislav Fomichev, Cosmin Ratiu, Lei Yang,
Ido Schimmel, Samuel Mendoza-Jonas, Paul Fertser, Hayes Wang,
Douglas Anderson, Grant Grundler, Jay Vosburgh, K. Y. Srinivasan,
Haiyang Zhang, Wei Liu, Dexuan Cui, Jiri Pirko, Eric Biggers,
Milan Broz, Philipp Hahn, Ard Biesheuvel, Al Viro, Ahmed Zaki,
Alexander Lobakin, Xiao Liang, linux-kernel, linux-nvme,
linux-scsi, target-devel, linux-usb, linux-hyperv,
linux-hardening
Switch to struct sockaddr_storage for calling dev_set_mac_address(). Add
a temporary cast to struct sockaddr, which will be removed in a
subsequent patch.
Signed-off-by: Kees Cook <kees@kernel.org>
---
Cc: Alexander Aring <alex.aring@gmail.com>
Cc: Stefan Schmidt <stefan@datenfreihafen.org>
Cc: Miquel Raynal <miquel.raynal@bootlin.com>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Eric Dumazet <edumazet@google.com>
Cc: Jakub Kicinski <kuba@kernel.org>
Cc: Paolo Abeni <pabeni@redhat.com>
Cc: Simon Horman <horms@kernel.org>
Cc: <linux-wpan@vger.kernel.org>
Cc: <netdev@vger.kernel.org>
---
net/ieee802154/nl-phy.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/net/ieee802154/nl-phy.c b/net/ieee802154/nl-phy.c
index 359249ab77bf..ee2b190e8e0d 100644
--- a/net/ieee802154/nl-phy.c
+++ b/net/ieee802154/nl-phy.c
@@ -224,17 +224,17 @@ int ieee802154_add_iface(struct sk_buff *skb, struct genl_info *info)
dev_hold(dev);
if (info->attrs[IEEE802154_ATTR_HW_ADDR]) {
- struct sockaddr addr;
+ struct sockaddr_storage addr;
- addr.sa_family = ARPHRD_IEEE802154;
- nla_memcpy(&addr.sa_data, info->attrs[IEEE802154_ATTR_HW_ADDR],
+ addr.ss_family = ARPHRD_IEEE802154;
+ nla_memcpy(&addr.__data, info->attrs[IEEE802154_ATTR_HW_ADDR],
IEEE802154_ADDR_LEN);
/* strangely enough, some callbacks (inetdev_event) from
* dev_set_mac_address require RTNL_LOCK
*/
rtnl_lock();
- rc = dev_set_mac_address(dev, &addr, NULL);
+ rc = dev_set_mac_address(dev, (struct sockaddr *)&addr, NULL);
rtnl_unlock();
if (rc)
goto dev_unregister;
--
2.34.1
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 5/7] net: usb: r8152: Convert to use struct sockaddr_storage internally
2025-05-20 22:30 [PATCH 0/7] net: Convert dev_set_mac_address() to struct sockaddr_storage Kees Cook
` (3 preceding siblings ...)
2025-05-20 22:31 ` [PATCH 4/7] ieee802154: Use struct sockaddr_storage with dev_set_mac_address() Kees Cook
@ 2025-05-20 22:31 ` Kees Cook
2025-05-20 22:49 ` Gustavo A. R. Silva
2025-05-20 22:31 ` [PATCH 6/7] net: core: Convert dev_set_mac_address() to struct sockaddr_storage Kees Cook
` (2 subsequent siblings)
7 siblings, 1 reply; 21+ messages in thread
From: Kees Cook @ 2025-05-20 22:31 UTC (permalink / raw)
To: Kuniyuki Iwashima
Cc: Kees Cook, Andrew Lunn, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Hayes Wang, Douglas Anderson,
Grant Grundler, linux-usb, netdev, Christoph Hellwig,
Sagi Grimberg, Chaitanya Kulkarni, Martin K. Petersen,
Mike Christie, Max Gurtovoy, Maurizio Lombardi, Dmitry Bogdanov,
Mingzhe Zou, Christophe Leroy, Simon Horman,
Dr. David Alan Gilbert, Stanislav Fomichev, Cosmin Ratiu,
Lei Yang, Ido Schimmel, Samuel Mendoza-Jonas, Paul Fertser,
Alexander Aring, Stefan Schmidt, Miquel Raynal, Jay Vosburgh,
K. Y. Srinivasan, Haiyang Zhang, Wei Liu, Dexuan Cui, Jiri Pirko,
Eric Biggers, Milan Broz, Philipp Hahn, Ard Biesheuvel, Al Viro,
Ahmed Zaki, Alexander Lobakin, Xiao Liang, linux-kernel,
linux-nvme, linux-scsi, target-devel, linux-wpan, linux-hyperv,
linux-hardening
To support coming API type changes, switch to sockaddr_storage usage
internally.
Signed-off-by: Kees Cook <kees@kernel.org>
---
Cc: Andrew Lunn <andrew+netdev@lunn.ch>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Eric Dumazet <edumazet@google.com>
Cc: Jakub Kicinski <kuba@kernel.org>
Cc: Paolo Abeni <pabeni@redhat.com>
Cc: Hayes Wang <hayeswang@realtek.com>
Cc: Douglas Anderson <dianders@chromium.org>
Cc: Grant Grundler <grundler@chromium.org>
Cc: <linux-usb@vger.kernel.org>
Cc: <netdev@vger.kernel.org>
---
drivers/net/usb/r8152.c | 52 +++++++++++++++++++++--------------------
1 file changed, 27 insertions(+), 25 deletions(-)
diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c
index 67f5d30ffcba..b18dee1b1bb3 100644
--- a/drivers/net/usb/r8152.c
+++ b/drivers/net/usb/r8152.c
@@ -1665,14 +1665,14 @@ static int
rtl8152_set_speed(struct r8152 *tp, u8 autoneg, u32 speed, u8 duplex,
u32 advertising);
-static int __rtl8152_set_mac_address(struct net_device *netdev, void *p,
+static int __rtl8152_set_mac_address(struct net_device *netdev,
+ struct sockaddr_storage *addr,
bool in_resume)
{
struct r8152 *tp = netdev_priv(netdev);
- struct sockaddr *addr = p;
int ret = -EADDRNOTAVAIL;
- if (!is_valid_ether_addr(addr->sa_data))
+ if (!is_valid_ether_addr(addr->__data))
goto out1;
if (!in_resume) {
@@ -1683,10 +1683,10 @@ static int __rtl8152_set_mac_address(struct net_device *netdev, void *p,
mutex_lock(&tp->control);
- eth_hw_addr_set(netdev, addr->sa_data);
+ eth_hw_addr_set(netdev, addr->__data);
ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG);
- pla_ocp_write(tp, PLA_IDR, BYTE_EN_SIX_BYTES, 8, addr->sa_data);
+ pla_ocp_write(tp, PLA_IDR, BYTE_EN_SIX_BYTES, 8, addr->__data);
ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML);
mutex_unlock(&tp->control);
@@ -1706,7 +1706,8 @@ static int rtl8152_set_mac_address(struct net_device *netdev, void *p)
* host system provided MAC address.
* Examples of this are Dell TB15 and Dell WD15 docks
*/
-static int vendor_mac_passthru_addr_read(struct r8152 *tp, struct sockaddr *sa)
+static int vendor_mac_passthru_addr_read(struct r8152 *tp,
+ struct sockaddr_storage *ss)
{
acpi_status status;
struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
@@ -1774,47 +1775,48 @@ static int vendor_mac_passthru_addr_read(struct r8152 *tp, struct sockaddr *sa)
ret = -EINVAL;
goto amacout;
}
- memcpy(sa->sa_data, buf, 6);
+ memcpy(ss->__data, buf, 6);
tp->netdev->addr_assign_type = NET_ADDR_STOLEN;
netif_info(tp, probe, tp->netdev,
- "Using pass-thru MAC addr %pM\n", sa->sa_data);
+ "Using pass-thru MAC addr %pM\n", ss->__data);
amacout:
kfree(obj);
return ret;
}
-static int determine_ethernet_addr(struct r8152 *tp, struct sockaddr *sa)
+static int determine_ethernet_addr(struct r8152 *tp,
+ struct sockaddr_storage *ss)
{
struct net_device *dev = tp->netdev;
int ret;
- sa->sa_family = dev->type;
+ ss->ss_family = dev->type;
- ret = eth_platform_get_mac_address(&tp->udev->dev, sa->sa_data);
+ ret = eth_platform_get_mac_address(&tp->udev->dev, ss->__data);
if (ret < 0) {
if (tp->version == RTL_VER_01) {
- ret = pla_ocp_read(tp, PLA_IDR, 8, sa->sa_data);
+ ret = pla_ocp_read(tp, PLA_IDR, 8, ss->__data);
} else {
/* if device doesn't support MAC pass through this will
* be expected to be non-zero
*/
- ret = vendor_mac_passthru_addr_read(tp, sa);
+ ret = vendor_mac_passthru_addr_read(tp, ss);
if (ret < 0)
ret = pla_ocp_read(tp, PLA_BACKUP, 8,
- sa->sa_data);
+ ss->__data);
}
}
if (ret < 0) {
netif_err(tp, probe, dev, "Get ether addr fail\n");
- } else if (!is_valid_ether_addr(sa->sa_data)) {
+ } else if (!is_valid_ether_addr(ss->__data)) {
netif_err(tp, probe, dev, "Invalid ether addr %pM\n",
- sa->sa_data);
+ ss->__data);
eth_hw_addr_random(dev);
- ether_addr_copy(sa->sa_data, dev->dev_addr);
+ ether_addr_copy(ss->__data, dev->dev_addr);
netif_info(tp, probe, dev, "Random ether addr %pM\n",
- sa->sa_data);
+ ss->__data);
return 0;
}
@@ -1824,17 +1826,17 @@ static int determine_ethernet_addr(struct r8152 *tp, struct sockaddr *sa)
static int set_ethernet_addr(struct r8152 *tp, bool in_resume)
{
struct net_device *dev = tp->netdev;
- struct sockaddr sa;
+ struct sockaddr_storage ss;
int ret;
- ret = determine_ethernet_addr(tp, &sa);
+ ret = determine_ethernet_addr(tp, &ss);
if (ret < 0)
return ret;
if (tp->version == RTL_VER_01)
- eth_hw_addr_set(dev, sa.sa_data);
+ eth_hw_addr_set(dev, ss.__data);
else
- ret = __rtl8152_set_mac_address(dev, &sa, in_resume);
+ ret = __rtl8152_set_mac_address(dev, &ss, in_resume);
return ret;
}
@@ -8421,7 +8423,7 @@ static int rtl8152_post_reset(struct usb_interface *intf)
{
struct r8152 *tp = usb_get_intfdata(intf);
struct net_device *netdev;
- struct sockaddr sa;
+ struct sockaddr_storage ss;
if (!tp || !test_bit(PROBED_WITH_NO_ERRORS, &tp->flags))
goto exit;
@@ -8429,8 +8431,8 @@ static int rtl8152_post_reset(struct usb_interface *intf)
rtl_set_accessible(tp);
/* reset the MAC address in case of policy change */
- if (determine_ethernet_addr(tp, &sa) >= 0)
- dev_set_mac_address (tp->netdev, &sa, NULL);
+ if (determine_ethernet_addr(tp, &ss) >= 0)
+ dev_set_mac_address(tp->netdev, (struct sockaddr *)&ss, NULL);
netdev = tp->netdev;
if (!netif_running(netdev))
--
2.34.1
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 6/7] net: core: Convert dev_set_mac_address() to struct sockaddr_storage
2025-05-20 22:30 [PATCH 0/7] net: Convert dev_set_mac_address() to struct sockaddr_storage Kees Cook
` (4 preceding siblings ...)
2025-05-20 22:31 ` [PATCH 5/7] net: usb: r8152: Convert to use struct sockaddr_storage internally Kees Cook
@ 2025-05-20 22:31 ` Kees Cook
2025-05-20 22:50 ` Gustavo A. R. Silva
2025-05-21 13:42 ` kernel test robot
2025-05-20 22:31 ` [PATCH 7/7] rtnetlink: do_setlink: Use " Kees Cook
2025-05-21 0:19 ` [PATCH 0/7] net: Convert dev_set_mac_address() to " Kuniyuki Iwashima
7 siblings, 2 replies; 21+ messages in thread
From: Kees Cook @ 2025-05-20 22:31 UTC (permalink / raw)
To: Kuniyuki Iwashima
Cc: Kees Cook, Jakub Kicinski, Jay Vosburgh, Andrew Lunn,
David S. Miller, Eric Dumazet, Paolo Abeni, K. Y. Srinivasan,
Haiyang Zhang, Wei Liu, Dexuan Cui, Jiri Pirko, Simon Horman,
Alexander Aring, Stefan Schmidt, Miquel Raynal,
Samuel Mendoza-Jonas, Paul Fertser, Hayes Wang, Douglas Anderson,
Grant Grundler, Stanislav Fomichev, Cosmin Ratiu, Lei Yang,
netdev, linux-hyperv, linux-usb, linux-wpan, Christoph Hellwig,
Sagi Grimberg, Chaitanya Kulkarni, Martin K. Petersen,
Mike Christie, Max Gurtovoy, Maurizio Lombardi, Dmitry Bogdanov,
Mingzhe Zou, Christophe Leroy, Dr. David Alan Gilbert,
Ido Schimmel, Eric Biggers, Milan Broz, Philipp Hahn,
Ard Biesheuvel, Al Viro, Ahmed Zaki, Alexander Lobakin,
Xiao Liang, linux-kernel, linux-nvme, linux-scsi, target-devel,
linux-hardening
All users of dev_set_mac_address() are now using a struct sockaddr_storage.
Convert the internal data type to struct sockaddr_storage, drop the casts,
and update pointer types.
Signed-off-by: Kees Cook <kees@kernel.org>
---
Cc: Jakub Kicinski <kuba@kernel.org>
Cc: Jay Vosburgh <jv@jvosburgh.net>
Cc: Andrew Lunn <andrew+netdev@lunn.ch>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Eric Dumazet <edumazet@google.com>
Cc: Paolo Abeni <pabeni@redhat.com>
Cc: "K. Y. Srinivasan" <kys@microsoft.com>
Cc: Haiyang Zhang <haiyangz@microsoft.com>
Cc: Wei Liu <wei.liu@kernel.org>
Cc: Dexuan Cui <decui@microsoft.com>
Cc: Jiri Pirko <jiri@resnulli.us>
Cc: Simon Horman <horms@kernel.org>
Cc: Alexander Aring <alex.aring@gmail.com>
Cc: Stefan Schmidt <stefan@datenfreihafen.org>
Cc: Miquel Raynal <miquel.raynal@bootlin.com>
Cc: Samuel Mendoza-Jonas <sam@mendozajonas.com>
Cc: Paul Fertser <fercerpav@gmail.com>
Cc: Hayes Wang <hayeswang@realtek.com>
Cc: Douglas Anderson <dianders@chromium.org>
Cc: Grant Grundler <grundler@chromium.org>
Cc: Stanislav Fomichev <sdf@fomichev.me>
Cc: Cosmin Ratiu <cratiu@nvidia.com>
Cc: Lei Yang <leiyang@redhat.com>
Cc: <netdev@vger.kernel.org>
Cc: <linux-hyperv@vger.kernel.org>
Cc: <linux-usb@vger.kernel.org>
Cc: <linux-wpan@vger.kernel.org>
---
include/linux/netdevice.h | 2 +-
drivers/net/bonding/bond_alb.c | 8 +++-----
drivers/net/bonding/bond_main.c | 10 ++++------
drivers/net/hyperv/netvsc_drv.c | 6 +++---
drivers/net/macvlan.c | 10 +++++-----
drivers/net/team/team_core.c | 2 +-
drivers/net/usb/r8152.c | 2 +-
net/core/dev.c | 1 +
net/core/dev_api.c | 6 +++---
net/ieee802154/nl-phy.c | 2 +-
net/ncsi/ncsi-manage.c | 2 +-
11 files changed, 24 insertions(+), 27 deletions(-)
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 47200a394a02..b4242b997373 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -4214,7 +4214,7 @@ int dev_pre_changeaddr_notify(struct net_device *dev, const char *addr,
struct netlink_ext_ack *extack);
int netif_set_mac_address(struct net_device *dev, struct sockaddr_storage *ss,
struct netlink_ext_ack *extack);
-int dev_set_mac_address(struct net_device *dev, struct sockaddr *sa,
+int dev_set_mac_address(struct net_device *dev, struct sockaddr_storage *ss,
struct netlink_ext_ack *extack);
int dev_set_mac_address_user(struct net_device *dev, struct sockaddr *sa,
struct netlink_ext_ack *extack);
diff --git a/drivers/net/bonding/bond_alb.c b/drivers/net/bonding/bond_alb.c
index 7edf0fd58c34..2d37b07c8215 100644
--- a/drivers/net/bonding/bond_alb.c
+++ b/drivers/net/bonding/bond_alb.c
@@ -1035,7 +1035,7 @@ static int alb_set_slave_mac_addr(struct slave *slave, const u8 addr[],
*/
memcpy(ss.__data, addr, len);
ss.ss_family = dev->type;
- if (dev_set_mac_address(dev, (struct sockaddr *)&ss, NULL)) {
+ if (dev_set_mac_address(dev, &ss, NULL)) {
slave_err(slave->bond->dev, dev, "dev_set_mac_address on slave failed! ALB mode requires that the base driver support setting the hw address also when the network device's interface is open\n");
return -EOPNOTSUPP;
}
@@ -1273,8 +1273,7 @@ static int alb_set_mac_address(struct bonding *bond, void *addr)
break;
bond_hw_addr_copy(tmp_addr, rollback_slave->dev->dev_addr,
rollback_slave->dev->addr_len);
- dev_set_mac_address(rollback_slave->dev,
- (struct sockaddr *)&ss, NULL);
+ dev_set_mac_address(rollback_slave->dev, &ss, NULL);
dev_addr_set(rollback_slave->dev, tmp_addr);
}
@@ -1763,8 +1762,7 @@ void bond_alb_handle_active_change(struct bonding *bond, struct slave *new_slave
bond->dev->addr_len);
ss.ss_family = bond->dev->type;
/* we don't care if it can't change its mac, best effort */
- dev_set_mac_address(new_slave->dev, (struct sockaddr *)&ss,
- NULL);
+ dev_set_mac_address(new_slave->dev, &ss, NULL);
dev_addr_set(new_slave->dev, tmp_addr);
}
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index 98cf4486fcee..b92e8935d686 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -1112,8 +1112,7 @@ static void bond_do_fail_over_mac(struct bonding *bond,
ss.ss_family = bond->dev->type;
}
- rv = dev_set_mac_address(new_active->dev,
- (struct sockaddr *)&ss, NULL);
+ rv = dev_set_mac_address(new_active->dev, &ss, NULL);
if (rv) {
slave_err(bond->dev, new_active->dev, "Error %d setting MAC of new active slave\n",
-rv);
@@ -1127,8 +1126,7 @@ static void bond_do_fail_over_mac(struct bonding *bond,
new_active->dev->addr_len);
ss.ss_family = old_active->dev->type;
- rv = dev_set_mac_address(old_active->dev,
- (struct sockaddr *)&ss, NULL);
+ rv = dev_set_mac_address(old_active->dev, &ss, NULL);
if (rv)
slave_err(bond->dev, old_active->dev, "Error %d setting MAC of old active slave\n",
-rv);
@@ -2455,7 +2453,7 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev,
bond_hw_addr_copy(ss.__data, new_slave->perm_hwaddr,
new_slave->dev->addr_len);
ss.ss_family = slave_dev->type;
- dev_set_mac_address(slave_dev, (struct sockaddr *)&ss, NULL);
+ dev_set_mac_address(slave_dev, &ss, NULL);
}
err_restore_mtu:
@@ -2649,7 +2647,7 @@ static int __bond_release_one(struct net_device *bond_dev,
bond_hw_addr_copy(ss.__data, slave->perm_hwaddr,
slave->dev->addr_len);
ss.ss_family = slave_dev->type;
- dev_set_mac_address(slave_dev, (struct sockaddr *)&ss, NULL);
+ dev_set_mac_address(slave_dev, &ss, NULL);
}
if (unregister) {
diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
index d8b169ac0343..14a0d04e21ae 100644
--- a/drivers/net/hyperv/netvsc_drv.c
+++ b/drivers/net/hyperv/netvsc_drv.c
@@ -1371,7 +1371,7 @@ static int netvsc_set_mac_addr(struct net_device *ndev, void *p)
struct net_device_context *ndc = netdev_priv(ndev);
struct net_device *vf_netdev = rtnl_dereference(ndc->vf_netdev);
struct netvsc_device *nvdev = rtnl_dereference(ndc->nvdev);
- struct sockaddr *addr = p;
+ struct sockaddr_storage *addr = p;
int err;
err = eth_prepare_mac_addr_change(ndev, p);
@@ -1387,12 +1387,12 @@ static int netvsc_set_mac_addr(struct net_device *ndev, void *p)
return err;
}
- err = rndis_filter_set_device_mac(nvdev, addr->sa_data);
+ err = rndis_filter_set_device_mac(nvdev, addr->__data);
if (!err) {
eth_commit_mac_addr_change(ndev, p);
} else if (vf_netdev) {
/* rollback change on VF */
- memcpy(addr->sa_data, ndev->dev_addr, ETH_ALEN);
+ memcpy(addr->__data, ndev->dev_addr, ETH_ALEN);
dev_set_mac_address(vf_netdev, addr, NULL);
}
diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c
index 7045b1d58754..69e879780c36 100644
--- a/drivers/net/macvlan.c
+++ b/drivers/net/macvlan.c
@@ -754,13 +754,13 @@ static int macvlan_sync_address(struct net_device *dev,
static int macvlan_set_mac_address(struct net_device *dev, void *p)
{
struct macvlan_dev *vlan = netdev_priv(dev);
- struct sockaddr *addr = p;
+ struct sockaddr_storage *addr = p;
- if (!is_valid_ether_addr(addr->sa_data))
+ if (!is_valid_ether_addr(addr->__data))
return -EADDRNOTAVAIL;
/* If the addresses are the same, this is a no-op */
- if (ether_addr_equal(dev->dev_addr, addr->sa_data))
+ if (ether_addr_equal(dev->dev_addr, addr->__data))
return 0;
if (vlan->mode == MACVLAN_MODE_PASSTHRU) {
@@ -768,10 +768,10 @@ static int macvlan_set_mac_address(struct net_device *dev, void *p)
return dev_set_mac_address(vlan->lowerdev, addr, NULL);
}
- if (macvlan_addr_busy(vlan->port, addr->sa_data))
+ if (macvlan_addr_busy(vlan->port, addr->__data))
return -EADDRINUSE;
- return macvlan_sync_address(dev, addr->sa_data);
+ return macvlan_sync_address(dev, addr->__data);
}
static void macvlan_change_rx_flags(struct net_device *dev, int change)
diff --git a/drivers/net/team/team_core.c b/drivers/net/team/team_core.c
index d8fc0c79745d..a64e661c21a1 100644
--- a/drivers/net/team/team_core.c
+++ b/drivers/net/team/team_core.c
@@ -55,7 +55,7 @@ static int __set_port_dev_addr(struct net_device *port_dev,
memcpy(addr.__data, dev_addr, port_dev->addr_len);
addr.ss_family = port_dev->type;
- return dev_set_mac_address(port_dev, (struct sockaddr *)&addr, NULL);
+ return dev_set_mac_address(port_dev, &addr, NULL);
}
static int team_port_set_orig_dev_addr(struct team_port *port)
diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c
index b18dee1b1bb3..d6589b24c68d 100644
--- a/drivers/net/usb/r8152.c
+++ b/drivers/net/usb/r8152.c
@@ -8432,7 +8432,7 @@ static int rtl8152_post_reset(struct usb_interface *intf)
/* reset the MAC address in case of policy change */
if (determine_ethernet_addr(tp, &ss) >= 0)
- dev_set_mac_address(tp->netdev, (struct sockaddr *)&ss, NULL);
+ dev_set_mac_address(tp->netdev, &ss, NULL);
netdev = tp->netdev;
if (!netif_running(netdev))
diff --git a/net/core/dev.c b/net/core/dev.c
index f8c8aad7df2e..1f1900ec26b2 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -9683,6 +9683,7 @@ int netif_set_mac_address(struct net_device *dev, struct sockaddr_storage *ss,
DECLARE_RWSEM(dev_addr_sem);
+/* "sa" is a true struct sockaddr with limited "sa_data" member. */
int dev_get_mac_address(struct sockaddr *sa, struct net *net, char *dev_name)
{
size_t size = sizeof(sa->sa_data_min);
diff --git a/net/core/dev_api.c b/net/core/dev_api.c
index b5f293e637d9..e80404e76ca9 100644
--- a/net/core/dev_api.c
+++ b/net/core/dev_api.c
@@ -319,20 +319,20 @@ EXPORT_SYMBOL(dev_set_allmulti);
/**
* dev_set_mac_address() - change Media Access Control Address
* @dev: device
- * @sa: new address
+ * @ss: new address
* @extack: netlink extended ack
*
* Change the hardware (MAC) address of the device
*
* Return: 0 on success, -errno on failure.
*/
-int dev_set_mac_address(struct net_device *dev, struct sockaddr *sa,
+int dev_set_mac_address(struct net_device *dev, struct sockaddr_storage *ss,
struct netlink_ext_ack *extack)
{
int ret;
netdev_lock_ops(dev);
- ret = netif_set_mac_address(dev, (struct sockaddr_storage *)sa, extack);
+ ret = netif_set_mac_address(dev, sa, extack);
netdev_unlock_ops(dev);
return ret;
diff --git a/net/ieee802154/nl-phy.c b/net/ieee802154/nl-phy.c
index ee2b190e8e0d..4c07a475c567 100644
--- a/net/ieee802154/nl-phy.c
+++ b/net/ieee802154/nl-phy.c
@@ -234,7 +234,7 @@ int ieee802154_add_iface(struct sk_buff *skb, struct genl_info *info)
* dev_set_mac_address require RTNL_LOCK
*/
rtnl_lock();
- rc = dev_set_mac_address(dev, (struct sockaddr *)&addr, NULL);
+ rc = dev_set_mac_address(dev, &addr, NULL);
rtnl_unlock();
if (rc)
goto dev_unregister;
diff --git a/net/ncsi/ncsi-manage.c b/net/ncsi/ncsi-manage.c
index 0202db2aea3e..b36947063783 100644
--- a/net/ncsi/ncsi-manage.c
+++ b/net/ncsi/ncsi-manage.c
@@ -1058,7 +1058,7 @@ static void ncsi_configure_channel(struct ncsi_dev_priv *ndp)
break;
case ncsi_dev_state_config_apply_mac:
rtnl_lock();
- ret = dev_set_mac_address(dev, (struct sockaddr *)&ndp->pending_mac, NULL);
+ ret = dev_set_mac_address(dev, &ndp->pending_mac, NULL);
rtnl_unlock();
if (ret < 0)
netdev_warn(dev, "NCSI: 'Writing MAC address to device failed\n");
--
2.34.1
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 7/7] rtnetlink: do_setlink: Use struct sockaddr_storage
2025-05-20 22:30 [PATCH 0/7] net: Convert dev_set_mac_address() to struct sockaddr_storage Kees Cook
` (5 preceding siblings ...)
2025-05-20 22:31 ` [PATCH 6/7] net: core: Convert dev_set_mac_address() to struct sockaddr_storage Kees Cook
@ 2025-05-20 22:31 ` Kees Cook
2025-05-20 22:50 ` Gustavo A. R. Silva
2025-05-21 0:19 ` [PATCH 0/7] net: Convert dev_set_mac_address() to " Kuniyuki Iwashima
7 siblings, 1 reply; 21+ messages in thread
From: Kees Cook @ 2025-05-20 22:31 UTC (permalink / raw)
To: Kuniyuki Iwashima
Cc: Kees Cook, Eric Dumazet, Jakub Kicinski, David S. Miller,
Paolo Abeni, Simon Horman, Ido Schimmel, netdev,
Christoph Hellwig, Sagi Grimberg, Chaitanya Kulkarni,
Martin K. Petersen, Mike Christie, Max Gurtovoy,
Maurizio Lombardi, Dmitry Bogdanov, Mingzhe Zou, Christophe Leroy,
Dr. David Alan Gilbert, Andrew Lunn, Stanislav Fomichev,
Cosmin Ratiu, Lei Yang, Samuel Mendoza-Jonas, Paul Fertser,
Alexander Aring, Stefan Schmidt, Miquel Raynal, Hayes Wang,
Douglas Anderson, Grant Grundler, Jay Vosburgh, K. Y. Srinivasan,
Haiyang Zhang, Wei Liu, Dexuan Cui, Jiri Pirko, Eric Biggers,
Milan Broz, Philipp Hahn, Ard Biesheuvel, Al Viro, Ahmed Zaki,
Alexander Lobakin, Xiao Liang, linux-kernel, linux-nvme,
linux-scsi, target-devel, linux-wpan, linux-usb, linux-hyperv,
linux-hardening
Instead of a heap allocating a variably sized struct sockaddr and lying
about the type in the call to netif_set_mac_address(), use a stack
allocated struct sockaddr_storage. This lets us drop the cast and avoid
the allocation.
Putting "ss" on the stack means it will get a reused stack slot since
it is the same size (128B) as other existing single-scope stack variables,
like the vfinfo array (128B), so no additional stack space is used by
this function.
Signed-off-by: Kees Cook <kees@kernel.org>
---
Cc: Kuniyuki Iwashima <kuniyu@amazon.com>
Cc: Eric Dumazet <edumazet@google.com>
Cc: Jakub Kicinski <kuba@kernel.org>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Paolo Abeni <pabeni@redhat.com>
Cc: Simon Horman <horms@kernel.org>
Cc: Ido Schimmel <idosch@nvidia.com>
Cc: <netdev@vger.kernel.org>
---
net/core/rtnetlink.c | 19 ++++---------------
1 file changed, 4 insertions(+), 15 deletions(-)
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index 9743f1c2ae3c..f9a35bdc58ad 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -3080,17 +3080,7 @@ static int do_setlink(const struct sk_buff *skb, struct net_device *dev,
}
if (tb[IFLA_ADDRESS]) {
- struct sockaddr *sa;
- int len;
-
- len = sizeof(sa_family_t) + max_t(size_t, dev->addr_len,
- sizeof(*sa));
- sa = kmalloc(len, GFP_KERNEL);
- if (!sa) {
- err = -ENOMEM;
- goto errout;
- }
- sa->sa_family = dev->type;
+ struct sockaddr_storage ss = { };
netdev_unlock_ops(dev);
@@ -3098,10 +3088,9 @@ static int do_setlink(const struct sk_buff *skb, struct net_device *dev,
down_write(&dev_addr_sem);
netdev_lock_ops(dev);
- memcpy(sa->sa_data, nla_data(tb[IFLA_ADDRESS]),
- dev->addr_len);
- err = netif_set_mac_address(dev, (struct sockaddr_storage *)sa, extack);
- kfree(sa);
+ ss.ss_family = dev->type;
+ memcpy(ss.__data, nla_data(tb[IFLA_ADDRESS]), dev->addr_len);
+ err = netif_set_mac_address(dev, &ss, extack);
if (err) {
up_write(&dev_addr_sem);
goto errout;
--
2.34.1
^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [PATCH 2/7] net: core: Switch netif_set_mac_address() to struct sockaddr_storage
2025-05-20 22:31 ` [PATCH 2/7] net: core: Switch netif_set_mac_address() to struct sockaddr_storage Kees Cook
@ 2025-05-20 22:47 ` Gustavo A. R. Silva
0 siblings, 0 replies; 21+ messages in thread
From: Gustavo A. R. Silva @ 2025-05-20 22:47 UTC (permalink / raw)
To: Kees Cook, Kuniyuki Iwashima
Cc: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Simon Horman, Andrew Lunn, Stanislav Fomichev, Cosmin Ratiu,
Lei Yang, Ido Schimmel, netdev, Christoph Hellwig, Sagi Grimberg,
Chaitanya Kulkarni, Martin K. Petersen, Mike Christie,
Max Gurtovoy, Maurizio Lombardi, Dmitry Bogdanov, Mingzhe Zou,
Christophe Leroy, Dr. David Alan Gilbert, Samuel Mendoza-Jonas,
Paul Fertser, Alexander Aring, Stefan Schmidt, Miquel Raynal,
Hayes Wang, Douglas Anderson, Grant Grundler, Jay Vosburgh,
K. Y. Srinivasan, Haiyang Zhang, Wei Liu, Dexuan Cui, Jiri Pirko,
Eric Biggers, Milan Broz, Philipp Hahn, Ard Biesheuvel, Al Viro,
Ahmed Zaki, Alexander Lobakin, Xiao Liang, linux-kernel,
linux-nvme, linux-scsi, target-devel, linux-wpan, linux-usb,
linux-hyperv, linux-hardening
On 20/05/25 16:31, Kees Cook wrote:
> In order to avoid passing around struct sockaddr that has a size the
> compiler cannot reason about (nor track at runtime), convert
> netif_set_mac_address() to take struct sockaddr_storage. This is just a
> cast conversion, so there is are no binary changes. Following patches
> will make actual allocation changes.
>
> Signed-off-by: Kees Cook <kees@kernel.org>
Acked-by: Gustavo A. R. Silva <gustavoars@kernel.org>
Thanks!
-Gustavo
> ---
> Cc: "David S. Miller" <davem@davemloft.net>
> Cc: Eric Dumazet <edumazet@google.com>
> Cc: Jakub Kicinski <kuba@kernel.org>
> Cc: Paolo Abeni <pabeni@redhat.com>
> Cc: Simon Horman <horms@kernel.org>
> Cc: Andrew Lunn <andrew+netdev@lunn.ch>
> Cc: Stanislav Fomichev <sdf@fomichev.me>
> Cc: Cosmin Ratiu <cratiu@nvidia.com>
> Cc: Lei Yang <leiyang@redhat.com>
> Cc: Kuniyuki Iwashima <kuniyu@amazon.com>
> Cc: Ido Schimmel <idosch@nvidia.com>
> Cc: <netdev@vger.kernel.org>
> ---
> include/linux/netdevice.h | 2 +-
> net/core/dev.c | 10 +++++-----
> net/core/dev_api.c | 4 ++--
> net/core/rtnetlink.c | 2 +-
> 4 files changed, 9 insertions(+), 9 deletions(-)
>
> diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
> index ea9d335de130..47200a394a02 100644
> --- a/include/linux/netdevice.h
> +++ b/include/linux/netdevice.h
> @@ -4212,7 +4212,7 @@ int netif_set_mtu(struct net_device *dev, int new_mtu);
> int dev_set_mtu(struct net_device *, int);
> int dev_pre_changeaddr_notify(struct net_device *dev, const char *addr,
> struct netlink_ext_ack *extack);
> -int netif_set_mac_address(struct net_device *dev, struct sockaddr *sa,
> +int netif_set_mac_address(struct net_device *dev, struct sockaddr_storage *ss,
> struct netlink_ext_ack *extack);
> int dev_set_mac_address(struct net_device *dev, struct sockaddr *sa,
> struct netlink_ext_ack *extack);
> diff --git a/net/core/dev.c b/net/core/dev.c
> index fccf2167b235..f8c8aad7df2e 100644
> --- a/net/core/dev.c
> +++ b/net/core/dev.c
> @@ -9655,7 +9655,7 @@ int dev_pre_changeaddr_notify(struct net_device *dev, const char *addr,
> }
> EXPORT_SYMBOL(dev_pre_changeaddr_notify);
>
> -int netif_set_mac_address(struct net_device *dev, struct sockaddr *sa,
> +int netif_set_mac_address(struct net_device *dev, struct sockaddr_storage *ss,
> struct netlink_ext_ack *extack)
> {
> const struct net_device_ops *ops = dev->netdev_ops;
> @@ -9663,15 +9663,15 @@ int netif_set_mac_address(struct net_device *dev, struct sockaddr *sa,
>
> if (!ops->ndo_set_mac_address)
> return -EOPNOTSUPP;
> - if (sa->sa_family != dev->type)
> + if (ss->ss_family != dev->type)
> return -EINVAL;
> if (!netif_device_present(dev))
> return -ENODEV;
> - err = dev_pre_changeaddr_notify(dev, sa->sa_data, extack);
> + err = dev_pre_changeaddr_notify(dev, ss->__data, extack);
> if (err)
> return err;
> - if (memcmp(dev->dev_addr, sa->sa_data, dev->addr_len)) {
> - err = ops->ndo_set_mac_address(dev, sa);
> + if (memcmp(dev->dev_addr, ss->__data, dev->addr_len)) {
> + err = ops->ndo_set_mac_address(dev, ss);
> if (err)
> return err;
> }
> diff --git a/net/core/dev_api.c b/net/core/dev_api.c
> index f9a160ab596f..b5f293e637d9 100644
> --- a/net/core/dev_api.c
> +++ b/net/core/dev_api.c
> @@ -91,7 +91,7 @@ int dev_set_mac_address_user(struct net_device *dev, struct sockaddr *sa,
>
> down_write(&dev_addr_sem);
> netdev_lock_ops(dev);
> - ret = netif_set_mac_address(dev, sa, extack);
> + ret = netif_set_mac_address(dev, (struct sockaddr_storage *)sa, extack);
> netdev_unlock_ops(dev);
> up_write(&dev_addr_sem);
>
> @@ -332,7 +332,7 @@ int dev_set_mac_address(struct net_device *dev, struct sockaddr *sa,
> int ret;
>
> netdev_lock_ops(dev);
> - ret = netif_set_mac_address(dev, sa, extack);
> + ret = netif_set_mac_address(dev, (struct sockaddr_storage *)sa, extack);
> netdev_unlock_ops(dev);
>
> return ret;
> diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
> index 8a914b37ef6e..9743f1c2ae3c 100644
> --- a/net/core/rtnetlink.c
> +++ b/net/core/rtnetlink.c
> @@ -3100,7 +3100,7 @@ static int do_setlink(const struct sk_buff *skb, struct net_device *dev,
>
> memcpy(sa->sa_data, nla_data(tb[IFLA_ADDRESS]),
> dev->addr_len);
> - err = netif_set_mac_address(dev, sa, extack);
> + err = netif_set_mac_address(dev, (struct sockaddr_storage *)sa, extack);
> kfree(sa);
> if (err) {
> up_write(&dev_addr_sem);
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 3/7] net/ncsi: Use struct sockaddr_storage for pending_mac
2025-05-20 22:31 ` [PATCH 3/7] net/ncsi: Use struct sockaddr_storage for pending_mac Kees Cook
@ 2025-05-20 22:48 ` Gustavo A. R. Silva
0 siblings, 0 replies; 21+ messages in thread
From: Gustavo A. R. Silva @ 2025-05-20 22:48 UTC (permalink / raw)
To: Kees Cook, Kuniyuki Iwashima
Cc: Samuel Mendoza-Jonas, Paul Fertser, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Simon Horman, netdev,
Christoph Hellwig, Sagi Grimberg, Chaitanya Kulkarni,
Martin K. Petersen, Mike Christie, Max Gurtovoy,
Maurizio Lombardi, Dmitry Bogdanov, Mingzhe Zou, Christophe Leroy,
Dr. David Alan Gilbert, Andrew Lunn, Stanislav Fomichev,
Cosmin Ratiu, Lei Yang, Ido Schimmel, Alexander Aring,
Stefan Schmidt, Miquel Raynal, Hayes Wang, Douglas Anderson,
Grant Grundler, Jay Vosburgh, K. Y. Srinivasan, Haiyang Zhang,
Wei Liu, Dexuan Cui, Jiri Pirko, Eric Biggers, Milan Broz,
Philipp Hahn, Ard Biesheuvel, Al Viro, Ahmed Zaki,
Alexander Lobakin, Xiao Liang, linux-kernel, linux-nvme,
linux-scsi, target-devel, linux-wpan, linux-usb, linux-hyperv,
linux-hardening
On 20/05/25 16:31, Kees Cook wrote:
> To avoid future casting with coming API type changes, switch struct
> ncsi_dev_priv::pending_mac to a full struct sockaddr_storage.
>
> Signed-off-by: Kees Cook <kees@kernel.org>
Acked-by: Gustavo A. R. Silva <gustavoars@kernel.org>
Thanks!
-Gustavo
> ---
> Cc: Samuel Mendoza-Jonas <sam@mendozajonas.com>
> Cc: Paul Fertser <fercerpav@gmail.com>
> Cc: "David S. Miller" <davem@davemloft.net>
> Cc: Eric Dumazet <edumazet@google.com>
> Cc: Jakub Kicinski <kuba@kernel.org>
> Cc: Paolo Abeni <pabeni@redhat.com>
> Cc: Simon Horman <horms@kernel.org>
> Cc: <netdev@vger.kernel.org>
> ---
> net/ncsi/internal.h | 2 +-
> net/ncsi/ncsi-manage.c | 2 +-
> net/ncsi/ncsi-rsp.c | 18 +++++++++---------
> 3 files changed, 11 insertions(+), 11 deletions(-)
>
> diff --git a/net/ncsi/internal.h b/net/ncsi/internal.h
> index 2c260f33b55c..e76c6de0c784 100644
> --- a/net/ncsi/internal.h
> +++ b/net/ncsi/internal.h
> @@ -322,7 +322,7 @@ struct ncsi_dev_priv {
> #define NCSI_DEV_RESHUFFLE 4
> #define NCSI_DEV_RESET 8 /* Reset state of NC */
> unsigned int gma_flag; /* OEM GMA flag */
> - struct sockaddr pending_mac; /* MAC address received from GMA */
> + struct sockaddr_storage pending_mac; /* MAC address received from GMA */
> spinlock_t lock; /* Protect the NCSI device */
> unsigned int package_probe_id;/* Current ID during probe */
> unsigned int package_num; /* Number of packages */
> diff --git a/net/ncsi/ncsi-manage.c b/net/ncsi/ncsi-manage.c
> index b36947063783..0202db2aea3e 100644
> --- a/net/ncsi/ncsi-manage.c
> +++ b/net/ncsi/ncsi-manage.c
> @@ -1058,7 +1058,7 @@ static void ncsi_configure_channel(struct ncsi_dev_priv *ndp)
> break;
> case ncsi_dev_state_config_apply_mac:
> rtnl_lock();
> - ret = dev_set_mac_address(dev, &ndp->pending_mac, NULL);
> + ret = dev_set_mac_address(dev, (struct sockaddr *)&ndp->pending_mac, NULL);
> rtnl_unlock();
> if (ret < 0)
> netdev_warn(dev, "NCSI: 'Writing MAC address to device failed\n");
> diff --git a/net/ncsi/ncsi-rsp.c b/net/ncsi/ncsi-rsp.c
> index 8668888c5a2f..472cc68ad86f 100644
> --- a/net/ncsi/ncsi-rsp.c
> +++ b/net/ncsi/ncsi-rsp.c
> @@ -628,7 +628,7 @@ static int ncsi_rsp_handler_snfc(struct ncsi_request *nr)
> static int ncsi_rsp_handler_oem_gma(struct ncsi_request *nr, int mfr_id)
> {
> struct ncsi_dev_priv *ndp = nr->ndp;
> - struct sockaddr *saddr = &ndp->pending_mac;
> + struct sockaddr_storage *saddr = &ndp->pending_mac;
> struct net_device *ndev = ndp->ndev.dev;
> struct ncsi_rsp_oem_pkt *rsp;
> u32 mac_addr_off = 0;
> @@ -644,11 +644,11 @@ static int ncsi_rsp_handler_oem_gma(struct ncsi_request *nr, int mfr_id)
> else if (mfr_id == NCSI_OEM_MFR_INTEL_ID)
> mac_addr_off = INTEL_MAC_ADDR_OFFSET;
>
> - saddr->sa_family = ndev->type;
> - memcpy(saddr->sa_data, &rsp->data[mac_addr_off], ETH_ALEN);
> + saddr->ss_family = ndev->type;
> + memcpy(saddr->__data, &rsp->data[mac_addr_off], ETH_ALEN);
> if (mfr_id == NCSI_OEM_MFR_BCM_ID || mfr_id == NCSI_OEM_MFR_INTEL_ID)
> - eth_addr_inc((u8 *)saddr->sa_data);
> - if (!is_valid_ether_addr((const u8 *)saddr->sa_data))
> + eth_addr_inc(saddr->__data);
> + if (!is_valid_ether_addr(saddr->__data))
> return -ENXIO;
>
> /* Set the flag for GMA command which should only be called once */
> @@ -1088,7 +1088,7 @@ static int ncsi_rsp_handler_netlink(struct ncsi_request *nr)
> static int ncsi_rsp_handler_gmcma(struct ncsi_request *nr)
> {
> struct ncsi_dev_priv *ndp = nr->ndp;
> - struct sockaddr *saddr = &ndp->pending_mac;
> + struct sockaddr_storage *saddr = &ndp->pending_mac;
> struct net_device *ndev = ndp->ndev.dev;
> struct ncsi_rsp_gmcma_pkt *rsp;
> int i;
> @@ -1105,15 +1105,15 @@ static int ncsi_rsp_handler_gmcma(struct ncsi_request *nr)
> rsp->addresses[i][4], rsp->addresses[i][5]);
> }
>
> - saddr->sa_family = ndev->type;
> + saddr->ss_family = ndev->type;
> for (i = 0; i < rsp->address_count; i++) {
> if (!is_valid_ether_addr(rsp->addresses[i])) {
> netdev_warn(ndev, "NCSI: Unable to assign %pM to device\n",
> rsp->addresses[i]);
> continue;
> }
> - memcpy(saddr->sa_data, rsp->addresses[i], ETH_ALEN);
> - netdev_warn(ndev, "NCSI: Will set MAC address to %pM\n", saddr->sa_data);
> + memcpy(saddr->__data, rsp->addresses[i], ETH_ALEN);
> + netdev_warn(ndev, "NCSI: Will set MAC address to %pM\n", saddr->__data);
> break;
> }
>
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 4/7] ieee802154: Use struct sockaddr_storage with dev_set_mac_address()
2025-05-20 22:31 ` [PATCH 4/7] ieee802154: Use struct sockaddr_storage with dev_set_mac_address() Kees Cook
@ 2025-05-20 22:49 ` Gustavo A. R. Silva
0 siblings, 0 replies; 21+ messages in thread
From: Gustavo A. R. Silva @ 2025-05-20 22:49 UTC (permalink / raw)
To: Kees Cook, Kuniyuki Iwashima
Cc: Alexander Aring, Stefan Schmidt, Miquel Raynal, David S. Miller,
Eric Dumazet, Jakub Kicinski, Paolo Abeni, Simon Horman,
linux-wpan, netdev, Christoph Hellwig, Sagi Grimberg,
Chaitanya Kulkarni, Martin K. Petersen, Mike Christie,
Max Gurtovoy, Maurizio Lombardi, Dmitry Bogdanov, Mingzhe Zou,
Christophe Leroy, Dr. David Alan Gilbert, Andrew Lunn,
Stanislav Fomichev, Cosmin Ratiu, Lei Yang, Ido Schimmel,
Samuel Mendoza-Jonas, Paul Fertser, Hayes Wang, Douglas Anderson,
Grant Grundler, Jay Vosburgh, K. Y. Srinivasan, Haiyang Zhang,
Wei Liu, Dexuan Cui, Jiri Pirko, Eric Biggers, Milan Broz,
Philipp Hahn, Ard Biesheuvel, Al Viro, Ahmed Zaki,
Alexander Lobakin, Xiao Liang, linux-kernel, linux-nvme,
linux-scsi, target-devel, linux-usb, linux-hyperv,
linux-hardening
On 20/05/25 16:31, Kees Cook wrote:
> Switch to struct sockaddr_storage for calling dev_set_mac_address(). Add
> a temporary cast to struct sockaddr, which will be removed in a
> subsequent patch.
>
> Signed-off-by: Kees Cook <kees@kernel.org>
Acked-by: Gustavo A. R. Silva <gustavoars@kernel.org>
Thanks!
-Gustavo
> ---
> Cc: Alexander Aring <alex.aring@gmail.com>
> Cc: Stefan Schmidt <stefan@datenfreihafen.org>
> Cc: Miquel Raynal <miquel.raynal@bootlin.com>
> Cc: "David S. Miller" <davem@davemloft.net>
> Cc: Eric Dumazet <edumazet@google.com>
> Cc: Jakub Kicinski <kuba@kernel.org>
> Cc: Paolo Abeni <pabeni@redhat.com>
> Cc: Simon Horman <horms@kernel.org>
> Cc: <linux-wpan@vger.kernel.org>
> Cc: <netdev@vger.kernel.org>
> ---
> net/ieee802154/nl-phy.c | 8 ++++----
> 1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/net/ieee802154/nl-phy.c b/net/ieee802154/nl-phy.c
> index 359249ab77bf..ee2b190e8e0d 100644
> --- a/net/ieee802154/nl-phy.c
> +++ b/net/ieee802154/nl-phy.c
> @@ -224,17 +224,17 @@ int ieee802154_add_iface(struct sk_buff *skb, struct genl_info *info)
> dev_hold(dev);
>
> if (info->attrs[IEEE802154_ATTR_HW_ADDR]) {
> - struct sockaddr addr;
> + struct sockaddr_storage addr;
>
> - addr.sa_family = ARPHRD_IEEE802154;
> - nla_memcpy(&addr.sa_data, info->attrs[IEEE802154_ATTR_HW_ADDR],
> + addr.ss_family = ARPHRD_IEEE802154;
> + nla_memcpy(&addr.__data, info->attrs[IEEE802154_ATTR_HW_ADDR],
> IEEE802154_ADDR_LEN);
>
> /* strangely enough, some callbacks (inetdev_event) from
> * dev_set_mac_address require RTNL_LOCK
> */
> rtnl_lock();
> - rc = dev_set_mac_address(dev, &addr, NULL);
> + rc = dev_set_mac_address(dev, (struct sockaddr *)&addr, NULL);
> rtnl_unlock();
> if (rc)
> goto dev_unregister;
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 5/7] net: usb: r8152: Convert to use struct sockaddr_storage internally
2025-05-20 22:31 ` [PATCH 5/7] net: usb: r8152: Convert to use struct sockaddr_storage internally Kees Cook
@ 2025-05-20 22:49 ` Gustavo A. R. Silva
0 siblings, 0 replies; 21+ messages in thread
From: Gustavo A. R. Silva @ 2025-05-20 22:49 UTC (permalink / raw)
To: Kees Cook, Kuniyuki Iwashima
Cc: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Hayes Wang, Douglas Anderson, Grant Grundler,
linux-usb, netdev, Christoph Hellwig, Sagi Grimberg,
Chaitanya Kulkarni, Martin K. Petersen, Mike Christie,
Max Gurtovoy, Maurizio Lombardi, Dmitry Bogdanov, Mingzhe Zou,
Christophe Leroy, Simon Horman, Dr. David Alan Gilbert,
Stanislav Fomichev, Cosmin Ratiu, Lei Yang, Ido Schimmel,
Samuel Mendoza-Jonas, Paul Fertser, Alexander Aring,
Stefan Schmidt, Miquel Raynal, Jay Vosburgh, K. Y. Srinivasan,
Haiyang Zhang, Wei Liu, Dexuan Cui, Jiri Pirko, Eric Biggers,
Milan Broz, Philipp Hahn, Ard Biesheuvel, Al Viro, Ahmed Zaki,
Alexander Lobakin, Xiao Liang, linux-kernel, linux-nvme,
linux-scsi, target-devel, linux-wpan, linux-hyperv,
linux-hardening
On 20/05/25 16:31, Kees Cook wrote:
> To support coming API type changes, switch to sockaddr_storage usage
> internally.
>
> Signed-off-by: Kees Cook <kees@kernel.org>
Acked-by: Gustavo A. R. Silva <gustavoars@kernel.org>
Thanks!
-Gustavo
> ---
> Cc: Andrew Lunn <andrew+netdev@lunn.ch>
> Cc: "David S. Miller" <davem@davemloft.net>
> Cc: Eric Dumazet <edumazet@google.com>
> Cc: Jakub Kicinski <kuba@kernel.org>
> Cc: Paolo Abeni <pabeni@redhat.com>
> Cc: Hayes Wang <hayeswang@realtek.com>
> Cc: Douglas Anderson <dianders@chromium.org>
> Cc: Grant Grundler <grundler@chromium.org>
> Cc: <linux-usb@vger.kernel.org>
> Cc: <netdev@vger.kernel.org>
> ---
> drivers/net/usb/r8152.c | 52 +++++++++++++++++++++--------------------
> 1 file changed, 27 insertions(+), 25 deletions(-)
>
> diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c
> index 67f5d30ffcba..b18dee1b1bb3 100644
> --- a/drivers/net/usb/r8152.c
> +++ b/drivers/net/usb/r8152.c
> @@ -1665,14 +1665,14 @@ static int
> rtl8152_set_speed(struct r8152 *tp, u8 autoneg, u32 speed, u8 duplex,
> u32 advertising);
>
> -static int __rtl8152_set_mac_address(struct net_device *netdev, void *p,
> +static int __rtl8152_set_mac_address(struct net_device *netdev,
> + struct sockaddr_storage *addr,
> bool in_resume)
> {
> struct r8152 *tp = netdev_priv(netdev);
> - struct sockaddr *addr = p;
> int ret = -EADDRNOTAVAIL;
>
> - if (!is_valid_ether_addr(addr->sa_data))
> + if (!is_valid_ether_addr(addr->__data))
> goto out1;
>
> if (!in_resume) {
> @@ -1683,10 +1683,10 @@ static int __rtl8152_set_mac_address(struct net_device *netdev, void *p,
>
> mutex_lock(&tp->control);
>
> - eth_hw_addr_set(netdev, addr->sa_data);
> + eth_hw_addr_set(netdev, addr->__data);
>
> ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG);
> - pla_ocp_write(tp, PLA_IDR, BYTE_EN_SIX_BYTES, 8, addr->sa_data);
> + pla_ocp_write(tp, PLA_IDR, BYTE_EN_SIX_BYTES, 8, addr->__data);
> ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML);
>
> mutex_unlock(&tp->control);
> @@ -1706,7 +1706,8 @@ static int rtl8152_set_mac_address(struct net_device *netdev, void *p)
> * host system provided MAC address.
> * Examples of this are Dell TB15 and Dell WD15 docks
> */
> -static int vendor_mac_passthru_addr_read(struct r8152 *tp, struct sockaddr *sa)
> +static int vendor_mac_passthru_addr_read(struct r8152 *tp,
> + struct sockaddr_storage *ss)
> {
> acpi_status status;
> struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
> @@ -1774,47 +1775,48 @@ static int vendor_mac_passthru_addr_read(struct r8152 *tp, struct sockaddr *sa)
> ret = -EINVAL;
> goto amacout;
> }
> - memcpy(sa->sa_data, buf, 6);
> + memcpy(ss->__data, buf, 6);
> tp->netdev->addr_assign_type = NET_ADDR_STOLEN;
> netif_info(tp, probe, tp->netdev,
> - "Using pass-thru MAC addr %pM\n", sa->sa_data);
> + "Using pass-thru MAC addr %pM\n", ss->__data);
>
> amacout:
> kfree(obj);
> return ret;
> }
>
> -static int determine_ethernet_addr(struct r8152 *tp, struct sockaddr *sa)
> +static int determine_ethernet_addr(struct r8152 *tp,
> + struct sockaddr_storage *ss)
> {
> struct net_device *dev = tp->netdev;
> int ret;
>
> - sa->sa_family = dev->type;
> + ss->ss_family = dev->type;
>
> - ret = eth_platform_get_mac_address(&tp->udev->dev, sa->sa_data);
> + ret = eth_platform_get_mac_address(&tp->udev->dev, ss->__data);
> if (ret < 0) {
> if (tp->version == RTL_VER_01) {
> - ret = pla_ocp_read(tp, PLA_IDR, 8, sa->sa_data);
> + ret = pla_ocp_read(tp, PLA_IDR, 8, ss->__data);
> } else {
> /* if device doesn't support MAC pass through this will
> * be expected to be non-zero
> */
> - ret = vendor_mac_passthru_addr_read(tp, sa);
> + ret = vendor_mac_passthru_addr_read(tp, ss);
> if (ret < 0)
> ret = pla_ocp_read(tp, PLA_BACKUP, 8,
> - sa->sa_data);
> + ss->__data);
> }
> }
>
> if (ret < 0) {
> netif_err(tp, probe, dev, "Get ether addr fail\n");
> - } else if (!is_valid_ether_addr(sa->sa_data)) {
> + } else if (!is_valid_ether_addr(ss->__data)) {
> netif_err(tp, probe, dev, "Invalid ether addr %pM\n",
> - sa->sa_data);
> + ss->__data);
> eth_hw_addr_random(dev);
> - ether_addr_copy(sa->sa_data, dev->dev_addr);
> + ether_addr_copy(ss->__data, dev->dev_addr);
> netif_info(tp, probe, dev, "Random ether addr %pM\n",
> - sa->sa_data);
> + ss->__data);
> return 0;
> }
>
> @@ -1824,17 +1826,17 @@ static int determine_ethernet_addr(struct r8152 *tp, struct sockaddr *sa)
> static int set_ethernet_addr(struct r8152 *tp, bool in_resume)
> {
> struct net_device *dev = tp->netdev;
> - struct sockaddr sa;
> + struct sockaddr_storage ss;
> int ret;
>
> - ret = determine_ethernet_addr(tp, &sa);
> + ret = determine_ethernet_addr(tp, &ss);
> if (ret < 0)
> return ret;
>
> if (tp->version == RTL_VER_01)
> - eth_hw_addr_set(dev, sa.sa_data);
> + eth_hw_addr_set(dev, ss.__data);
> else
> - ret = __rtl8152_set_mac_address(dev, &sa, in_resume);
> + ret = __rtl8152_set_mac_address(dev, &ss, in_resume);
>
> return ret;
> }
> @@ -8421,7 +8423,7 @@ static int rtl8152_post_reset(struct usb_interface *intf)
> {
> struct r8152 *tp = usb_get_intfdata(intf);
> struct net_device *netdev;
> - struct sockaddr sa;
> + struct sockaddr_storage ss;
>
> if (!tp || !test_bit(PROBED_WITH_NO_ERRORS, &tp->flags))
> goto exit;
> @@ -8429,8 +8431,8 @@ static int rtl8152_post_reset(struct usb_interface *intf)
> rtl_set_accessible(tp);
>
> /* reset the MAC address in case of policy change */
> - if (determine_ethernet_addr(tp, &sa) >= 0)
> - dev_set_mac_address (tp->netdev, &sa, NULL);
> + if (determine_ethernet_addr(tp, &ss) >= 0)
> + dev_set_mac_address(tp->netdev, (struct sockaddr *)&ss, NULL);
>
> netdev = tp->netdev;
> if (!netif_running(netdev))
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 6/7] net: core: Convert dev_set_mac_address() to struct sockaddr_storage
2025-05-20 22:31 ` [PATCH 6/7] net: core: Convert dev_set_mac_address() to struct sockaddr_storage Kees Cook
@ 2025-05-20 22:50 ` Gustavo A. R. Silva
2025-05-21 13:42 ` kernel test robot
1 sibling, 0 replies; 21+ messages in thread
From: Gustavo A. R. Silva @ 2025-05-20 22:50 UTC (permalink / raw)
To: Kees Cook, Kuniyuki Iwashima
Cc: Jakub Kicinski, Jay Vosburgh, Andrew Lunn, David S. Miller,
Eric Dumazet, Paolo Abeni, K. Y. Srinivasan, Haiyang Zhang,
Wei Liu, Dexuan Cui, Jiri Pirko, Simon Horman, Alexander Aring,
Stefan Schmidt, Miquel Raynal, Samuel Mendoza-Jonas, Paul Fertser,
Hayes Wang, Douglas Anderson, Grant Grundler, Stanislav Fomichev,
Cosmin Ratiu, Lei Yang, netdev, linux-hyperv, linux-usb,
linux-wpan, Christoph Hellwig, Sagi Grimberg, Chaitanya Kulkarni,
Martin K. Petersen, Mike Christie, Max Gurtovoy,
Maurizio Lombardi, Dmitry Bogdanov, Mingzhe Zou, Christophe Leroy,
Dr. David Alan Gilbert, Ido Schimmel, Eric Biggers, Milan Broz,
Philipp Hahn, Ard Biesheuvel, Al Viro, Ahmed Zaki,
Alexander Lobakin, Xiao Liang, linux-kernel, linux-nvme,
linux-scsi, target-devel, linux-hardening
On 20/05/25 16:31, Kees Cook wrote:
> All users of dev_set_mac_address() are now using a struct sockaddr_storage.
> Convert the internal data type to struct sockaddr_storage, drop the casts,
> and update pointer types.
>
> Signed-off-by: Kees Cook <kees@kernel.org>
Acked-by: Gustavo A. R. Silva <gustavoars@kernel.org>
Thanks!
-Gustavo
> ---
> Cc: Jakub Kicinski <kuba@kernel.org>
> Cc: Jay Vosburgh <jv@jvosburgh.net>
> Cc: Andrew Lunn <andrew+netdev@lunn.ch>
> Cc: "David S. Miller" <davem@davemloft.net>
> Cc: Eric Dumazet <edumazet@google.com>
> Cc: Paolo Abeni <pabeni@redhat.com>
> Cc: "K. Y. Srinivasan" <kys@microsoft.com>
> Cc: Haiyang Zhang <haiyangz@microsoft.com>
> Cc: Wei Liu <wei.liu@kernel.org>
> Cc: Dexuan Cui <decui@microsoft.com>
> Cc: Jiri Pirko <jiri@resnulli.us>
> Cc: Simon Horman <horms@kernel.org>
> Cc: Alexander Aring <alex.aring@gmail.com>
> Cc: Stefan Schmidt <stefan@datenfreihafen.org>
> Cc: Miquel Raynal <miquel.raynal@bootlin.com>
> Cc: Samuel Mendoza-Jonas <sam@mendozajonas.com>
> Cc: Paul Fertser <fercerpav@gmail.com>
> Cc: Hayes Wang <hayeswang@realtek.com>
> Cc: Douglas Anderson <dianders@chromium.org>
> Cc: Grant Grundler <grundler@chromium.org>
> Cc: Stanislav Fomichev <sdf@fomichev.me>
> Cc: Cosmin Ratiu <cratiu@nvidia.com>
> Cc: Lei Yang <leiyang@redhat.com>
> Cc: <netdev@vger.kernel.org>
> Cc: <linux-hyperv@vger.kernel.org>
> Cc: <linux-usb@vger.kernel.org>
> Cc: <linux-wpan@vger.kernel.org>
> ---
> include/linux/netdevice.h | 2 +-
> drivers/net/bonding/bond_alb.c | 8 +++-----
> drivers/net/bonding/bond_main.c | 10 ++++------
> drivers/net/hyperv/netvsc_drv.c | 6 +++---
> drivers/net/macvlan.c | 10 +++++-----
> drivers/net/team/team_core.c | 2 +-
> drivers/net/usb/r8152.c | 2 +-
> net/core/dev.c | 1 +
> net/core/dev_api.c | 6 +++---
> net/ieee802154/nl-phy.c | 2 +-
> net/ncsi/ncsi-manage.c | 2 +-
> 11 files changed, 24 insertions(+), 27 deletions(-)
>
> diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
> index 47200a394a02..b4242b997373 100644
> --- a/include/linux/netdevice.h
> +++ b/include/linux/netdevice.h
> @@ -4214,7 +4214,7 @@ int dev_pre_changeaddr_notify(struct net_device *dev, const char *addr,
> struct netlink_ext_ack *extack);
> int netif_set_mac_address(struct net_device *dev, struct sockaddr_storage *ss,
> struct netlink_ext_ack *extack);
> -int dev_set_mac_address(struct net_device *dev, struct sockaddr *sa,
> +int dev_set_mac_address(struct net_device *dev, struct sockaddr_storage *ss,
> struct netlink_ext_ack *extack);
> int dev_set_mac_address_user(struct net_device *dev, struct sockaddr *sa,
> struct netlink_ext_ack *extack);
> diff --git a/drivers/net/bonding/bond_alb.c b/drivers/net/bonding/bond_alb.c
> index 7edf0fd58c34..2d37b07c8215 100644
> --- a/drivers/net/bonding/bond_alb.c
> +++ b/drivers/net/bonding/bond_alb.c
> @@ -1035,7 +1035,7 @@ static int alb_set_slave_mac_addr(struct slave *slave, const u8 addr[],
> */
> memcpy(ss.__data, addr, len);
> ss.ss_family = dev->type;
> - if (dev_set_mac_address(dev, (struct sockaddr *)&ss, NULL)) {
> + if (dev_set_mac_address(dev, &ss, NULL)) {
> slave_err(slave->bond->dev, dev, "dev_set_mac_address on slave failed! ALB mode requires that the base driver support setting the hw address also when the network device's interface is open\n");
> return -EOPNOTSUPP;
> }
> @@ -1273,8 +1273,7 @@ static int alb_set_mac_address(struct bonding *bond, void *addr)
> break;
> bond_hw_addr_copy(tmp_addr, rollback_slave->dev->dev_addr,
> rollback_slave->dev->addr_len);
> - dev_set_mac_address(rollback_slave->dev,
> - (struct sockaddr *)&ss, NULL);
> + dev_set_mac_address(rollback_slave->dev, &ss, NULL);
> dev_addr_set(rollback_slave->dev, tmp_addr);
> }
>
> @@ -1763,8 +1762,7 @@ void bond_alb_handle_active_change(struct bonding *bond, struct slave *new_slave
> bond->dev->addr_len);
> ss.ss_family = bond->dev->type;
> /* we don't care if it can't change its mac, best effort */
> - dev_set_mac_address(new_slave->dev, (struct sockaddr *)&ss,
> - NULL);
> + dev_set_mac_address(new_slave->dev, &ss, NULL);
>
> dev_addr_set(new_slave->dev, tmp_addr);
> }
> diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
> index 98cf4486fcee..b92e8935d686 100644
> --- a/drivers/net/bonding/bond_main.c
> +++ b/drivers/net/bonding/bond_main.c
> @@ -1112,8 +1112,7 @@ static void bond_do_fail_over_mac(struct bonding *bond,
> ss.ss_family = bond->dev->type;
> }
>
> - rv = dev_set_mac_address(new_active->dev,
> - (struct sockaddr *)&ss, NULL);
> + rv = dev_set_mac_address(new_active->dev, &ss, NULL);
> if (rv) {
> slave_err(bond->dev, new_active->dev, "Error %d setting MAC of new active slave\n",
> -rv);
> @@ -1127,8 +1126,7 @@ static void bond_do_fail_over_mac(struct bonding *bond,
> new_active->dev->addr_len);
> ss.ss_family = old_active->dev->type;
>
> - rv = dev_set_mac_address(old_active->dev,
> - (struct sockaddr *)&ss, NULL);
> + rv = dev_set_mac_address(old_active->dev, &ss, NULL);
> if (rv)
> slave_err(bond->dev, old_active->dev, "Error %d setting MAC of old active slave\n",
> -rv);
> @@ -2455,7 +2453,7 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev,
> bond_hw_addr_copy(ss.__data, new_slave->perm_hwaddr,
> new_slave->dev->addr_len);
> ss.ss_family = slave_dev->type;
> - dev_set_mac_address(slave_dev, (struct sockaddr *)&ss, NULL);
> + dev_set_mac_address(slave_dev, &ss, NULL);
> }
>
> err_restore_mtu:
> @@ -2649,7 +2647,7 @@ static int __bond_release_one(struct net_device *bond_dev,
> bond_hw_addr_copy(ss.__data, slave->perm_hwaddr,
> slave->dev->addr_len);
> ss.ss_family = slave_dev->type;
> - dev_set_mac_address(slave_dev, (struct sockaddr *)&ss, NULL);
> + dev_set_mac_address(slave_dev, &ss, NULL);
> }
>
> if (unregister) {
> diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
> index d8b169ac0343..14a0d04e21ae 100644
> --- a/drivers/net/hyperv/netvsc_drv.c
> +++ b/drivers/net/hyperv/netvsc_drv.c
> @@ -1371,7 +1371,7 @@ static int netvsc_set_mac_addr(struct net_device *ndev, void *p)
> struct net_device_context *ndc = netdev_priv(ndev);
> struct net_device *vf_netdev = rtnl_dereference(ndc->vf_netdev);
> struct netvsc_device *nvdev = rtnl_dereference(ndc->nvdev);
> - struct sockaddr *addr = p;
> + struct sockaddr_storage *addr = p;
> int err;
>
> err = eth_prepare_mac_addr_change(ndev, p);
> @@ -1387,12 +1387,12 @@ static int netvsc_set_mac_addr(struct net_device *ndev, void *p)
> return err;
> }
>
> - err = rndis_filter_set_device_mac(nvdev, addr->sa_data);
> + err = rndis_filter_set_device_mac(nvdev, addr->__data);
> if (!err) {
> eth_commit_mac_addr_change(ndev, p);
> } else if (vf_netdev) {
> /* rollback change on VF */
> - memcpy(addr->sa_data, ndev->dev_addr, ETH_ALEN);
> + memcpy(addr->__data, ndev->dev_addr, ETH_ALEN);
> dev_set_mac_address(vf_netdev, addr, NULL);
> }
>
> diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c
> index 7045b1d58754..69e879780c36 100644
> --- a/drivers/net/macvlan.c
> +++ b/drivers/net/macvlan.c
> @@ -754,13 +754,13 @@ static int macvlan_sync_address(struct net_device *dev,
> static int macvlan_set_mac_address(struct net_device *dev, void *p)
> {
> struct macvlan_dev *vlan = netdev_priv(dev);
> - struct sockaddr *addr = p;
> + struct sockaddr_storage *addr = p;
>
> - if (!is_valid_ether_addr(addr->sa_data))
> + if (!is_valid_ether_addr(addr->__data))
> return -EADDRNOTAVAIL;
>
> /* If the addresses are the same, this is a no-op */
> - if (ether_addr_equal(dev->dev_addr, addr->sa_data))
> + if (ether_addr_equal(dev->dev_addr, addr->__data))
> return 0;
>
> if (vlan->mode == MACVLAN_MODE_PASSTHRU) {
> @@ -768,10 +768,10 @@ static int macvlan_set_mac_address(struct net_device *dev, void *p)
> return dev_set_mac_address(vlan->lowerdev, addr, NULL);
> }
>
> - if (macvlan_addr_busy(vlan->port, addr->sa_data))
> + if (macvlan_addr_busy(vlan->port, addr->__data))
> return -EADDRINUSE;
>
> - return macvlan_sync_address(dev, addr->sa_data);
> + return macvlan_sync_address(dev, addr->__data);
> }
>
> static void macvlan_change_rx_flags(struct net_device *dev, int change)
> diff --git a/drivers/net/team/team_core.c b/drivers/net/team/team_core.c
> index d8fc0c79745d..a64e661c21a1 100644
> --- a/drivers/net/team/team_core.c
> +++ b/drivers/net/team/team_core.c
> @@ -55,7 +55,7 @@ static int __set_port_dev_addr(struct net_device *port_dev,
>
> memcpy(addr.__data, dev_addr, port_dev->addr_len);
> addr.ss_family = port_dev->type;
> - return dev_set_mac_address(port_dev, (struct sockaddr *)&addr, NULL);
> + return dev_set_mac_address(port_dev, &addr, NULL);
> }
>
> static int team_port_set_orig_dev_addr(struct team_port *port)
> diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c
> index b18dee1b1bb3..d6589b24c68d 100644
> --- a/drivers/net/usb/r8152.c
> +++ b/drivers/net/usb/r8152.c
> @@ -8432,7 +8432,7 @@ static int rtl8152_post_reset(struct usb_interface *intf)
>
> /* reset the MAC address in case of policy change */
> if (determine_ethernet_addr(tp, &ss) >= 0)
> - dev_set_mac_address(tp->netdev, (struct sockaddr *)&ss, NULL);
> + dev_set_mac_address(tp->netdev, &ss, NULL);
>
> netdev = tp->netdev;
> if (!netif_running(netdev))
> diff --git a/net/core/dev.c b/net/core/dev.c
> index f8c8aad7df2e..1f1900ec26b2 100644
> --- a/net/core/dev.c
> +++ b/net/core/dev.c
> @@ -9683,6 +9683,7 @@ int netif_set_mac_address(struct net_device *dev, struct sockaddr_storage *ss,
>
> DECLARE_RWSEM(dev_addr_sem);
>
> +/* "sa" is a true struct sockaddr with limited "sa_data" member. */
> int dev_get_mac_address(struct sockaddr *sa, struct net *net, char *dev_name)
> {
> size_t size = sizeof(sa->sa_data_min);
> diff --git a/net/core/dev_api.c b/net/core/dev_api.c
> index b5f293e637d9..e80404e76ca9 100644
> --- a/net/core/dev_api.c
> +++ b/net/core/dev_api.c
> @@ -319,20 +319,20 @@ EXPORT_SYMBOL(dev_set_allmulti);
> /**
> * dev_set_mac_address() - change Media Access Control Address
> * @dev: device
> - * @sa: new address
> + * @ss: new address
> * @extack: netlink extended ack
> *
> * Change the hardware (MAC) address of the device
> *
> * Return: 0 on success, -errno on failure.
> */
> -int dev_set_mac_address(struct net_device *dev, struct sockaddr *sa,
> +int dev_set_mac_address(struct net_device *dev, struct sockaddr_storage *ss,
> struct netlink_ext_ack *extack)
> {
> int ret;
>
> netdev_lock_ops(dev);
> - ret = netif_set_mac_address(dev, (struct sockaddr_storage *)sa, extack);
> + ret = netif_set_mac_address(dev, sa, extack);
> netdev_unlock_ops(dev);
>
> return ret;
> diff --git a/net/ieee802154/nl-phy.c b/net/ieee802154/nl-phy.c
> index ee2b190e8e0d..4c07a475c567 100644
> --- a/net/ieee802154/nl-phy.c
> +++ b/net/ieee802154/nl-phy.c
> @@ -234,7 +234,7 @@ int ieee802154_add_iface(struct sk_buff *skb, struct genl_info *info)
> * dev_set_mac_address require RTNL_LOCK
> */
> rtnl_lock();
> - rc = dev_set_mac_address(dev, (struct sockaddr *)&addr, NULL);
> + rc = dev_set_mac_address(dev, &addr, NULL);
> rtnl_unlock();
> if (rc)
> goto dev_unregister;
> diff --git a/net/ncsi/ncsi-manage.c b/net/ncsi/ncsi-manage.c
> index 0202db2aea3e..b36947063783 100644
> --- a/net/ncsi/ncsi-manage.c
> +++ b/net/ncsi/ncsi-manage.c
> @@ -1058,7 +1058,7 @@ static void ncsi_configure_channel(struct ncsi_dev_priv *ndp)
> break;
> case ncsi_dev_state_config_apply_mac:
> rtnl_lock();
> - ret = dev_set_mac_address(dev, (struct sockaddr *)&ndp->pending_mac, NULL);
> + ret = dev_set_mac_address(dev, &ndp->pending_mac, NULL);
> rtnl_unlock();
> if (ret < 0)
> netdev_warn(dev, "NCSI: 'Writing MAC address to device failed\n");
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 7/7] rtnetlink: do_setlink: Use struct sockaddr_storage
2025-05-20 22:31 ` [PATCH 7/7] rtnetlink: do_setlink: Use " Kees Cook
@ 2025-05-20 22:50 ` Gustavo A. R. Silva
0 siblings, 0 replies; 21+ messages in thread
From: Gustavo A. R. Silva @ 2025-05-20 22:50 UTC (permalink / raw)
To: Kees Cook, Kuniyuki Iwashima
Cc: Eric Dumazet, Jakub Kicinski, David S. Miller, Paolo Abeni,
Simon Horman, Ido Schimmel, netdev, Christoph Hellwig,
Sagi Grimberg, Chaitanya Kulkarni, Martin K. Petersen,
Mike Christie, Max Gurtovoy, Maurizio Lombardi, Dmitry Bogdanov,
Mingzhe Zou, Christophe Leroy, Dr. David Alan Gilbert,
Andrew Lunn, Stanislav Fomichev, Cosmin Ratiu, Lei Yang,
Samuel Mendoza-Jonas, Paul Fertser, Alexander Aring,
Stefan Schmidt, Miquel Raynal, Hayes Wang, Douglas Anderson,
Grant Grundler, Jay Vosburgh, K. Y. Srinivasan, Haiyang Zhang,
Wei Liu, Dexuan Cui, Jiri Pirko, Eric Biggers, Milan Broz,
Philipp Hahn, Ard Biesheuvel, Al Viro, Ahmed Zaki,
Alexander Lobakin, Xiao Liang, linux-kernel, linux-nvme,
linux-scsi, target-devel, linux-wpan, linux-usb, linux-hyperv,
linux-hardening
On 20/05/25 16:31, Kees Cook wrote:
> Instead of a heap allocating a variably sized struct sockaddr and lying
> about the type in the call to netif_set_mac_address(), use a stack
> allocated struct sockaddr_storage. This lets us drop the cast and avoid
> the allocation.
>
> Putting "ss" on the stack means it will get a reused stack slot since
> it is the same size (128B) as other existing single-scope stack variables,
> like the vfinfo array (128B), so no additional stack space is used by
> this function.
>
> Signed-off-by: Kees Cook <kees@kernel.org>
Acked-by: Gustavo A. R. Silva <gustavoars@kernel.org>
Thanks!
-Gustavo
> ---
> Cc: Kuniyuki Iwashima <kuniyu@amazon.com>
> Cc: Eric Dumazet <edumazet@google.com>
> Cc: Jakub Kicinski <kuba@kernel.org>
> Cc: "David S. Miller" <davem@davemloft.net>
> Cc: Paolo Abeni <pabeni@redhat.com>
> Cc: Simon Horman <horms@kernel.org>
> Cc: Ido Schimmel <idosch@nvidia.com>
> Cc: <netdev@vger.kernel.org>
> ---
> net/core/rtnetlink.c | 19 ++++---------------
> 1 file changed, 4 insertions(+), 15 deletions(-)
>
> diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
> index 9743f1c2ae3c..f9a35bdc58ad 100644
> --- a/net/core/rtnetlink.c
> +++ b/net/core/rtnetlink.c
> @@ -3080,17 +3080,7 @@ static int do_setlink(const struct sk_buff *skb, struct net_device *dev,
> }
>
> if (tb[IFLA_ADDRESS]) {
> - struct sockaddr *sa;
> - int len;
> -
> - len = sizeof(sa_family_t) + max_t(size_t, dev->addr_len,
> - sizeof(*sa));
> - sa = kmalloc(len, GFP_KERNEL);
> - if (!sa) {
> - err = -ENOMEM;
> - goto errout;
> - }
> - sa->sa_family = dev->type;
> + struct sockaddr_storage ss = { };
>
> netdev_unlock_ops(dev);
>
> @@ -3098,10 +3088,9 @@ static int do_setlink(const struct sk_buff *skb, struct net_device *dev,
> down_write(&dev_addr_sem);
> netdev_lock_ops(dev);
>
> - memcpy(sa->sa_data, nla_data(tb[IFLA_ADDRESS]),
> - dev->addr_len);
> - err = netif_set_mac_address(dev, (struct sockaddr_storage *)sa, extack);
> - kfree(sa);
> + ss.ss_family = dev->type;
> + memcpy(ss.__data, nla_data(tb[IFLA_ADDRESS]), dev->addr_len);
> + err = netif_set_mac_address(dev, &ss, extack);
> if (err) {
> up_write(&dev_addr_sem);
> goto errout;
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 1/7] net: core: Convert inet_addr_is_any() to sockaddr_storage
2025-05-20 22:31 ` [PATCH 1/7] net: core: Convert inet_addr_is_any() to sockaddr_storage Kees Cook
@ 2025-05-21 0:04 ` Kuniyuki Iwashima
2025-05-21 1:26 ` Martin K. Petersen
1 sibling, 0 replies; 21+ messages in thread
From: Kuniyuki Iwashima @ 2025-05-21 0:04 UTC (permalink / raw)
To: kees
Cc: ahmed.zaki, aleksander.lobakin, alex.aring, andrew+netdev, ardb,
christophe.leroy, cratiu, d.bogdanov, davem, decui, dianders,
ebiggers, edumazet, fercerpav, gmazyland, grundler, gustavoars,
haiyangz, hayeswang, hch, horms, idosch, jiri, jv, kch, kuba,
kuniyu, kys, leiyang, linux-hardening, linux-hyperv, linux-kernel,
linux-nvme, linux-scsi, linux-usb, linux-wpan, linux,
martin.petersen, mgurtovoy, michael.christie, mingzhe.zou,
miquel.raynal, mlombard, netdev, pabeni, phahn-oss, sagi, sam,
sdf, shaw.leon, stefan, target-devel, viro, wei.liu
From: Kees Cook <kees@kernel.org>
Date: Tue, 20 May 2025 15:31:00 -0700
> All the callers of inet_addr_is_any() have a sockaddr_storage-backed
> sockaddr. Avoid casts and switch prototype to the actual object being
> used.
>
> Acked-by: Gustavo A. R. Silva <gustavoars@kernel.org>
> Signed-off-by: Kees Cook <kees@kernel.org>
Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 0/7] net: Convert dev_set_mac_address() to struct sockaddr_storage
2025-05-20 22:30 [PATCH 0/7] net: Convert dev_set_mac_address() to struct sockaddr_storage Kees Cook
` (6 preceding siblings ...)
2025-05-20 22:31 ` [PATCH 7/7] rtnetlink: do_setlink: Use " Kees Cook
@ 2025-05-21 0:19 ` Kuniyuki Iwashima
2025-05-21 0:42 ` Kees Cook
7 siblings, 1 reply; 21+ messages in thread
From: Kuniyuki Iwashima @ 2025-05-21 0:19 UTC (permalink / raw)
To: kees
Cc: ahmed.zaki, aleksander.lobakin, alex.aring, andrew+netdev, ardb,
christophe.leroy, cratiu, d.bogdanov, davem, decui, dianders,
ebiggers, edumazet, fercerpav, gmazyland, grundler, haiyangz,
hayeswang, hch, horms, idosch, jiri, jv, kch, kuba, kuniyu, kys,
leiyang, linux-hardening, linux-hyperv, linux-kernel, linux-nvme,
linux-scsi, linux-usb, linux-wpan, linux, martin.petersen,
mgurtovoy, michael.christie, mingzhe.zou, miquel.raynal, mlombard,
netdev, pabeni, phahn-oss, sagi, sam, sdf, shaw.leon, stefan,
target-devel, viro, wei.liu
From: Kees Cook <kees@kernel.org>
Date: Tue, 20 May 2025 15:30:59 -0700
> Hi,
>
> As part of the effort to allow the compiler to reason about object sizes,
> we need to deal with the problematic variably sized struct sockaddr,
> which has no internal runtime size tracking. In much of the network
> stack the use of struct sockaddr_storage has been adopted. Continue the
> transition toward this for more of the internal APIs. Specifically:
>
> - inet_addr_is_any()
> - netif_set_mac_address()
> - dev_set_mac_address()
>
> Only 3 callers of dev_set_mac_address() needed adjustment; all others
> were already using struct sockaddr_storage internally.
I guess dev_set_mac_address_user() was missed on the way ?
For example, tap_ioctl() still uses sockaddr and calls
dev_set_mac_address_user(), which cast it to _storage.
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 0/7] net: Convert dev_set_mac_address() to struct sockaddr_storage
2025-05-21 0:19 ` [PATCH 0/7] net: Convert dev_set_mac_address() to " Kuniyuki Iwashima
@ 2025-05-21 0:42 ` Kees Cook
2025-05-21 3:09 ` Jakub Kicinski
0 siblings, 1 reply; 21+ messages in thread
From: Kees Cook @ 2025-05-21 0:42 UTC (permalink / raw)
To: Kuniyuki Iwashima
Cc: ahmed.zaki, aleksander.lobakin, alex.aring, andrew+netdev, ardb,
christophe.leroy, cratiu, d.bogdanov, davem, decui, dianders,
ebiggers, edumazet, fercerpav, gmazyland, grundler, haiyangz,
hayeswang, hch, horms, idosch, jiri, jv, kch, kuba, kys, leiyang,
linux-hardening, linux-hyperv, linux-kernel, linux-nvme,
linux-scsi, linux-usb, linux-wpan, linux, martin.petersen,
mgurtovoy, michael.christie, mingzhe.zou, miquel.raynal, mlombard,
netdev, pabeni, phahn-oss, sagi, sam, sdf, shaw.leon, stefan,
target-devel, viro, wei.liu
On Tue, May 20, 2025 at 05:19:20PM -0700, Kuniyuki Iwashima wrote:
> From: Kees Cook <kees@kernel.org>
> Date: Tue, 20 May 2025 15:30:59 -0700
> > Hi,
> >
> > As part of the effort to allow the compiler to reason about object sizes,
> > we need to deal with the problematic variably sized struct sockaddr,
> > which has no internal runtime size tracking. In much of the network
> > stack the use of struct sockaddr_storage has been adopted. Continue the
> > transition toward this for more of the internal APIs. Specifically:
> >
> > - inet_addr_is_any()
> > - netif_set_mac_address()
> > - dev_set_mac_address()
> >
> > Only 3 callers of dev_set_mac_address() needed adjustment; all others
> > were already using struct sockaddr_storage internally.
>
> I guess dev_set_mac_address_user() was missed on the way ?
>
> For example, tap_ioctl() still uses sockaddr and calls
> dev_set_mac_address_user(), which cast it to _storage.
Ah yes, I can include that in the next version if you want? I was trying
to find a stopping point since everything kind of touches everything ...
:P
--
Kees Cook
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 1/7] net: core: Convert inet_addr_is_any() to sockaddr_storage
2025-05-20 22:31 ` [PATCH 1/7] net: core: Convert inet_addr_is_any() to sockaddr_storage Kees Cook
2025-05-21 0:04 ` Kuniyuki Iwashima
@ 2025-05-21 1:26 ` Martin K. Petersen
1 sibling, 0 replies; 21+ messages in thread
From: Martin K. Petersen @ 2025-05-21 1:26 UTC (permalink / raw)
To: Kees Cook
Cc: Kuniyuki Iwashima, Gustavo A . R . Silva, Christoph Hellwig,
Sagi Grimberg, Chaitanya Kulkarni, Martin K. Petersen,
David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Mike Christie, Max Gurtovoy, Maurizio Lombardi, Dmitry Bogdanov,
Mingzhe Zou, Christophe Leroy, Simon Horman,
Dr. David Alan Gilbert, linux-nvme, linux-scsi, target-devel,
netdev, Andrew Lunn, Stanislav Fomichev, Cosmin Ratiu, Lei Yang,
Ido Schimmel, Samuel Mendoza-Jonas, Paul Fertser, Alexander Aring,
Stefan Schmidt, Miquel Raynal, Hayes Wang, Douglas Anderson,
Grant Grundler, Jay Vosburgh, K. Y. Srinivasan, Haiyang Zhang,
Wei Liu, Dexuan Cui, Jiri Pirko, Eric Biggers, Milan Broz,
Philipp Hahn, Ard Biesheuvel, Al Viro, Ahmed Zaki,
Alexander Lobakin, Xiao Liang, linux-kernel, linux-wpan,
linux-usb, linux-hyperv, linux-hardening
Kees,
> All the callers of inet_addr_is_any() have a sockaddr_storage-backed
> sockaddr. Avoid casts and switch prototype to the actual object being
> used.
Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com> # SCSI
--
Martin K. Petersen
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 0/7] net: Convert dev_set_mac_address() to struct sockaddr_storage
2025-05-21 0:42 ` Kees Cook
@ 2025-05-21 3:09 ` Jakub Kicinski
2025-05-21 5:18 ` Kees Cook
0 siblings, 1 reply; 21+ messages in thread
From: Jakub Kicinski @ 2025-05-21 3:09 UTC (permalink / raw)
To: Kees Cook
Cc: Kuniyuki Iwashima, ahmed.zaki, aleksander.lobakin, alex.aring,
andrew+netdev, ardb, christophe.leroy, cratiu, d.bogdanov, davem,
decui, dianders, ebiggers, edumazet, fercerpav, gmazyland,
grundler, haiyangz, hayeswang, hch, horms, idosch, jiri, jv, kch,
kys, leiyang, linux-hardening, linux-hyperv, linux-kernel,
linux-nvme, linux-scsi, linux-usb, linux-wpan, linux,
martin.petersen, mgurtovoy, michael.christie, mingzhe.zou,
miquel.raynal, mlombard, netdev, pabeni, phahn-oss, sagi, sam,
sdf, shaw.leon, stefan, target-devel, viro, wei.liu
On Tue, 20 May 2025 17:42:32 -0700 Kees Cook wrote:
> Ah yes, I can include that in the next version if you want? I was trying
> to find a stopping point since everything kind of touches everything ...
Looks like the build considers -Wincompatible-pointer-types to always
imply -Werror or some such? We explicitly disable CONFIG_WERROR in our
CI, but we still get:
drivers/net/macvlan.c:1302:34: error: incompatible pointer types passing 'struct sockaddr *' to parameter of type 'struct __kernel_sockaddr_storage *' [-Werror,-Wincompatible-pointer-types]
1302 | dev_set_mac_address(port->dev, &sa, NULL);
| ^~~
on this series :(
--
pw-bot: cr
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 0/7] net: Convert dev_set_mac_address() to struct sockaddr_storage
2025-05-21 3:09 ` Jakub Kicinski
@ 2025-05-21 5:18 ` Kees Cook
0 siblings, 0 replies; 21+ messages in thread
From: Kees Cook @ 2025-05-21 5:18 UTC (permalink / raw)
To: Jakub Kicinski
Cc: Kuniyuki Iwashima, ahmed.zaki, aleksander.lobakin, alex.aring,
andrew+netdev, ardb, christophe.leroy, cratiu, d.bogdanov, davem,
decui, dianders, ebiggers, edumazet, fercerpav, gmazyland,
grundler, haiyangz, hayeswang, hch, horms, idosch, jiri, jv, kch,
kys, leiyang, linux-hardening, linux-hyperv, linux-kernel,
linux-nvme, linux-scsi, linux-usb, linux-wpan, linux,
martin.petersen, mgurtovoy, michael.christie, mingzhe.zou,
miquel.raynal, mlombard, netdev, pabeni, phahn-oss, sagi, sam,
sdf, shaw.leon, stefan, target-devel, viro, wei.liu
On May 20, 2025 8:09:29 PM PDT, Jakub Kicinski <kuba@kernel.org> wrote:
>On Tue, 20 May 2025 17:42:32 -0700 Kees Cook wrote:
>> Ah yes, I can include that in the next version if you want? I was trying
>> to find a stopping point since everything kind of touches everything ...
>
>Looks like the build considers -Wincompatible-pointer-types to always
>imply -Werror or some such? We explicitly disable CONFIG_WERROR in our
>CI, but we still get:
>
>drivers/net/macvlan.c:1302:34: error: incompatible pointer types passing 'struct sockaddr *' to parameter of type 'struct __kernel_sockaddr_storage *' [-Werror,-Wincompatible-pointer-types]
> 1302 | dev_set_mac_address(port->dev, &sa, NULL);
> | ^~~
>
>on this series :(
I'll get this fixed and add dev_set_mac_address_user() for v3...
--
Kees Cook
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 6/7] net: core: Convert dev_set_mac_address() to struct sockaddr_storage
2025-05-20 22:31 ` [PATCH 6/7] net: core: Convert dev_set_mac_address() to struct sockaddr_storage Kees Cook
2025-05-20 22:50 ` Gustavo A. R. Silva
@ 2025-05-21 13:42 ` kernel test robot
1 sibling, 0 replies; 21+ messages in thread
From: kernel test robot @ 2025-05-21 13:42 UTC (permalink / raw)
To: Kees Cook, Kuniyuki Iwashima
Cc: oe-kbuild-all, Kees Cook, Jakub Kicinski, Jay Vosburgh,
Andrew Lunn, Eric Dumazet, Paolo Abeni, K. Y. Srinivasan,
Haiyang Zhang, Wei Liu, Dexuan Cui, Jiri Pirko, Simon Horman,
Alexander Aring, Stefan Schmidt, Miquel Raynal,
Samuel Mendoza-Jonas, Paul Fertser, Hayes Wang, Douglas Anderson,
Grant Grundler, Stanislav Fomichev, Cosmin Ratiu, Lei Yang,
netdev, linux-hyperv, linux-usb, linux-wpan, Christoph Hellwig,
Sagi Grimberg
Hi Kees,
kernel test robot noticed the following build errors:
[auto build test ERROR on linux-nvme/for-next]
[also build test ERROR on mkp-scsi/for-next kees/for-next/pstore kees/for-next/kspp linus/master v6.15-rc7 next-20250521]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Kees-Cook/net-core-Convert-inet_addr_is_any-to-sockaddr_storage/20250521-063445
base: git://git.infradead.org/nvme.git for-next
patch link: https://lore.kernel.org/r/20250520223108.2672023-6-kees%40kernel.org
patch subject: [PATCH 6/7] net: core: Convert dev_set_mac_address() to struct sockaddr_storage
config: arc-randconfig-001-20250521 (https://download.01.org/0day-ci/archive/20250521/202505212149.6QGSFucw-lkp@intel.com/config)
compiler: arc-linux-gcc (GCC) 10.5.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250521/202505212149.6QGSFucw-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202505212149.6QGSFucw-lkp@intel.com/
All errors (new ones prefixed by >>):
net/core/dev_api.c: In function 'dev_set_mac_address':
>> net/core/dev_api.c:318:35: error: 'sa' undeclared (first use in this function); did you mean 'ss'?
318 | ret = netif_set_mac_address(dev, sa, extack);
| ^~
| ss
net/core/dev_api.c:318:35: note: each undeclared identifier is reported only once for each function it appears in
vim +318 net/core/dev_api.c
301
302 /**
303 * dev_set_mac_address() - change Media Access Control Address
304 * @dev: device
305 * @ss: new address
306 * @extack: netlink extended ack
307 *
308 * Change the hardware (MAC) address of the device
309 *
310 * Return: 0 on success, -errno on failure.
311 */
312 int dev_set_mac_address(struct net_device *dev, struct sockaddr_storage *ss,
313 struct netlink_ext_ack *extack)
314 {
315 int ret;
316
317 netdev_lock_ops(dev);
> 318 ret = netif_set_mac_address(dev, sa, extack);
319 netdev_unlock_ops(dev);
320
321 return ret;
322 }
323 EXPORT_SYMBOL(dev_set_mac_address);
324
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 21+ messages in thread
end of thread, other threads:[~2025-05-21 13:43 UTC | newest]
Thread overview: 21+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-05-20 22:30 [PATCH 0/7] net: Convert dev_set_mac_address() to struct sockaddr_storage Kees Cook
2025-05-20 22:31 ` [PATCH 1/7] net: core: Convert inet_addr_is_any() to sockaddr_storage Kees Cook
2025-05-21 0:04 ` Kuniyuki Iwashima
2025-05-21 1:26 ` Martin K. Petersen
2025-05-20 22:31 ` [PATCH 2/7] net: core: Switch netif_set_mac_address() to struct sockaddr_storage Kees Cook
2025-05-20 22:47 ` Gustavo A. R. Silva
2025-05-20 22:31 ` [PATCH 3/7] net/ncsi: Use struct sockaddr_storage for pending_mac Kees Cook
2025-05-20 22:48 ` Gustavo A. R. Silva
2025-05-20 22:31 ` [PATCH 4/7] ieee802154: Use struct sockaddr_storage with dev_set_mac_address() Kees Cook
2025-05-20 22:49 ` Gustavo A. R. Silva
2025-05-20 22:31 ` [PATCH 5/7] net: usb: r8152: Convert to use struct sockaddr_storage internally Kees Cook
2025-05-20 22:49 ` Gustavo A. R. Silva
2025-05-20 22:31 ` [PATCH 6/7] net: core: Convert dev_set_mac_address() to struct sockaddr_storage Kees Cook
2025-05-20 22:50 ` Gustavo A. R. Silva
2025-05-21 13:42 ` kernel test robot
2025-05-20 22:31 ` [PATCH 7/7] rtnetlink: do_setlink: Use " Kees Cook
2025-05-20 22:50 ` Gustavo A. R. Silva
2025-05-21 0:19 ` [PATCH 0/7] net: Convert dev_set_mac_address() to " Kuniyuki Iwashima
2025-05-21 0:42 ` Kees Cook
2025-05-21 3:09 ` Jakub Kicinski
2025-05-21 5:18 ` Kees Cook
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).