From patchwork Thu Aug 5 13:13:57 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "H.J. Lu" X-Patchwork-Id: 44583 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 3EE10386FC1B for ; Thu, 5 Aug 2021 13:14:44 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 3EE10386FC1B DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1628169284; bh=LsmE2zBRPmEix45WEi7qxrEGIDSBLUeWBO22MEQvQTA=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:Cc:From; b=dZMnq3S+kCkLlC/h6mgLmoElnkai9m/j2K6zam24MMqLX/AldWvZg8nAJqZhJ/0mr w6CEqDgXTkuRBCv2pEXHbIhvJYH7TZPiEoZ4ut/37fcduZH5uF+RUsc+bZKvA4AE0N LBiVe3oJ/XqlzZSG/iN+3eCbz9AUIHfSYCkSx8BY= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-pj1-x102f.google.com (mail-pj1-x102f.google.com [IPv6:2607:f8b0:4864:20::102f]) by sourceware.org (Postfix) with ESMTPS id D6D6039AF4EC for ; Thu, 5 Aug 2021 13:14:00 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org D6D6039AF4EC Received: by mail-pj1-x102f.google.com with SMTP id s22-20020a17090a1c16b0290177caeba067so14725950pjs.0 for ; Thu, 05 Aug 2021 06:14:00 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=LsmE2zBRPmEix45WEi7qxrEGIDSBLUeWBO22MEQvQTA=; b=mha/blLQhjm3dVY4odoaNIPlvpfVrKWsiksoi042168L3yeeF+bGFHjplkl8iAgv/p TQ5XrNRjrhWTamRlH+fK8fizA2BoPjuLIOMOaGAiQZP0+AsnXBInf0dkpgh5qnP7GSmQ kOnLlMHBjkwBBEdAgmTiwkXrirGqQWs1ag15U/e7Wj4sxg+tAY4tJBarLqO/C9hTMnOu TvyY/kDoB9eV6F53EpK33YpQ9I1DSPUgFCY+WliSndmVH7TzkHPN5sn8uIjH0T9j79CT gF/yVX/pWbuSTm3jersEEMEHAJsIUuVRYbB6Do5wHwrcHd0TVSAC3VEu61bgjAl1RPCa JgJQ== X-Gm-Message-State: AOAM531Te89SWYYiMa1q1YsFbaNLXJ5KJAHJx3MKio2LMzcA6UpNP7gp pZqDtIlv5/t6JwtkbZculPA= X-Google-Smtp-Source: ABdhPJz5KV9IesyOqNn/ymRNLZlree9Bo9aTsXk+wMu+LcLjoCCWV0fojo8vSibD3IIpHqAbn8eQtw== X-Received: by 2002:a17:90a:8585:: with SMTP id m5mr4693031pjn.224.1628169240023; Thu, 05 Aug 2021 06:14:00 -0700 (PDT) Received: from gnu-cfl-2.localdomain ([172.58.38.240]) by smtp.gmail.com with ESMTPSA id b3sm6777823pfi.179.2021.08.05.06.13.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 05 Aug 2021 06:13:59 -0700 (PDT) Received: from gnu-cfl-2.. (localhost [IPv6:::1]) by gnu-cfl-2.localdomain (Postfix) with ESMTP id 2BC3DC02C9; Thu, 5 Aug 2021 06:13:58 -0700 (PDT) To: libc-alpha@sourceware.org Subject: [PATCH v5 0/1] RFC: Add Date: Thu, 5 Aug 2021 06:13:57 -0700 Message-Id: <20210805131358.300475-1-hjl.tools@gmail.com> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 X-Spam-Status: No, score=-3027.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: "H.J. Lu via Libc-alpha" From: "H.J. Lu" Reply-To: "H.J. Lu" Cc: Florian Weimer , Szabolcs Nagy , Joseph Myers , "Kirill A . Shutemov" Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" We need an API for tagged address manipulation so that we can use it within glibc to make glibc LAM compatible and enable LAM in memmove tests as well as to enable LAM in GCC libsanitizer/hwasan. If it is needed only for LAM, what is the best way to make it a public glibc header? Should it be added to ? Changes in v5: Add restrictions: 1. All bits between 0 and N - 1, where N is the number of tagged address bits, are used in address translation. 2. All pointers participating in a pointer arithmetic operation should have the same tag if they point to the same memory object so that pointer equality operation can be performed on tagged pointers. Changes in v4: 1. Document that the zero return value from get_tagged_address_bits indicates that tag bits are not the highest bits in address. 2. Document that the zero value of TAGGED_ADDRESS_MASK indicates the invalid address mask. 3. Add to provide TAGGED_ADDRESS_MASK. 4. Add C++ support to TAGGED_ADDRESS_MASK. Changes in v3: 1. set_tagged_address_mask can be only called once before main. 2. Add more tests. --- By default, the number of the address bits used in address translation is the number of address bits. But it can be changed by ARM Top-byte Ignore (TBI) or Intel Linear Address Masking (LAM). provides an API for tagged address manipulation. H.J. Lu (1): : An API for tagged address NEWS | 2 +- bits/tagged-address-mask.h | 47 +++++++++++ bits/tagged-address-valid-bits.h | 28 +++++++ csu/libc-start.c | 3 + elf/dl-support.c | 5 ++ include/sys/tagged-address.h | 9 +++ manual/Makefile | 3 +- manual/ctype.texi | 2 +- manual/memory.texi | 2 +- manual/tagged-address.texi | 80 +++++++++++++++++++ misc/Makefile | 35 ++++++-- misc/Versions | 7 ++ misc/set-tagged-address-mask.c | 41 ++++++++++ misc/sys/tagged-address.h | 45 +++++++++++ misc/tagged-address.c | 55 +++++++++++++ misc/tst-tagged-address-1-static.c | 1 + misc/tst-tagged-address-1.c | 53 ++++++++++++ misc/tst-tagged-address-2-static.c | 1 + misc/tst-tagged-address-2.c | 44 ++++++++++ misc/tst-tagged-address-3-static.c | 1 + misc/tst-tagged-address-3.c | 48 +++++++++++ misc/tst-tagged-address-4-static.c | 1 + misc/tst-tagged-address-4.c | 35 ++++++++ misc/tst-tagged-address-5.c | 25 ++++++ misc/tst-tagged-address-6.c | 34 ++++++++ misc/tst-tagged-address-7.c | 40 ++++++++++ misc/tst-tagged-address-mod-5.c | 45 +++++++++++ misc/tst-tagged-address-mod-6.c | 34 ++++++++ misc/tst-tagged-address-mod-7.c | 34 ++++++++ sysdeps/generic/inline-tagged-address.h | 43 ++++++++++ sysdeps/generic/ldsodefs.h | 4 + sysdeps/unix/sysv/linux/i386/libc.abilist | 5 ++ .../unix/sysv/linux/x86_64/64/libc.abilist | 5 ++ .../unix/sysv/linux/x86_64/x32/libc.abilist | 5 ++ 34 files changed, 813 insertions(+), 9 deletions(-) create mode 100644 bits/tagged-address-mask.h create mode 100644 bits/tagged-address-valid-bits.h create mode 100644 include/sys/tagged-address.h create mode 100644 manual/tagged-address.texi create mode 100644 misc/set-tagged-address-mask.c create mode 100644 misc/sys/tagged-address.h create mode 100644 misc/tagged-address.c create mode 100644 misc/tst-tagged-address-1-static.c create mode 100644 misc/tst-tagged-address-1.c create mode 100644 misc/tst-tagged-address-2-static.c create mode 100644 misc/tst-tagged-address-2.c create mode 100644 misc/tst-tagged-address-3-static.c create mode 100644 misc/tst-tagged-address-3.c create mode 100644 misc/tst-tagged-address-4-static.c create mode 100644 misc/tst-tagged-address-4.c create mode 100644 misc/tst-tagged-address-5.c create mode 100644 misc/tst-tagged-address-6.c create mode 100644 misc/tst-tagged-address-7.c create mode 100644 misc/tst-tagged-address-mod-5.c create mode 100644 misc/tst-tagged-address-mod-6.c create mode 100644 misc/tst-tagged-address-mod-7.c create mode 100644 sysdeps/generic/inline-tagged-address.h