diff mbox series

cifs: avoid use of dstaddr as key for fscache client cookie

Message ID CANT5p=oTtfOJxq009jzGLEWxztShPa3cORzHjriO2DNRU8KDtA@mail.gmail.com
State New
Headers show
Series cifs: avoid use of dstaddr as key for fscache client cookie | expand

Commit Message

Shyam Prasad N Dec. 3, 2021, 9:29 a.m. UTC
server->dstaddr can change when the DNS mapping for the
server hostname changes. But conn_id is a u64 counter
that is incremented each time a new TCP connection
is setup. So use only that as a key.

Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
---
 fs/cifs/fscache.c | 38 +-------------------------------------
 1 file changed, 1 insertion(+), 37 deletions(-)

  cifs_dbg(FYI, "%s: (0x%p/0x%p)\n",
diff mbox series

Patch

diff --git a/fs/cifs/fscache.c b/fs/cifs/fscache.c
index 1db3437f3b7d..003c5f1f4dfb 100644
--- a/fs/cifs/fscache.c
+++ b/fs/cifs/fscache.c
@@ -16,14 +16,6 @@ 
  * Key layout of CIFS server cache index object
  */
 struct cifs_server_key {
- struct {
- uint16_t family; /* address family */
- __be16 port; /* IP port */
- } hdr;
- union {
- struct in_addr ipv4_addr;
- struct in6_addr ipv6_addr;
- };
  __u64 conn_id;
 } __packed;

@@ -32,11 +24,7 @@  struct cifs_server_key {
  */
 void cifs_fscache_get_client_cookie(struct TCP_Server_Info *server)
 {
- const struct sockaddr *sa = (struct sockaddr *) &server->dstaddr;
- const struct sockaddr_in *addr = (struct sockaddr_in *) sa;
- const struct sockaddr_in6 *addr6 = (struct sockaddr_in6 *) sa;
  struct cifs_server_key key;
- uint16_t key_len = sizeof(key.hdr);

  /*
  * Check if cookie was already initialized so don't reinitialize it.
@@ -47,36 +35,12 @@  void cifs_fscache_get_client_cookie(struct
TCP_Server_Info *server)
  return;

  memset(&key, 0, sizeof(key));
-
- /*
- * Should not be a problem as sin_family/sin6_family overlays
- * sa_family field
- */
- key.hdr.family = sa->sa_family;
- switch (sa->sa_family) {
- case AF_INET:
- key.hdr.port = addr->sin_port;
- key.ipv4_addr = addr->sin_addr;
- key_len += sizeof(key.ipv4_addr);
- break;
-
- case AF_INET6:
- key.hdr.port = addr6->sin6_port;
- key.ipv6_addr = addr6->sin6_addr;
- key_len += sizeof(key.ipv6_addr);
- break;
-
- default:
- cifs_dbg(VFS, "Unknown network family '%d'\n", sa->sa_family);
- server->fscache = NULL;
- return;
- }
  key.conn_id = server->conn_id;

  server->fscache =
  fscache_acquire_cookie(cifs_fscache_netfs.primary_index,
        &cifs_fscache_server_index_def,
-       &key, key_len,
+       &key, sizeof(key),
        NULL, 0,
        server, 0, true);