netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net-next v3] net: core: Convert inet_addr_is_any() to sockaddr_storage
@ 2025-05-20 17:34 Kees Cook
  2025-05-20 18:42 ` Gustavo A. R. Silva
  2025-05-21  1:23 ` Martin K. Petersen
  0 siblings, 2 replies; 3+ messages in thread
From: Kees Cook @ 2025-05-20 17:34 UTC (permalink / raw)
  To: Jakub Kicinski
  Cc: Kees Cook, Christoph Hellwig, Simon Horman, Sagi Grimberg,
	Chaitanya Kulkarni, Martin K. Petersen, David S. Miller,
	Eric Dumazet, Paolo Abeni, Dmitry Bogdanov, Maurizio Lombardi,
	Dr. David Alan Gilbert, Eric Biggers, Al Viro, linux-kernel,
	linux-nvme, linux-scsi, target-devel, netdev, 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.

Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Simon Horman <horms@kernel.org>
Signed-off-by: Kees Cook <kees@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] 3+ messages in thread

* Re: [PATCH net-next v3] net: core: Convert inet_addr_is_any() to sockaddr_storage
  2025-05-20 17:34 [PATCH net-next v3] net: core: Convert inet_addr_is_any() to sockaddr_storage Kees Cook
@ 2025-05-20 18:42 ` Gustavo A. R. Silva
  2025-05-21  1:23 ` Martin K. Petersen
  1 sibling, 0 replies; 3+ messages in thread
From: Gustavo A. R. Silva @ 2025-05-20 18:42 UTC (permalink / raw)
  To: Kees Cook, Jakub Kicinski
  Cc: Christoph Hellwig, Simon Horman, Sagi Grimberg,
	Chaitanya Kulkarni, Martin K. Petersen, David S. Miller,
	Eric Dumazet, Paolo Abeni, Dmitry Bogdanov, Maurizio Lombardi,
	Dr. David Alan Gilbert, Eric Biggers, Al Viro, linux-kernel,
	linux-nvme, linux-scsi, target-devel, netdev, linux-hardening



On 20/05/25 11:34, Kees Cook wrote:
> 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: Christoph Hellwig <hch@lst.de>
> Reviewed-by: Simon Horman <horms@kernel.org>
> Signed-off-by: Kees Cook <kees@kernel.org>

Acked-by: Gustavo A. R. Silva <gustavoars@kernel.org>

Thanks!
-Gustavo

> ---
>   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;


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH net-next v3] net: core: Convert inet_addr_is_any() to sockaddr_storage
  2025-05-20 17:34 [PATCH net-next v3] net: core: Convert inet_addr_is_any() to sockaddr_storage Kees Cook
  2025-05-20 18:42 ` Gustavo A. R. Silva
@ 2025-05-21  1:23 ` Martin K. Petersen
  1 sibling, 0 replies; 3+ messages in thread
From: Martin K. Petersen @ 2025-05-21  1:23 UTC (permalink / raw)
  To: Kees Cook
  Cc: Jakub Kicinski, Christoph Hellwig, Simon Horman, Sagi Grimberg,
	Chaitanya Kulkarni, Martin K. Petersen, David S. Miller,
	Eric Dumazet, Paolo Abeni, Dmitry Bogdanov, Maurizio Lombardi,
	Dr. David Alan Gilbert, Eric Biggers, Al Viro, linux-kernel,
	linux-nvme, linux-scsi, target-devel, netdev, 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] 3+ messages in thread

end of thread, other threads:[~2025-05-21  1:24 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-05-20 17:34 [PATCH net-next v3] net: core: Convert inet_addr_is_any() to sockaddr_storage Kees Cook
2025-05-20 18:42 ` Gustavo A. R. Silva
2025-05-21  1:23 ` Martin K. Petersen

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).