logo

oasis

Own branch of Oasis Linux (upstream: <https://git.sr.ht/~mcf/oasis/>) git clone https://anongit.hacktivis.me/git/oasis.git

0003-Avoid-invalid-use-of-flexible-array-members.patch (1830B)


  1. From 4526a08c6e97ab0260c2c7ae963626d7f7e18ca2 Mon Sep 17 00:00:00 2001
  2. From: Michael Forney <mforney@mforney.org>
  3. Date: Mon, 6 Sep 2021 23:08:22 -0700
  4. Subject: [PATCH] Avoid invalid use of flexible array members
  5. ---
  6. include/fuse_kernel.h | 10 +++++++---
  7. lib/fuse_lowlevel.c | 7 +++----
  8. 2 files changed, 10 insertions(+), 7 deletions(-)
  9. diff --git a/include/fuse_kernel.h b/include/fuse_kernel.h
  10. index 018a00a..939af6a 100644
  11. --- a/include/fuse_kernel.h
  12. +++ b/include/fuse_kernel.h
  13. @@ -769,13 +769,17 @@ struct fuse_dirent {
  14. struct fuse_direntplus {
  15. struct fuse_entry_out entry_out;
  16. - struct fuse_dirent dirent;
  17. + uint64_t ino;
  18. + uint64_t off;
  19. + uint32_t namelen;
  20. + uint32_t type;
  21. + char name[];
  22. };
  23. #define FUSE_NAME_OFFSET_DIRENTPLUS \
  24. - offsetof(struct fuse_direntplus, dirent.name)
  25. + offsetof(struct fuse_direntplus, name)
  26. #define FUSE_DIRENTPLUS_SIZE(d) \
  27. - FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET_DIRENTPLUS + (d)->dirent.namelen)
  28. + FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET_DIRENTPLUS + (d)->namelen)
  29. struct fuse_notify_inval_inode_out {
  30. uint64_t ino;
  31. diff --git a/lib/fuse_lowlevel.c b/lib/fuse_lowlevel.c
  32. index ccf52d0..a12f5cc 100644
  33. --- a/lib/fuse_lowlevel.c
  34. +++ b/lib/fuse_lowlevel.c
  35. @@ -367,11 +367,10 @@ size_t fuse_add_direntry_plus(fuse_req_t req, char *buf, size_t bufsize,
  36. if ((buf == NULL) || (entlen_padded > bufsize))
  37. return entlen_padded;
  38. - struct fuse_direntplus *dp = (struct fuse_direntplus *) buf;
  39. - memset(&dp->entry_out, 0, sizeof(dp->entry_out));
  40. - fill_entry(&dp->entry_out, e);
  41. + struct fuse_direntplus *dirent = (struct fuse_direntplus *) buf;
  42. + memset(&dirent->entry_out, 0, sizeof(dirent->entry_out));
  43. + fill_entry(&dirent->entry_out, e);
  44. - struct fuse_dirent *dirent = &dp->dirent;
  45. dirent->ino = e->attr.st_ino;
  46. dirent->off = off;
  47. dirent->namelen = namelen;
  48. --
  49. 2.32.0