]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
rds: Correct endian annotation of port and addr assignments
authorSimon Horman <horms@kernel.org>
Thu, 19 Jun 2025 13:58:32 +0000 (14:58 +0100)
committerJakub Kicinski <kuba@kernel.org>
Sat, 21 Jun 2025 14:35:38 +0000 (07:35 -0700)
Correct the endianness annotation of port assignments:

  A host byte order value (RDS_TCP_PORT) is correctly converted to
  network byte order (big endian) using htons. But it is then cast back to
  host byte order before assigning to a variable that expects a big endian
  value.  Address this by dropping the cast.

  This is not a bug because, while the endian annotation is changed by
  this patch, the assigned value is unchanged.

Also correct the endianness of address assignment.

  A host byte order value (INADDR_ANY) is incorrectly assigned as-is to
  a variable that expects a big endian value. Address this by converting
  the value to network byte order (big endian).

  This is not a bug because INADDR_ANY is 0, which is isomorphic
  with regards to endian conversions. IOW, while the endian annotation
  is changed by this patch, the assigned value is unchanged.

Incorrect endian annotations appear to date back to IPv4-only code added
by commit 70041088e3b9 ("RDS: Add TCP transport to RDS").

Flagged by Sparse.

Signed-off-by: Simon Horman <horms@kernel.org>
Reviewed-by: Allison Henderson <allison.henderson@oracle.com>
Link: https://patch.msgid.link/20250619-rds-minor-v1-1-86d2ee3a98b9@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/rds/tcp_listen.c

index d89bd8d0c354569a55a9101702a0b87d65fd52ee..b5c801c629a49569b6a2e32079d191e5aeada430 100644 (file)
@@ -298,15 +298,15 @@ struct socket *rds_tcp_listen_init(struct net *net, bool isv6)
                sin6 = (struct sockaddr_in6 *)&ss;
                sin6->sin6_family = PF_INET6;
                sin6->sin6_addr = in6addr_any;
-               sin6->sin6_port = (__force u16)htons(RDS_TCP_PORT);
+               sin6->sin6_port = htons(RDS_TCP_PORT);
                sin6->sin6_scope_id = 0;
                sin6->sin6_flowinfo = 0;
                addr_len = sizeof(*sin6);
        } else {
                sin = (struct sockaddr_in *)&ss;
                sin->sin_family = PF_INET;
-               sin->sin_addr.s_addr = INADDR_ANY;
-               sin->sin_port = (__force u16)htons(RDS_TCP_PORT);
+               sin->sin_addr.s_addr = htonl(INADDR_ANY);
+               sin->sin_port = htons(RDS_TCP_PORT);
                addr_len = sizeof(*sin);
        }