aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2024-09-24 13:23:10 +0200
committerFlorian Weimer <fweimer@redhat.com>2024-09-24 13:23:10 +0200
commit7e21a65c58cc91b3bac5f45838ee4278acf1cc45 (patch)
treee929c21b5dd8cade5007087e7acb43c25dde8739
parent3ef26b708725b528a1c69ab3eb523036c50b89d6 (diff)
downloadglibc-7e21a65c58cc91b3bac5f45838ee4278acf1cc45.zip
glibc-7e21a65c58cc91b3bac5f45838ee4278acf1cc45.tar.gz
glibc-7e21a65c58cc91b3bac5f45838ee4278acf1cc45.tar.bz2
misc: Enable internal use of memory protection keys
This adds the necessary hidden prototypes.
-rw-r--r--sysdeps/unix/sysv/linux/include/bits/mman-shared.h16
-rw-r--r--sysdeps/unix/sysv/linux/pkey_get.c5
-rw-r--r--sysdeps/unix/sysv/linux/pkey_mprotect.c4
-rw-r--r--sysdeps/unix/sysv/linux/pkey_set.c5
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc64/pkey_get.c4
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc64/pkey_set.c4
-rw-r--r--sysdeps/unix/sysv/linux/syscalls.list4
-rw-r--r--sysdeps/unix/sysv/linux/x86/pkey_get.c5
-rw-r--r--sysdeps/unix/sysv/linux/x86/pkey_set.c5
9 files changed, 43 insertions, 9 deletions
diff --git a/sysdeps/unix/sysv/linux/include/bits/mman-shared.h b/sysdeps/unix/sysv/linux/include/bits/mman-shared.h
new file mode 100644
index 0000000..7c14b5d
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/include/bits/mman-shared.h
@@ -0,0 +1,16 @@
+#include <sysdeps/unix/sysv/linux/bits/mman-shared.h>
+
+#ifndef _ISOMAC
+
+extern __typeof (pkey_alloc) __pkey_alloc;
+libc_hidden_proto (__pkey_alloc)
+extern __typeof (pkey_free) __pkey_free;
+libc_hidden_proto (__pkey_free)
+extern __typeof (pkey_mprotect) __pkey_mprotect;
+libc_hidden_proto (__pkey_mprotect)
+extern __typeof (pkey_get) __pkey_get;
+libc_hidden_proto (__pkey_get)
+extern __typeof (pkey_set) __pkey_set;
+libc_hidden_proto (__pkey_set)
+
+#endif
diff --git a/sysdeps/unix/sysv/linux/pkey_get.c b/sysdeps/unix/sysv/linux/pkey_get.c
index 743bd09..ed9b629 100644
--- a/sysdeps/unix/sysv/linux/pkey_get.c
+++ b/sysdeps/unix/sysv/linux/pkey_get.c
@@ -17,10 +17,13 @@
<https://www.gnu.org/licenses/>. */
#include <errno.h>
+#include <sys/mman.h>
int
-pkey_get (int key)
+__pkey_get (int key)
{
__set_errno (ENOSYS);
return -1;
}
+libc_hidden_def (__pkey_get)
+weak_alias (__pkey_get, pkey_get)
diff --git a/sysdeps/unix/sysv/linux/pkey_mprotect.c b/sysdeps/unix/sysv/linux/pkey_mprotect.c
index b7afa79..e321a7e 100644
--- a/sysdeps/unix/sysv/linux/pkey_mprotect.c
+++ b/sysdeps/unix/sysv/linux/pkey_mprotect.c
@@ -22,7 +22,7 @@
#include <sysdep.h>
int
-pkey_mprotect (void *addr, size_t len, int prot, int pkey)
+__pkey_mprotect (void *addr, size_t len, int prot, int pkey)
{
if (pkey == -1)
/* If the key is -1, the system call is precisely equivalent to
@@ -30,3 +30,5 @@ pkey_mprotect (void *addr, size_t len, int prot, int pkey)
return __mprotect (addr, len, prot);
return INLINE_SYSCALL_CALL (pkey_mprotect, addr, len, prot, pkey);
}
+libc_hidden_def (__pkey_mprotect)
+weak_alias (__pkey_mprotect, pkey_mprotect)
diff --git a/sysdeps/unix/sysv/linux/pkey_set.c b/sysdeps/unix/sysv/linux/pkey_set.c
index d5d59e3..30463ef 100644
--- a/sysdeps/unix/sysv/linux/pkey_set.c
+++ b/sysdeps/unix/sysv/linux/pkey_set.c
@@ -17,10 +17,13 @@
<https://www.gnu.org/licenses/>. */
#include <errno.h>
+#include <sys/mman.h>
int
-pkey_set (int key, unsigned int access_rights)
+__pkey_set (int key, unsigned int access_rights)
{
__set_errno (ENOSYS);
return -1;
}
+libc_hidden_def (__pkey_set)
+weak_alias (__pkey_set, pkey_set)
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/pkey_get.c b/sysdeps/unix/sysv/linux/powerpc/powerpc64/pkey_get.c
index 217ecd0..ac9ea3a 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/pkey_get.c
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/pkey_get.c
@@ -21,7 +21,7 @@
#include <sys/mman.h>
int
-pkey_get (int key)
+__pkey_get (int key)
{
if (key < 0 || key > PKEY_MAX)
{
@@ -40,3 +40,5 @@ pkey_get (int key)
return PKEY_DISABLE_WRITE;
return 0;
}
+libc_hidden_def (__pkey_get)
+weak_alias (__pkey_get, pkey_get)
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/pkey_set.c b/sysdeps/unix/sysv/linux/powerpc/powerpc64/pkey_set.c
index cc67b0a..ac10b5d 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/pkey_set.c
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/pkey_set.c
@@ -21,7 +21,7 @@
#include <sys/mman.h>
int
-pkey_set (int key, unsigned int rights)
+__pkey_set (int key, unsigned int rights)
{
if (key < 0 || key > PKEY_MAX || rights > 3)
{
@@ -46,3 +46,5 @@ pkey_set (int key, unsigned int rights)
pkey_write (amr);
return 0;
}
+libc_hidden_def (__pkey_set)
+weak_alias (__pkey_set, pkey_set)
diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list
index 9ac42c3..f1cfe8d 100644
--- a/sysdeps/unix/sysv/linux/syscalls.list
+++ b/sysdeps/unix/sysv/linux/syscalls.list
@@ -102,8 +102,8 @@ name_to_handle_at EXTRA name_to_handle_at i:isppi name_to_handle_at
setns EXTRA setns i:ii setns
memfd_create EXTRA memfd_create i:si memfd_create
-pkey_alloc EXTRA pkey_alloc i:ii pkey_alloc
-pkey_free EXTRA pkey_free i:i pkey_free
+pkey_alloc EXTRA pkey_alloc i:ii __pkey_alloc pkey_alloc
+pkey_free EXTRA pkey_free i:i __pkey_free pkey_free
gettid EXTRA gettid Ei: __gettid gettid
tgkill EXTRA tgkill i:iii __tgkill tgkill
close_range - close_range i:iii __close_range close_range
diff --git a/sysdeps/unix/sysv/linux/x86/pkey_get.c b/sysdeps/unix/sysv/linux/x86/pkey_get.c
index eb988a5..0fb52ba 100644
--- a/sysdeps/unix/sysv/linux/x86/pkey_get.c
+++ b/sysdeps/unix/sysv/linux/x86/pkey_get.c
@@ -18,9 +18,10 @@
#include <arch-pkey.h>
#include <errno.h>
+#include <sys/mman.h>
int
-pkey_get (int key)
+__pkey_get (int key)
{
if (key < 0 || key > 15)
{
@@ -31,3 +32,5 @@ pkey_get (int key)
return (pkru >> (2 * key)) & 3;
return 0;
}
+libc_hidden_def (__pkey_get)
+weak_alias (__pkey_get, pkey_get)
diff --git a/sysdeps/unix/sysv/linux/x86/pkey_set.c b/sysdeps/unix/sysv/linux/x86/pkey_set.c
index 3fd2c95..51e3d68 100644
--- a/sysdeps/unix/sysv/linux/x86/pkey_set.c
+++ b/sysdeps/unix/sysv/linux/x86/pkey_set.c
@@ -18,9 +18,10 @@
#include <arch-pkey.h>
#include <errno.h>
+#include <sys/mman.h>
int
-pkey_set (int key, unsigned int rights)
+__pkey_set (int key, unsigned int rights)
{
if (key < 0 || key > 15 || rights > 3)
{
@@ -33,3 +34,5 @@ pkey_set (int key, unsigned int rights)
pkey_write (pkru);
return 0;
}
+libc_hidden_def (__pkey_set)
+weak_alias (__pkey_set, pkey_set)