linux: Use fchmodat2 on fchmod for flags different than 0 (BZ 26401)
[glibc.git] / support / support_set_vma_name_supported.c
blob712caa9b9bd28d8761e1c99a8d1b0c7e79ba52a0
1 /* Check if kernel supports set VMA range name.
2 Copyright (C) 2023 Free Software Foundation, Inc.
3 This file is part of the GNU C Library.
5 The GNU C Library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
10 The GNU C Library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
15 You should have received a copy of the GNU Lesser General Public
16 License along with the GNU C Library; if not, see
17 <https://www.gnu.org/licenses/>. */
19 #include <support/check.h>
20 #include <support/support.h>
21 #include <support/xunistd.h>
22 #include <sys/mman.h>
23 #ifdef __linux__
24 # include <sys/prctl.h>
25 #endif
27 bool
28 support_set_vma_name_supported (void)
30 #ifdef __linux__
31 size_t size = sysconf (_SC_PAGESIZE);
32 if (size == -1)
33 FAIL_EXIT1 ("sysconf (_SC_PAGESIZE): %m\n");
35 void *vma = xmmap (0,
36 size,
37 PROT_NONE,
38 MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE,
39 -1);
41 int r = prctl (PR_SET_VMA, PR_SET_VMA_ANON_NAME, vma, size, "vmaname");
43 xmunmap (vma, size);
45 return r == 0;
46 #else
47 return false;
48 #endif