From 0118b3ff26b9c9a665b68966c8c7a7a902dff99b Mon Sep 17 00:00:00 2001 From: g2flyer Date: Tue, 27 Aug 2024 14:22:42 -0700 Subject: [PATCH] fixup! [LibOS] Missing lock around dentry->inode derefences Signed-off-by: g2flyer --- libos/include/libos_process.h | 4 +++- libos/src/sys/libos_getcwd.c | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/libos/include/libos_process.h b/libos/include/libos_process.h index e2637d484d..4dabb98fa8 100644 --- a/libos/include/libos_process.h +++ b/libos/include/libos_process.h @@ -62,7 +62,9 @@ struct libos_process { LISTP_TYPE(libos_child_process) zombies; struct libos_lock children_lock; - struct libos_lock fs_lock; /* Note: has lower priority than g_dcache_lock. */ + + /* If g_dcache_lock is also required, acquire g_dcache_lock first and then fs_lock */ + struct libos_lock fs_lock; /* Complete command line for the process, as reported by /proc/[pid]/cmdline; currently filled * once during initialization and not able to be modified. diff --git a/libos/src/sys/libos_getcwd.c b/libos/src/sys/libos_getcwd.c index 07202f4aa1..1368bfc85a 100644 --- a/libos/src/sys/libos_getcwd.c +++ b/libos/src/sys/libos_getcwd.c @@ -82,7 +82,7 @@ long libos_syscall_fchdir(int fd) { if (!hdl) return -EBADF; - int ret = 0; + int ret; lock(&g_dcache_lock); struct libos_dentry* dent = hdl->dentry; @@ -106,6 +106,7 @@ long libos_syscall_fchdir(int fd) { put_dentry(g_process.cwd); g_process.cwd = dent; unlock(&g_process.fs_lock); + ret = 0; out: put_handle(hdl); unlock(&g_dcache_lock);