From d21b09b328956996466f35a45b28c4ab51f1f4e3 Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Thu, 2 Feb 2023 00:35:05 +0100 Subject: procfs: Add padding to align struct dirent --- procfs/netfs.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/procfs/netfs.c b/procfs/netfs.c index 20238386..967e6109 100644 --- a/procfs/netfs.c +++ b/procfs/netfs.c @@ -123,6 +123,7 @@ error_t netfs_attempt_readlink (struct iouser *user, struct node *np, static int putentries (char *contents, size_t contents_len, int nentries, char *data, mach_msg_type_number_t *datacnt) { + int align = __alignof (struct dirent); int i; *datacnt = 0; @@ -130,6 +131,8 @@ static int putentries (char *contents, size_t contents_len, int nentries, { int namlen = strlen (contents); int reclen = sizeof (struct dirent) + namlen; + int extra = reclen & (align - 1); + int pad = extra ? align - extra : 0; if (data) { @@ -138,7 +141,9 @@ static int putentries (char *contents, size_t contents_len, int nentries, d->d_namlen = namlen; d->d_reclen = reclen; d->d_type = DT_UNKNOWN; - strcpy (d->d_name, contents); + memcpy (d->d_name, contents, namlen + 1); + if (pad) + memset(d->d_name + namlen + 1, 0, pad); } *datacnt += reclen; -- cgit v1.2.3