qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
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 --]

  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).