Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
2a8c3a64
Commit
2a8c3a64
authored
Feb 22, 2021
by
Petr Mladek
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'for-5.12-no_hash_pointers' into for-linus
parents
8a8109f3
5ead723a
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
72 additions
and
12 deletions
+72
-12
Documentation/admin-guide/kernel-parameters.txt
Documentation/admin-guide/kernel-parameters.txt
+15
-0
lib/test_bitmap.c
lib/test_bitmap.c
+1
-2
lib/test_printf.c
lib/test_printf.c
+10
-2
lib/vsprintf.c
lib/vsprintf.c
+34
-2
tools/testing/selftests/kselftest_module.h
tools/testing/selftests/kselftest_module.h
+12
-6
No files found.
Documentation/admin-guide/kernel-parameters.txt
View file @
2a8c3a64
...
...
@@ -3281,6 +3281,21 @@
in certain environments such as networked servers or
real-time systems.
no_hash_pointers
Force pointers printed to the console or buffers to be
unhashed. By default, when a pointer is printed via %p
format string, that pointer is "hashed", i.e. obscured
by hashing the pointer value. This is a security feature
that hides actual kernel addresses from unprivileged
users, but it also makes debugging the kernel more
difficult since unequal pointers can no longer be
compared. However, if this command-line option is
specified, then all normal pointers will have their true
value printed. Pointers printed via %pK may still be
hashed. This option should only be specified when
debugging the kernel. Please do not use on production
kernels.
nohibernate [HIBERNATION] Disable hibernation and resume.
nohz= [KNL] Boottime enable/disable dynamic ticks
...
...
lib/test_bitmap.c
View file @
2a8c3a64
...
...
@@ -16,8 +16,7 @@
#include "../tools/testing/selftests/kselftest_module.h"
static
unsigned
total_tests
__initdata
;
static
unsigned
failed_tests
__initdata
;
KSTM_MODULE_GLOBALS
();
static
char
pbl_buffer
[
PAGE_SIZE
]
__initdata
;
...
...
lib/test_printf.c
View file @
2a8c3a64
...
...
@@ -30,11 +30,13 @@
#define PAD_SIZE 16
#define FILL_CHAR '$'
static
unsigned
total_tests
__initdata
;
static
unsigned
failed_tests
__initdata
;
KSTM_MODULE_GLOBALS
()
;
static
char
*
test_buffer
__initdata
;
static
char
*
alloced_buffer
__initdata
;
extern
bool
no_hash_pointers
;
static
int
__printf
(
4
,
0
)
__init
do_test
(
int
bufsize
,
const
char
*
expect
,
int
elen
,
const
char
*
fmt
,
va_list
ap
)
...
...
@@ -301,6 +303,12 @@ plain(void)
{
int
err
;
if
(
no_hash_pointers
)
{
pr_warn
(
"skipping plain 'p' tests"
);
skipped_tests
+=
2
;
return
;
}
err
=
plain_hash
();
if
(
err
)
{
pr_warn
(
"plain 'p' does not appear to be hashed
\n
"
);
...
...
lib/vsprintf.c
View file @
2a8c3a64
...
...
@@ -2090,6 +2090,32 @@ char *fwnode_string(char *buf, char *end, struct fwnode_handle *fwnode,
return
widen_string
(
buf
,
buf
-
buf_start
,
end
,
spec
);
}
/* Disable pointer hashing if requested */
bool
no_hash_pointers
__ro_after_init
;
EXPORT_SYMBOL_GPL
(
no_hash_pointers
);
static
int
__init
no_hash_pointers_enable
(
char
*
str
)
{
no_hash_pointers
=
true
;
pr_warn
(
"**********************************************************
\n
"
);
pr_warn
(
"** NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE **
\n
"
);
pr_warn
(
"** **
\n
"
);
pr_warn
(
"** This system shows unhashed kernel memory addresses **
\n
"
);
pr_warn
(
"** via the console, logs, and other interfaces. This **
\n
"
);
pr_warn
(
"** might reduce the security of your system. **
\n
"
);
pr_warn
(
"** **
\n
"
);
pr_warn
(
"** If you see this message and you are not debugging **
\n
"
);
pr_warn
(
"** the kernel, report this immediately to your system **
\n
"
);
pr_warn
(
"** administrator! **
\n
"
);
pr_warn
(
"** **
\n
"
);
pr_warn
(
"** NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE **
\n
"
);
pr_warn
(
"**********************************************************
\n
"
);
return
0
;
}
early_param
(
"no_hash_pointers"
,
no_hash_pointers_enable
);
/*
* Show a '%p' thing. A kernel extension is that the '%p' is followed
* by an extra set of alphanumeric characters that are extended format
...
...
@@ -2297,8 +2323,14 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
}
}
/* default is to _not_ leak addresses, hash before printing */
return
ptr_to_id
(
buf
,
end
,
ptr
,
spec
);
/*
* default is to _not_ leak addresses, so hash before printing,
* unless no_hash_pointers is specified on the command line.
*/
if
(
unlikely
(
no_hash_pointers
))
return
pointer_string
(
buf
,
end
,
ptr
,
spec
);
else
return
ptr_to_id
(
buf
,
end
,
ptr
,
spec
);
}
/*
...
...
tools/testing/selftests/kselftest_module.h
View file @
2a8c3a64
...
...
@@ -11,7 +11,8 @@
#define KSTM_MODULE_GLOBALS() \
static unsigned int total_tests __initdata; \
static unsigned int failed_tests __initdata
static unsigned int failed_tests __initdata; \
static unsigned int skipped_tests __initdata
#define KSTM_CHECK_ZERO(x) do { \
total_tests++; \
...
...
@@ -21,11 +22,16 @@ static unsigned int failed_tests __initdata
} \
} while (0)
static
inline
int
kstm_report
(
unsigned
int
total_tests
,
unsigned
int
failed_tests
)
static
inline
int
kstm_report
(
unsigned
int
total_tests
,
unsigned
int
failed_tests
,
unsigned
int
skipped_tests
)
{
if
(
failed_tests
==
0
)
pr_info
(
"all %u tests passed
\n
"
,
total_tests
);
else
if
(
failed_tests
==
0
)
{
if
(
skipped_tests
)
{
pr_info
(
"skipped %u tests
\n
"
,
skipped_tests
);
pr_info
(
"remaining %u tests passed
\n
"
,
total_tests
);
}
else
pr_info
(
"all %u tests passed
\n
"
,
total_tests
);
}
else
pr_warn
(
"failed %u out of %u tests
\n
"
,
failed_tests
,
total_tests
);
return
failed_tests
?
-
EINVAL
:
0
;
...
...
@@ -36,7 +42,7 @@ static int __init __module##_init(void) \
{ \
pr_info("loaded.\n"); \
selftest(); \
return kstm_report(total_tests, failed_tests); \
return kstm_report(total_tests, failed_tests
, skipped_tests
); \
} \
static void __exit __module##_exit(void) \
{ \
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment