afs: check for duplicate servers in VL server list

The DNS response may contain the same server more than once. Check for
duplicates by name and port before inserting into the list to avoid
duplicate entries.

Addresses the TODO comment in afs_extract_vlserver_list().

Signed-off-by: Yuto Ohnuki <ytohnuki@amazon.com>
Signed-off-by: David Howells <dhowells@redhat.com>
Link: https://patch.msgid.link/20260622090856.2746629-10-dhowells@redhat.com
cc: Marc Dionne <marc.dionne@auristor.com>
cc: linux-afs@lists.infradead.org
Signed-off-by: Christian Brauner (Amutable) <brauner@kernel.org>
This commit is contained in:
Yuto Ohnuki 2026-06-22 10:08:43 +01:00 committed by Christian Brauner
parent a58edda50a
commit 680ba02073
No known key found for this signature in database
GPG Key ID: 91C61BC06578DCA2

View File

@ -289,8 +289,20 @@ struct afs_vlserver_list *afs_extract_vlserver_list(struct afs_cell *cell,
afs_put_addrlist(old, afs_alist_trace_put_vlserver_old);
}
/* Check for duplicates in the server list */
for (j = 0; j < vllist->nr_servers; j++) {
struct afs_vlserver *s = vllist->servers[j].server;
/* TODO: Might want to check for duplicates */
if (s->name_len == server->name_len &&
s->port == server->port &&
strncasecmp(s->name, server->name, server->name_len) == 0) {
afs_put_vlserver(cell->net, server);
server = NULL;
break;
}
}
if (!server)
continue;
/* Insertion-sort by priority and weight */
for (j = 0; j < vllist->nr_servers; j++) {