You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by ac...@apache.org on 2020/05/01 15:22:14 UTC

[incubator-nuttx] 02/02: rpmsg/hostfs: fix: taking address of packed member may result in an unaligned pointer value

This is an automated email from the ASF dual-hosted git repository.

acassis pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git

commit 261ce70e946e2a75a963f4e9bb01dda83d9ee7b1
Author: Xiang Xiao <xi...@xiaomi.com>
AuthorDate: Fri May 1 18:44:48 2020 +0800

    rpmsg/hostfs: fix: taking address of packed member may result in an unaligned pointer value
    
    Signed-off-by: Xiang Xiao <xi...@xiaomi.com>
---
 fs/hostfs/hostfs_rpmsg_server.c | 35 ++++++++++++++++++++++++++++++-----
 1 file changed, 30 insertions(+), 5 deletions(-)

diff --git a/fs/hostfs/hostfs_rpmsg_server.c b/fs/hostfs/hostfs_rpmsg_server.c
index c10ed27..1216d92 100644
--- a/fs/hostfs/hostfs_rpmsg_server.c
+++ b/fs/hostfs/hostfs_rpmsg_server.c
@@ -361,10 +361,15 @@ static int hostfs_rpmsg_fstat_handler(FAR struct rpmsg_endpoint *ept,
   FAR struct hostfs_rpmsg_server_s *priv = priv_;
   FAR struct hostfs_rpmsg_fstat_s *msg = data;
   int ret = -ENOENT;
+  struct stat buf;
 
   if (msg->fd >= 0 && msg->fd < CONFIG_NFILE_DESCRIPTORS)
     {
-      ret = file_fstat(&priv->files[msg->fd], &msg->buf);
+      ret = file_fstat(&priv->files[msg->fd], &buf);
+      if (ret >= 0)
+        {
+          msg->buf = buf;
+        }
     }
 
   msg->header.result = ret;
@@ -493,10 +498,20 @@ static int hostfs_rpmsg_statfs_handler(FAR struct rpmsg_endpoint *ept,
                                        uint32_t src, FAR void *priv)
 {
   FAR struct hostfs_rpmsg_statfs_s *msg = data;
+  struct statfs buf;
   int ret;
 
-  ret = statfs(msg->pathname, &msg->buf);
-  msg->header.result = ret ? -get_errno() : 0;
+  ret = statfs(msg->pathname, &buf);
+  if (ret)
+    {
+      ret = -get_errno();
+    }
+  else
+    {
+      msg->buf = buf;
+    }
+
+  msg->header.result = ret;
   return rpmsg_send(ept, msg, sizeof(*msg));
 }
 
@@ -558,10 +573,20 @@ static int hostfs_rpmsg_stat_handler(FAR struct rpmsg_endpoint *ept,
                                      uint32_t src, FAR void *priv)
 {
   FAR struct hostfs_rpmsg_stat_s *msg = data;
+  struct stat buf;
   int ret;
 
-  ret = stat(msg->pathname, &msg->buf);
-  msg->header.result = ret ? -get_errno() : 0;
+  ret = stat(msg->pathname, &buf);
+  if (ret)
+    {
+      ret = -get_errno();
+    }
+  else
+    {
+      msg->buf = buf;
+    }
+
+  msg->header.result = ret;
   return rpmsg_send(ept, msg, sizeof(*msg));
 }