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));
}