From a5fc9f2e767f034830ee5b179123b093180bf259 Mon Sep 17 00:00:00 2001 From: Damien Zammit Date: Tue, 9 Mar 2021 00:04:54 +1100 Subject: acpi, pci-arbiter: Fix get_dirents * acpi/netfs_impl.c (get_dirents): Fix computing number of elements to be returned. Simplify computing the data size. * pci-arbiter/netfs_impl.c (get_dirents): Likewise. (netfs_get_dirents): Fix passing max_data_len rather than max_entries a second time. --- acpi/netfs_impl.c | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) (limited to 'acpi/netfs_impl.c') diff --git a/acpi/netfs_impl.c b/acpi/netfs_impl.c index 84f52c89..38ff5e17 100644 --- a/acpi/netfs_impl.c +++ b/acpi/netfs_impl.c @@ -58,25 +58,22 @@ get_dirents (struct acpifs_dirent *dir, int i, count; size_t size; char *p; + int nentries = (int)dir->dir->num_entries; - if (first_entry >= dir->dir->num_entries) + if (first_entry >= nentries) { *data_len = 0; *data_entries = 0; return 0; } - if (max_entries < 0) - count = dir->dir->num_entries; - else - { - count = ((first_entry + max_entries) >= dir->dir->num_entries ? - dir->dir->num_entries : max_entries) - first_entry; - } + count = nentries - first_entry; + if (max_entries >= 0 && count > max_entries) + count = max_entries; - size = - (count * DIRENTS_CHUNK_SIZE) > - max_data_len ? max_data_len : count * DIRENTS_CHUNK_SIZE; + size = count * DIRENTS_CHUNK_SIZE; + if (max_data_len && size > max_data_len) + size = max_data_len; *data = mmap (0, size, PROT_READ | PROT_WRITE, MAP_ANON, 0, 0); err = ((void *) *data == (void *) -1) ? errno : 0; -- cgit v1.2.3