![Jiri Kosina](/assets/img/avatar_default.png)
We give up old_addr hint from the coming patch module in cases when kernel load base has been randomized (as in such case, the coming module has no idea about the exact randomization offset). We are currently too pessimistic, and give up immediately as soon as CONFIG_RANDOMIZE_BASE is set; this doesn't however directly imply that the load base has actually been randomized. There are config options that disable kASLR (such as hibernation), user could have disabled kaslr on kernel command-line, etc. The loader propagates the information whether kernel has been randomized through bootparams. This allows us to have the condition more accurate. On top of that, it seems unnecessary to give up old_addr hints even if randomization is active. The relocation offset can be computed using kaslr_ofsset(), and therefore old_addr can be adjusted accordingly. Acked-by: Josh Poimboeuf <jpoimboe@redhat.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
48 lines
1.4 KiB
C
48 lines
1.4 KiB
C
/*
|
|
* livepatch.h - x86-specific Kernel Live Patching Core
|
|
*
|
|
* Copyright (C) 2014 Seth Jennings <sjenning@redhat.com>
|
|
* Copyright (C) 2014 SUSE
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef _ASM_X86_LIVEPATCH_H
|
|
#define _ASM_X86_LIVEPATCH_H
|
|
|
|
#include <asm/setup.h>
|
|
#include <linux/module.h>
|
|
#include <linux/ftrace.h>
|
|
|
|
#ifdef CONFIG_LIVEPATCH
|
|
static inline int klp_check_compiler_support(void)
|
|
{
|
|
#ifndef CC_USING_FENTRY
|
|
return 1;
|
|
#endif
|
|
return 0;
|
|
}
|
|
int klp_write_module_reloc(struct module *mod, unsigned long type,
|
|
unsigned long loc, unsigned long value);
|
|
|
|
static inline void klp_arch_set_pc(struct pt_regs *regs, unsigned long ip)
|
|
{
|
|
regs->ip = ip;
|
|
}
|
|
#else
|
|
#error Live patching support is disabled; check CONFIG_LIVEPATCH
|
|
#endif
|
|
|
|
#endif /* _ASM_X86_LIVEPATCH_H */
|