[rtems commit] dosfs: Fix race condition msdos_dir_read()

Sebastian Huber sebh at rtems.org
Thu Mar 16 14:36:32 UTC 2017


Module:    rtems
Branch:    master
Commit:    dfd879fa426a8a3c865ffdf00558eb83eddae00a
Changeset: http://git.rtems.org/rtems/commit/?id=dfd879fa426a8a3c865ffdf00558eb83eddae00a

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Thu Mar 16 11:59:23 2017 +0100

dosfs: Fix race condition msdos_dir_read()

Obtain file system instance lock before member access.

Update #2937.

---

 cpukit/libfs/src/dosfs/msdos_dir.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/cpukit/libfs/src/dosfs/msdos_dir.c b/cpukit/libfs/src/dosfs/msdos_dir.c
index 577dc4d..40f9f0f 100644
--- a/cpukit/libfs/src/dosfs/msdos_dir.c
+++ b/cpukit/libfs/src/dosfs/msdos_dir.c
@@ -88,6 +88,11 @@ msdos_dir_read(rtems_libio_t *iop, void *buffer, size_t count)
     size_t             string_size = sizeof(tmp_dirent.d_name);
     bool               is_first_entry;
 
+    sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
+                                MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
+    if (sc != RTEMS_SUCCESSFUL)
+        rtems_set_errno_and_return_minus_one(EIO);
+
     /*
      * cast start and count - protect against using sizes that are not exact
      * multiples of the -dirent- size. These could result in unexpected
@@ -107,11 +112,6 @@ msdos_dir_read(rtems_libio_t *iop, void *buffer, size_t count)
              fat_fd->fat_file_size                              :
              fs_info->fat.vol.bpc;
 
-    sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
-                                MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
-    if (sc != RTEMS_SUCCESSFUL)
-        rtems_set_errno_and_return_minus_one(EIO);
-
     while (count > 0 && cmpltd >= 0)
     {
         /*



More information about the vc mailing list