1 /* 2 * Copyright (C) 2013 The Android Open Source Project 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * * Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * * Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in 12 * the documentation and/or other materials provided with the 13 * distribution. 14 * 15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 17 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 18 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 19 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 20 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 21 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 22 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 23 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 24 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 25 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26 * SUCH DAMAGE. 27 */ 28 29 #include "private/bionic_name_mem.h" 30 31 /* 32 * Local definitions of custom prctl arguments to set a vma name in some kernels 33 */ 34 #define BIONIC_PR_SET_VMA 0x53564d41 35 #define BIONIC_PR_SET_VMA_ANON_NAME 0 36 37 /* 38 * Names a region of memory. The name is expected to show up in /proc/pid/maps 39 * and /proc/pid/smaps. There is no guarantee that it will work, and it if it 40 * does work it is likely to only work on memory that was allocated with 41 * mmap(MAP_ANONYMOUS), and only on regions that are page aligned. name should 42 * be a pointer to a string that is valid for as long as the memory is mapped, 43 * preferably a compile-time constant string. 44 * 45 * Returns -1 on error and sets errno. If it returns an error naming page 46 * aligned anonymous memory the kernel doesn't support naming, and an alternate 47 * method of naming memory should be used (like ashmem). 48 */ 49 int __bionic_name_mem(void *addr, size_t len, const char *name) 50 { 51 return prctl(BIONIC_PR_SET_VMA, BIONIC_PR_SET_VMA_ANON_NAME, 52 addr, len, name); 53 } 54