From: Szabolcs Nagy <szabolcs.nagy@arm.com>
To: Richard Henderson <richard.henderson@linaro.org>
Cc: nd@arm.com, qemu-devel@nongnu.org
Subject: Re: another tst-arm-mte bug: qemu-system segfaults
Date: Wed, 3 Jun 2020 18:17:06 +0100 [thread overview]
Message-ID: <20200603171706.GH21536@arm.com> (raw)
In-Reply-To: <7ca0e091-7797-12cd-0c6f-41e453580e0a@linaro.org>
[-- Attachment #1: Type: text/plain, Size: 684 bytes --]
The 06/03/2020 09:21, Richard Henderson wrote:
> On 6/3/20 6:50 AM, Szabolcs Nagy wrote:
> > thanks my tests now get further but later i run into
> > the previous assert failure:
> >
> > target/arm/mte_helper.c:97:allocation_tag_mem: assertion failed: (tag_size <= in_page)
> >
> > i might be able to reduce it to a small reproducer
> > this time. i assume that will help.
>
> Dang, I had hoped that the one fix would cover both -- it's definitely in the
> same area. Yes, a small reproducer will help, but I will also try again with
> your larger reproducer.
reproducer .c and static exe attached.
the referenced __memcmp_aarch64 is again
from the arm optimized-routines repo.
[-- Attachment #2: bug2.c --]
[-- Type: text/x-csrc, Size: 1686 bytes --]
#include <stddef.h>
#include <stdint.h>
#include <sys/mman.h>
#include <sys/prctl.h>
#include <arm_acle.h>
int __memcmp_aarch64 (const void *, const void *, size_t);
#define PR_SET_TAGGED_ADDR_CTRL 55
#define PR_TAGGED_ADDR_ENABLE (1UL << 0)
#define PR_MTE_TCF_SHIFT 1
#define PR_MTE_TCF_SYNC (1UL << PR_MTE_TCF_SHIFT)
#define PR_MTE_TAG_SHIFT 3
#define PROT_MTE 0x20
#define MTE_GRANULE_SIZE 16
void *
alignup_mte (void *p)
{
return (void *) (((uintptr_t) p + MTE_GRANULE_SIZE - 1)
& ~(MTE_GRANULE_SIZE - 1));
}
void *
aligndown_mte (void *p)
{
return (void *) ((uintptr_t) p & ~(MTE_GRANULE_SIZE - 1));
}
void
tag_buffer_helper (void *p, int len)
{
char *ptr = p;
char *end = alignup_mte (ptr + len);
ptr = aligndown_mte (p);
for (; ptr < end; ptr += MTE_GRANULE_SIZE)
{
__arm_mte_set_tag (ptr);
}
}
void *
tag_buffer (void *p, int len)
{
p = __arm_mte_increment_tag (p, 1);
tag_buffer_helper (p, len);
return p;
}
int main (void)
{
int r = prctl (PR_SET_TAGGED_ADDR_CTRL, PR_TAGGED_ADDR_ENABLE | PR_MTE_TCF_SYNC | (0xfffe << PR_MTE_TAG_SHIFT), 0, 0, 0);
if (r < 0) return -1;
char *src1 = mmap (NULL, 4096, PROT_READ | PROT_WRITE | PROT_MTE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
char *src2 = mmap (NULL, 4096, PROT_READ | PROT_WRITE | PROT_MTE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
if (src1 == MAP_FAILED) return -1;
if (src2 == MAP_FAILED) return -1;
char *s1 = src1;
char *s2 = src2 + 15;
for (int i = 0; i < 250; i++)
src1[i] = src2[i] = '?';
for (int i = 0; i < 200; i++)
s1[i] = s2[i] = 'a' + i % 23;
s1 = tag_buffer (s1, 200);
s2 = tag_buffer (s2, 200);
__memcmp_aarch64(s1, s2, 200);
return 0;
}
[-- Attachment #3: bug2 --]
[-- Type: application/octet-stream, Size: 22240 bytes --]
next prev parent reply other threads:[~2020-06-03 17:21 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-29 12:04 another tst-arm-mte bug: qemu-system segfaults Szabolcs Nagy
2020-06-02 21:08 ` Richard Henderson
2020-06-02 21:58 ` Richard Henderson
2020-06-03 13:50 ` Szabolcs Nagy
2020-06-03 16:21 ` Richard Henderson
2020-06-03 17:17 ` Szabolcs Nagy [this message]
2020-06-05 20:26 ` Richard Henderson
2020-06-08 15:12 ` Szabolcs Nagy
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=20200603171706.GH21536@arm.com \
--to=szabolcs.nagy@arm.com \
--cc=nd@arm.com \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).