Date: Tue, 15 Nov 2022 09:22:08 +0100 From: Mateusz Guzik <mjguzik@gmail.com> To: Brooks Davis <brooks@freebsd.org> Cc: src-committers@freebsd.org, dev-commits-src-all@freebsd.org, dev-commits-src-main@freebsd.org Subject: Re: git: 40e0fa10f58d - main - Check alignment of fp in unwind_frame Message-ID: <CAGudoHGZhUjOs4a-A8mW7oo49HcfxbvVDx5CfULQTF-GN6OkuA@mail.gmail.com> In-Reply-To: <202211150026.2AF0Q9vH048757@gitrepo.freebsd.org> References: <202211150026.2AF0Q9vH048757@gitrepo.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
this fails to build: /usr/src/sys/riscv/riscv/unwind.c:50:7: error: implicit declaration of function 'is_aligned' is invalid in C99 [-Werror,-Wimplicit-function-declaration] if (!is_aligned(fp, sizeof(fp)) || ^ 1 error generated. On 11/15/22, Brooks Davis <brooks@freebsd.org> wrote: > The branch main has been updated by brooks: > > URL: > https://cgit.FreeBSD.org/src/commit/?id=40e0fa10f58d90744c2857b57adf0ddbce1a1e1c > > commit 40e0fa10f58d90744c2857b57adf0ddbce1a1e1c > Author: Dapeng Gao <dapeng@dpgao.cn> > AuthorDate: 2022-11-15 00:21:38 +0000 > Commit: Brooks Davis <brooks@FreeBSD.org> > CommitDate: 2022-11-15 00:25:46 +0000 > > Check alignment of fp in unwind_frame > > A misaligned frame pointer is certainly not a valid frame pointer and > with strict alignment enabled (as on CHERI) can cause panics when it is > loaded from later in the code. > > Reviewed By: jhb > Differential Revision: https://reviews.freebsd.org/D34646 > --- > sys/arm64/arm64/unwind.c | 3 ++- > sys/riscv/riscv/unwind.c | 3 ++- > 2 files changed, 4 insertions(+), 2 deletions(-) > > diff --git a/sys/arm64/arm64/unwind.c b/sys/arm64/arm64/unwind.c > index 470b64c00540..81431e109494 100644 > --- a/sys/arm64/arm64/unwind.c > +++ b/sys/arm64/arm64/unwind.c > @@ -41,7 +41,8 @@ unwind_frame(struct thread *td, struct unwind_state > *frame) > > fp = frame->fp; > > - if (!kstack_contains(td, fp, sizeof(uintptr_t) * 2)) > + if (!is_aligned(fp, sizeof(fp)) || > + !kstack_contains(td, fp, sizeof(fp) * 2)) > return (false); > > /* FP to previous frame (X29) */ > diff --git a/sys/riscv/riscv/unwind.c b/sys/riscv/riscv/unwind.c > index 9efb1fef9451..a66ffebcdc35 100644 > --- a/sys/riscv/riscv/unwind.c > +++ b/sys/riscv/riscv/unwind.c > @@ -47,7 +47,8 @@ unwind_frame(struct thread *td, struct unwind_state > *frame) > > fp = frame->fp; > > - if (!kstack_contains(td, fp - sizeof(fp) * 2, sizeof(fp) * 2)) > + if (!is_aligned(fp, sizeof(fp)) || > + !kstack_contains(td, fp - sizeof(fp) * 2, sizeof(fp) * 2)) > return (false); > > frame->sp = fp; > -- Mateusz Guzik <mjguzik gmail.com>
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAGudoHGZhUjOs4a-A8mW7oo49HcfxbvVDx5CfULQTF-GN6OkuA>