From: Cyril Hrubis <chrubis@suse.cz>
To: Teo Couprie Diaz <teo.coupriediaz@arm.com>
Cc: ltp@lists.linux.it
Subject: Re: [LTP] [PATCH] syscalls/sockioctl: Align buffer to struct ifreq
Date: Fri, 24 Mar 2023 12:52:39 +0100 [thread overview]
Message-ID: <ZB2PB6adFr+3sYI8@yuki> (raw)
In-Reply-To: <20230323160508.672397-2-teo.coupriediaz@arm.com>
Hi!
> In setup3, the following line can lead to an undefined behavior:
> ifr = *(struct ifreq *)ifc.ifc_buf;
>
> Indeed, at this point it can be assumed that ifc.ifc_buf is suitably
> aligned for struct ifreq.
> However, ifc.ifc_buf is assigned to buf which has no alignment
> constraints. This means there exists cases where buf is not suitably
> aligned to load a struct ifreq, which can generate a SIGBUS.
>
> Force the alignment of buf to that of struct ifreq.
>
> Signed-off-by: Teo Couprie Diaz <teo.coupriediaz@arm.com>
> ---
> CI Build: https://github.com/Teo-CD/ltp/actions/runs/4502204132
>
> testcases/kernel/syscalls/sockioctl/sockioctl01.c | 8 +++++++-
> 1 file changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/testcases/kernel/syscalls/sockioctl/sockioctl01.c b/testcases/kernel/syscalls/sockioctl/sockioctl01.c
> index 486236af9d6b..e63aa1921877 100644
> --- a/testcases/kernel/syscalls/sockioctl/sockioctl01.c
> +++ b/testcases/kernel/syscalls/sockioctl/sockioctl01.c
> @@ -52,7 +52,13 @@ static struct ifreq ifr;
> static int sinlen;
> static int optval;
>
> -static char buf[8192];
> +/*
> + * buf has no alignment constraints by default. However, it is used to load
> + * a struct ifreq in setup3, which requires it to have an appropriate alignment
> + * to prevent a possible undefined behavior.
> + */
> +static char buf[8192]
> + __attribute__((aligned(__alignof__(struct ifreq))));
>
> static void setup(void);
> static void setup0(void);
Looking at the code, shouldn't we rather than that declare the buffer as
an struct ifreq array, that would naturally align the buffer without any
need for tricky __attribute__.
diff --git a/testcases/kernel/syscalls/sockioctl/sockioctl01.c b/testcases/kernel/syscalls/sockioctl/sockioctl01.c
index 51dac9c16..206a4999e 100644
--- a/testcases/kernel/syscalls/sockioctl/sockioctl01.c
+++ b/testcases/kernel/syscalls/sockioctl/sockioctl01.c
@@ -52,7 +52,7 @@ static struct ifreq ifr;
static int sinlen;
static int optval;
-static char buf[8192];
+static struct ifreq buf[200];
static void setup(void);
static void setup0(void);
@@ -218,7 +218,7 @@ static void setup2(void)
s = SAFE_SOCKET(cleanup, tdat[testno].domain, tdat[testno].type,
tdat[testno].proto);
ifc.ifc_len = sizeof(buf);
- ifc.ifc_buf = buf;
+ ifc.ifc_buf = (void*)buf;
}
--
Cyril Hrubis
chrubis@suse.cz
--
Mailing list info: https://lists.linux.it/listinfo/ltp
next prev parent reply other threads:[~2023-03-24 11:51 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-23 16:05 [LTP] [PATCH] syscalls/sockioctl: Align buffer to struct ifreq Teo Couprie Diaz
2023-03-24 11:52 ` Cyril Hrubis [this message]
2023-03-24 14:34 ` Teo Couprie Diaz
2023-03-27 8:35 ` Li Wang
2023-03-27 10:25 ` Teo Couprie Diaz
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ZB2PB6adFr+3sYI8@yuki \
--to=chrubis@suse.cz \
--cc=ltp@lists.linux.it \
--cc=teo.coupriediaz@arm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.