GDBserver
linux-personality.c
Go to the documentation of this file.
1 /* Disable address space randomization based on inferior personality.
2 
3  Copyright (C) 2008-2018 Free Software Foundation, Inc.
4 
5  This file is part of GDB.
6 
7  This program is free software; you can redistribute it and/or modify
8  it under the terms of the GNU General Public License as published by
9  the Free Software Foundation; either version 3 of the License, or
10  (at your option) any later version.
11 
12  This program is distributed in the hope that it will be useful,
13  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  GNU General Public License for more details.
16 
17  You should have received a copy of the GNU General Public License
18  along with this program. If not, see <http://www.gnu.org/licenses/>. */
19 
20 #include "common-defs.h"
21 #include "nat/linux-personality.h"
22 
23 #ifdef HAVE_PERSONALITY
24 # include <sys/personality.h>
25 # if !HAVE_DECL_ADDR_NO_RANDOMIZE
26 # define ADDR_NO_RANDOMIZE 0x0040000
27 # endif /* ! HAVE_DECL_ADDR_NO_RANDOMIZE */
28 #endif /* HAVE_PERSONALITY */
29 
30 /* See comment on nat/linux-personality.h. */
31 
34  : m_personality_set (false),
35  m_personality_orig (0)
36 {
37 #ifdef HAVE_PERSONALITY
39  {
40  errno = 0;
41  m_personality_orig = personality (0xffffffff);
42  if (errno == 0 && !(m_personality_orig & ADDR_NO_RANDOMIZE))
43  {
44  m_personality_set = true;
45  personality (m_personality_orig | ADDR_NO_RANDOMIZE);
46  }
47  if (errno != 0 || (m_personality_set
48  && !(personality (0xffffffff) & ADDR_NO_RANDOMIZE)))
49  warning (_("Error disabling address space randomization: %s"),
51  }
52 #endif /* HAVE_PERSONALITY */
53 }
54 
57 {
58 #ifdef HAVE_PERSONALITY
59 
61  {
62  errno = 0;
63  personality (m_personality_orig);
64  if (errno != 0)
65  warning (_("Error restoring address space randomization: %s"),
67  }
68 #endif /* HAVE_PERSONALITY */
69 }
maybe_disable_address_space_randomization(int disable_randomization)
void warning(const char *fmt,...)
Definition: errors.c:26
#define _(String)
Definition: gdb_locale.h:35
int disable_randomization
Definition: server.c:109
#define errno
Definition: wincecompat.h:24
char * safe_strerror(int)