mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 03:36:19 +00:00
kprobes/x86: Fix to add __kprobes to in-kernel fault handing functions
Add __kprobes to the functions which handle in-kernel fixable page faults. Since kprobes can cause those in-kernel page faults by accessing kprobe data structures, probing those fault functions will cause fault-int3-loop (do_page_fault has already been marked as __kprobes). Signed-off-by: Masami Hiramatsu <mhiramat@redhat.com> Acked-by: Ananth N Mavinakayanahalli <ananth@in.ibm.com> Cc: Ingo Molnar <mingo@elte.hu> LKML-Reference: <20090827172311.8246.92725.stgit@localhost.localdomain> Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
This commit is contained in:
parent
f5ad31158d
commit
62c9295f9d
1 changed files with 6 additions and 5 deletions
|
@ -38,7 +38,8 @@ enum x86_pf_error_code {
|
||||||
* Returns 0 if mmiotrace is disabled, or if the fault is not
|
* Returns 0 if mmiotrace is disabled, or if the fault is not
|
||||||
* handled by mmiotrace:
|
* handled by mmiotrace:
|
||||||
*/
|
*/
|
||||||
static inline int kmmio_fault(struct pt_regs *regs, unsigned long addr)
|
static inline int __kprobes
|
||||||
|
kmmio_fault(struct pt_regs *regs, unsigned long addr)
|
||||||
{
|
{
|
||||||
if (unlikely(is_kmmio_active()))
|
if (unlikely(is_kmmio_active()))
|
||||||
if (kmmio_handler(regs, addr) == 1)
|
if (kmmio_handler(regs, addr) == 1)
|
||||||
|
@ -46,7 +47,7 @@ static inline int kmmio_fault(struct pt_regs *regs, unsigned long addr)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int notify_page_fault(struct pt_regs *regs)
|
static inline int __kprobes notify_page_fault(struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
|
@ -239,7 +240,7 @@ void vmalloc_sync_all(void)
|
||||||
*
|
*
|
||||||
* Handle a fault on the vmalloc or module mapping area
|
* Handle a fault on the vmalloc or module mapping area
|
||||||
*/
|
*/
|
||||||
static noinline int vmalloc_fault(unsigned long address)
|
static noinline __kprobes int vmalloc_fault(unsigned long address)
|
||||||
{
|
{
|
||||||
unsigned long pgd_paddr;
|
unsigned long pgd_paddr;
|
||||||
pmd_t *pmd_k;
|
pmd_t *pmd_k;
|
||||||
|
@ -361,7 +362,7 @@ void vmalloc_sync_all(void)
|
||||||
*
|
*
|
||||||
* This assumes no large pages in there.
|
* This assumes no large pages in there.
|
||||||
*/
|
*/
|
||||||
static noinline int vmalloc_fault(unsigned long address)
|
static noinline __kprobes int vmalloc_fault(unsigned long address)
|
||||||
{
|
{
|
||||||
pgd_t *pgd, *pgd_ref;
|
pgd_t *pgd, *pgd_ref;
|
||||||
pud_t *pud, *pud_ref;
|
pud_t *pud, *pud_ref;
|
||||||
|
@ -858,7 +859,7 @@ static int spurious_fault_check(unsigned long error_code, pte_t *pte)
|
||||||
* There are no security implications to leaving a stale TLB when
|
* There are no security implications to leaving a stale TLB when
|
||||||
* increasing the permissions on a page.
|
* increasing the permissions on a page.
|
||||||
*/
|
*/
|
||||||
static noinline int
|
static noinline __kprobes int
|
||||||
spurious_fault(unsigned long error_code, unsigned long address)
|
spurious_fault(unsigned long error_code, unsigned long address)
|
||||||
{
|
{
|
||||||
pgd_t *pgd;
|
pgd_t *pgd;
|
||||||
|
|
Loading…
Reference in a new issue