[PATCH 1/1] Ext4Pkg: Redirect internal Open("..", /) to the proper "/"


Pedro Falcato
 

On Mon, Jan 30, 2023 at 7:54 PM Marvin Häuser <mhaeuser@...> wrote:

Reviewed-by: Marvin Häuser <mhaeuser@...>

On 30. Jan 2023, at 18:58, Pedro Falcato <pedro.falcato@...> wrote:

We have been hitting many issues with ".." ASSERTing on / in internal
code, so make sure that we direct /.. to /. This is safe.

Signed-off-by: Pedro Falcato <pedro.falcato@...>
Cc: Marvin Häuser <mhaeuser@...>
Reported-by: Savva Mitrofanov <savvamtr@...>
---
Features/Ext4Pkg/Ext4Dxe/Directory.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/Features/Ext4Pkg/Ext4Dxe/Directory.c b/Features/Ext4Pkg/Ext4Dxe/Directory.c
index 456916453952..73d21d9f9542 100644
--- a/Features/Ext4Pkg/Ext4Dxe/Directory.c
+++ b/Features/Ext4Pkg/Ext4Dxe/Directory.c
@@ -255,7 +255,11 @@ Ext4OpenDirent (
// Using the parent's parent's dentry
File->Dentry = Directory->Dentry->Parent;

- ASSERT (File->Dentry != NULL);
+ if (!File->Dentry) {
+ // Someone tried .. on root, so direct them to /
+ // This is an illegal EFI Open() but is possible to hit from a variety of internal code
+ File->Dentry = Directory->Dentry;
+ }

Ext4RefDentry (File->Dentry);
} else {
--
2.39.0

Pushed as 878c4b13f

Thank you

--
Pedro


Marvin Häuser
 

Reviewed-by: Marvin Häuser <mhaeuser@...>

On 30. Jan 2023, at 18:58, Pedro Falcato <pedro.falcato@...> wrote:

We have been hitting many issues with ".." ASSERTing on / in internal
code, so make sure that we direct /.. to /. This is safe.

Signed-off-by: Pedro Falcato <pedro.falcato@...>
Cc: Marvin Häuser <mhaeuser@...>
Reported-by: Savva Mitrofanov <savvamtr@...>
---
Features/Ext4Pkg/Ext4Dxe/Directory.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/Features/Ext4Pkg/Ext4Dxe/Directory.c b/Features/Ext4Pkg/Ext4Dxe/Directory.c
index 456916453952..73d21d9f9542 100644
--- a/Features/Ext4Pkg/Ext4Dxe/Directory.c
+++ b/Features/Ext4Pkg/Ext4Dxe/Directory.c
@@ -255,7 +255,11 @@ Ext4OpenDirent (
    // Using the parent's parent's dentry
    File->Dentry = Directory->Dentry->Parent;

-    ASSERT (File->Dentry != NULL);
+    if (!File->Dentry) {
+      // Someone tried .. on root, so direct them to /
+      // This is an illegal EFI Open() but is possible to hit from a variety of internal code
+      File->Dentry = Directory->Dentry;
+    }

    Ext4RefDentry (File->Dentry);
  } else {
--
2.39.0



Pedro Falcato
 

We have been hitting many issues with ".." ASSERTing on / in internal
code, so make sure that we direct /.. to /. This is safe.

Signed-off-by: Pedro Falcato <pedro.falcato@...>
Cc: Marvin Häuser <mhaeuser@...>
Reported-by: Savva Mitrofanov <savvamtr@...>
---
Features/Ext4Pkg/Ext4Dxe/Directory.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/Features/Ext4Pkg/Ext4Dxe/Directory.c b/Features/Ext4Pkg/Ext4Dxe/Directory.c
index 456916453952..73d21d9f9542 100644
--- a/Features/Ext4Pkg/Ext4Dxe/Directory.c
+++ b/Features/Ext4Pkg/Ext4Dxe/Directory.c
@@ -255,7 +255,11 @@ Ext4OpenDirent (
// Using the parent's parent's dentry
File->Dentry = Directory->Dentry->Parent;

- ASSERT (File->Dentry != NULL);
+ if (!File->Dentry) {
+ // Someone tried .. on root, so direct them to /
+ // This is an illegal EFI Open() but is possible to hit from a variety of internal code
+ File->Dentry = Directory->Dentry;
+ }

Ext4RefDentry (File->Dentry);
} else {
--
2.39.0