[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 1/4] acpi: Fix brokenness
From: |
Damien Zammit |
Subject: |
[PATCH 1/4] acpi: Fix brokenness |
Date: |
Tue, 9 Mar 2021 00:04:54 +1100 |
---
acpi/netfs_impl.c | 39 ++++++++++++++++++++++++++-------------
1 file changed, 26 insertions(+), 13 deletions(-)
diff --git a/acpi/netfs_impl.c b/acpi/netfs_impl.c
index 84f52c89..b6cb466d 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;
@@ -251,11 +248,27 @@ netfs_get_dirents (struct iouser * cred, struct node *
dir,
(*NODE, if found, should be locked, this call should unlock DIR no matter
what.) */
error_t
-netfs_attempt_lookup (struct iouser *user, struct node *dir,
- char *name, struct node **node)
+netfs_attempt_lookup (struct iouser * user, struct node * dir,
+ char *name, struct node ** node)
{
error_t err = 0;
struct acpifs_dirent *entry;
+ char *last = name;
+
+ /* Strip trailing slashes */
+ if (*last)
+ {
+ last += strlen(name) - 1;
+ while (*last == '/' && last >= name)
+ {
+ *last = '\0';
+ last--;
+ }
+ }
+
+ /* Skip leading dot slashes */
+ while (*name == '.' && *(name+1) == '/')
+ name += 2;
if (*name == '\0' || strcmp (name, ".") == 0)
/* Current directory -- just add an additional reference to DIR's node
--
2.30.1