syscall_emul: fix openat when directory does not end in "/"
authorCiro Santilli <ciro.santilli@arm.com>
Wed, 26 Sep 2018 16:11:07 +0000 (17:11 +0100)
committerCiro Santilli <ciro.santilli@gmail.com>
Tue, 30 Oct 2018 14:53:42 +0000 (14:53 +0000)
Before this commit, the following code:

    dir_fd = open(".", O_DIRECTORY);
    file_fd = openat(dir_fd, "ble", O_CREAT, S_IRUSR | S_IWUSR);

would create a file called ".ble" in the current working directory,
instead of the correct "ble".

Change-Id: I1525a088d49744e29b760387afabef9f1ac98646
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/c/13005
Reviewed-by: Brandon Potter <Brandon.Potter@amd.com>
Maintainer: Brandon Potter <Brandon.Potter@amd.com>

src/sim/syscall_emul.hh

index c7818b6c65919def03fdecb673dbd026e3cf961c..17d41093789b9c6fca54239377cbd66ddfdf4f75 100644 (file)
@@ -695,7 +695,7 @@ openImpl(SyscallDesc *desc, int callnum, Process *p, ThreadContext *tc,
         auto ffdp = std::dynamic_pointer_cast<FileFDEntry>(fdep);
         if (!ffdp)
             return -EBADF;
-        path.insert(0, ffdp->getFileName());
+        path.insert(0, ffdp->getFileName() + "/");
     }
 
     /**