Fix sparce warnings for kprobe module
authorAlexander Aksenov <a.aksenov@samsung.com>
Tue, 12 Feb 2013 12:00:15 +0000 (16:00 +0400)
committerAlexander Aksenov <a.aksenov@samsung.com>
Tue, 12 Feb 2013 12:00:15 +0000 (16:00 +0400)
12 files changed:
kprobe/arch/asm-arm/dbi_kprobes.c
kprobe/arch/asm-mips/dbi_kprobes.c
kprobe/arch/asm-x86/dbi_kprobes.c
kprobe/arch/dbi_kprobes.c
kprobe/dbi_insn_slots.c
kprobe/dbi_insn_slots.h
kprobe/dbi_kprobes.c
kprobe/dbi_kprobes.h
kprobe/dbi_kprobes_deps.c
kprobe/dbi_kprobes_deps.h
kprobe/dbi_uprobes.c
kprobe/dbi_uprobes.h

index 92c524d..77434f1 100644 (file)
@@ -34,6 +34,7 @@
 
 #include "dbi_kprobes.h"
 #include "../dbi_kprobes.h"
+#include "../../dbi_kprobes.h"
 
 #include "../../dbi_kdebug.h"
 #include "../../dbi_insn_slots.h"
 
 #define SUPRESS_BUG_MESSAGES
 
-extern unsigned long sched_addr;
-extern unsigned long fork_addr;
-
 extern struct kprobe * per_cpu__current_kprobe;
-extern spinlock_t kretprobe_lock;
-extern struct kretprobe *sched_rp;
-
-extern struct hlist_head kprobe_insn_pages;
-extern struct hlist_head uprobe_insn_pages;
-
-extern struct kprobe *kprobe_running(void);
-extern void reset_current_kprobe(void);
-extern struct kprobe_ctlblk *get_kprobe_ctlblk(void);
-extern struct kprobe * current_kprobe;
-
 extern struct hlist_head kprobe_table[KPROBE_TABLE_SIZE];
 
 #ifdef OVERHEAD_DEBUG
@@ -87,7 +74,7 @@ static kprobe_opcode_t get_addr_b(kprobe_opcode_t insn, kprobe_opcode_t *addr)
        return (kprobe_opcode_t)((long)addr + 8 + branch_displacement(insn));
 }
 
-unsigned int arr_traps_template[] = {
+static unsigned int arr_traps_template[] = {
                0xe1a0c00d,    // mov          ip, sp
                0xe92dd800,    // stmdb        sp!, {fp, ip, lr, pc}
                0xe24cb004,    // sub          fp, ip, #4      ; 0x4
@@ -99,14 +86,14 @@ unsigned int arr_traps_template[] = {
 };
 
 
-struct kprobe trampoline_p =
+static struct kprobe trampoline_p =
 {
        .addr = (kprobe_opcode_t *) & kretprobe_trampoline,
        .pre_handler = trampoline_probe_handler
 };
 
 // is instruction Thumb2 and NOT a branch, etc...
-int isThumb2(kprobe_opcode_t insn)
+static int isThumb2(kprobe_opcode_t insn)
 {
        if((    (insn & 0xf800) == 0xe800 ||
                (insn & 0xf800) == 0xf000 ||
@@ -115,7 +102,7 @@ int isThumb2(kprobe_opcode_t insn)
 }
 
 
-int prep_pc_dep_insn_execbuf (kprobe_opcode_t * insns, kprobe_opcode_t insn, int uregs)
+static int prep_pc_dep_insn_execbuf (kprobe_opcode_t * insns, kprobe_opcode_t insn, int uregs)
 {
        int i;
 
@@ -180,7 +167,7 @@ int prep_pc_dep_insn_execbuf (kprobe_opcode_t * insns, kprobe_opcode_t insn, int
 
 
 
-int prep_pc_dep_insn_execbuf_thumb (kprobe_opcode_t * insns, kprobe_opcode_t insn, int uregs)
+static int prep_pc_dep_insn_execbuf_thumb (kprobe_opcode_t * insns, kprobe_opcode_t insn, int uregs)
 {
        unsigned char mreg = 0;
        unsigned char reg = 0;
@@ -403,7 +390,7 @@ int prep_pc_dep_insn_execbuf_thumb (kprobe_opcode_t * insns, kprobe_opcode_t ins
 
 
 
-int arch_check_insn_arm (struct arch_specific_insn *ainsn)
+static int arch_check_insn_arm (struct arch_specific_insn *ainsn)
 {
        int ret = 0;
 
@@ -448,7 +435,7 @@ int arch_check_insn_arm (struct arch_specific_insn *ainsn)
        return ret;
 }
 
-int arch_check_insn_thumb (struct arch_specific_insn *ainsn)
+static int arch_check_insn_thumb (struct arch_specific_insn *ainsn)
 {
        int ret = 0;
 
@@ -674,8 +661,8 @@ int arch_prepare_uprobe (struct kprobe *p, struct task_struct *task, int atomic)
                return -EFAULT;
        }
        if ((p->safe_arm == -1) && (p->safe_thumb == -1)) {
-               printk("Error in %s at %d: failed arch_copy_trampoline_*_uprobe() (both) [tgid=%u, addr=%x, data=%x]\n",
-                               __FILE__, __LINE__, task->tgid, p->addr, p->opcode);
+               printk("Error in %s at %d: failed arch_copy_trampoline_*_uprobe() (both) [tgid=%u, addr=%lx, data=%lx]\n",
+                               __FILE__, __LINE__, task->tgid, (unsigned long)p->addr, (unsigned long)p->opcode);
                if (!write_proc_vm_atomic (task, (unsigned long) p->addr, &p->opcode, sizeof (p->opcode)))
                        panic ("Failed to write memory %p!\n", p->addr);
                free_insn_slot(&uprobe_insn_pages, task, p->ainsn.insn_arm);
@@ -1060,7 +1047,7 @@ int kprobe_handler(struct pt_regs *regs)
 
        struct kprobe *p = NULL, *p_run = NULL;
        int ret = 0, retprobe = 0, reenter = 0;
-       kprobe_opcode_t *ssaddr = 0;
+       kprobe_opcode_t *ssaddr = NULL;
        struct kprobe_ctlblk *kcb;
 
 #ifdef SUPRESS_BUG_MESSAGES
@@ -1538,18 +1525,18 @@ void  __arch_prepare_kretprobe (struct kretprobe *rp, struct pt_regs *regs)
 }
 
 
-int asm_init_module_dependencies()
+int asm_init_module_dependencies(void)
 {
        //No module dependencies
        return 0;
 }
 
-
-void (* do_kpro)(struct undef_hook *);
-void (* undo_kpro)(struct undef_hook *);
+typedef void (* kpro_type)(struct undef_hook *);
+static kpro_type do_kpro;
+static kpro_type undo_kpro;
 
 // kernel probes hook
-struct undef_hook undef_ho_k = {
+static struct undef_hook undef_ho_k = {
     .instr_mask        = 0xffffffff,
     .instr_val = BREAKPOINT_INSTRUCTION,
     .cpsr_mask = MODE_MASK,
@@ -1558,7 +1545,7 @@ struct undef_hook undef_ho_k = {
 };
 
 // userspace probes hook (arm)
-struct undef_hook undef_ho_u = {
+static struct undef_hook undef_ho_u = {
     .instr_mask        = 0xffffffff,
     .instr_val = BREAKPOINT_INSTRUCTION,
     .cpsr_mask = MODE_MASK,
@@ -1567,7 +1554,7 @@ struct undef_hook undef_ho_u = {
 };
 
 // userspace probes hook (thumb)
-struct undef_hook undef_ho_u_t = {
+static struct undef_hook undef_ho_u_t = {
     .instr_mask        = 0xffffffff,
     .instr_val = BREAKPOINT_INSTRUCTION & 0x0000ffff,
     .cpsr_mask = MODE_MASK,
@@ -1593,15 +1580,15 @@ int __init arch_init_kprobes (void)
         }
        arr_traps_template[NOTIFIER_CALL_CHAIN_INDEX] = arch_construct_brunch ((unsigned int)kprobe_handler, do_bp_handler + NOTIFIER_CALL_CHAIN_INDEX * 4, 1);
        // Register hooks (kprobe_handler)
-       do_kpro = swap_ksyms("register_undef_hook");
-       if (do_kpro == 0) {
+       do_kpro = (kpro_type)swap_ksyms("register_undef_hook");
+       if (do_kpro == NULL) {
                printk("no register_undef_hook symbol found!\n");
                 return -1;
         }
 
         // Unregister hooks (kprobe_handler)
-        undo_kpro = swap_ksyms("unregister_undef_hook");
-        if (undo_kpro == 0) {
+        undo_kpro = (kpro_type)swap_ksyms("unregister_undef_hook");
+        if (undo_kpro == NULL) {
                 printk("no unregister_undef_hook symbol found!\n");
                 return -1;
         }
index ac97010..8ebc022 100644 (file)
 
 unsigned int *arr_traps_original;
 
-extern unsigned long sched_addr;
-
 extern struct kprobe * per_cpu__current_kprobe;
-extern spinlock_t kretprobe_lock;
-extern struct kretprobe *sched_rp;
-
-extern struct hlist_head kprobe_insn_pages;
-extern struct hlist_head uprobe_insn_pages;
-
-extern struct kprobe *kprobe_running (void);
-extern struct kprobe_ctlblk *get_kprobe_ctlblk (void);
-extern void reset_current_kprobe (void);
 
 #ifdef OVERHEAD_DEBUG
 unsigned long swap_sum_time = 0;
index 5771243..28cb30f 100644 (file)
 
 #define SUPRESS_BUG_MESSAGES
 
-extern unsigned long sched_addr;
 extern unsigned long exit_addr;
-extern unsigned long fork_addr;
 
 extern struct kprobe * per_cpu__current_kprobe;
 
 extern struct kprobe * per_cpu__current_kprobe;
-extern spinlock_t kretprobe_lock;
-extern struct kretprobe *sched_rp;
 
-extern struct hlist_head kprobe_insn_pages;
-extern struct hlist_head uprobe_insn_pages;
-
-extern spinlock_t kretprobe_lock;
-
-extern struct kprobe *kprobe_running (void);
-extern struct kprobe_ctlblk *get_kprobe_ctlblk (void);
-extern void reset_current_kprobe (void);
 extern struct kprobe * current_kprobe;
 
 #ifdef OVERHEAD_DEBUG
index 8c3ec7f..88fb2d1 100644 (file)
 #include <ksyms.h>
 
 
-extern unsigned long sched_addr;
-extern unsigned long fork_addr;
-
-extern struct hlist_head kprobe_insn_pages;
-extern struct hlist_head uprobe_insn_pages;
-
-
 void arch_remove_kprobe (struct kprobe *p, struct task_struct *task)
 {
        // TODO: check boostable for x86 and MIPS
@@ -105,7 +98,7 @@ void arch_disarm_uretprobe (struct kretprobe *p, struct task_struct *tsk)
 {
 }
 
-int arch_init_module_dependencies()
+int arch_init_module_dependencies(void)
 {
        sched_addr = swap_ksyms("__switch_to");
        fork_addr = swap_ksyms("do_fork");
index b98672a..c912577 100644 (file)
@@ -61,7 +61,6 @@ extern unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
                         unsigned long len, unsigned long prot,
                         unsigned long flags, unsigned long pgoff);
 
-extern struct hlist_head uprobe_insn_slot_table[KPROBE_TABLE_SIZE];
 
 struct hlist_head kprobe_insn_pages;
 struct hlist_head uprobe_insn_pages;
@@ -171,7 +170,7 @@ static unsigned long alloc_user_pages(struct task_struct *task, unsigned long le
                }
                // FIXME: its seems to be bad decision to replace 'current' pointer temporarily
                current_thread_info()->task = task;
-               ret = do_mmap_pgoff(0, 0, len, prot, flags, 0);
+               ret = do_mmap_pgoff(NULL, 0, len, prot, flags, 0);
                current_thread_info()->task = otask;
                if (!atomic) {
                        downgrade_write (&mm->mmap_sem);
index 777c294..a18c520 100644 (file)
@@ -54,5 +54,7 @@
 kprobe_opcode_t *get_insn_slot(struct task_struct *task, int atomic);
 void free_insn_slot(struct hlist_head *page_list, struct task_struct *task, kprobe_opcode_t *slot);
 
+extern struct hlist_head kprobe_insn_pages;
+extern struct hlist_head uprobe_insn_pages;
 
 #endif /*  _SRC_INSNS_SLOTS_H */
index 9d52be2..e7b1714 100644 (file)
 #include <linux/pagemap.h>
 
 
-
-extern unsigned long sched_addr;
-extern unsigned long fork_addr;
-extern struct hlist_head kprobe_insn_pages;
-
 DEFINE_PER_CPU (struct kprobe *, current_kprobe) = NULL;
-DEFINE_PER_CPU (struct kprobe_ctlblk, kprobe_ctlblk);
+static DEFINE_PER_CPU (struct kprobe_ctlblk, kprobe_ctlblk);
 
 DEFINE_SPINLOCK (kretprobe_lock);      /* Protects kretprobe_inst_table */
-DEFINE_PER_CPU (struct kprobe *, kprobe_instance) = NULL;
+static DEFINE_PER_CPU (struct kprobe *, kprobe_instance) = NULL;
 
 struct hlist_head kprobe_table[KPROBE_TABLE_SIZE];
-struct hlist_head kretprobe_inst_table[KPROBE_TABLE_SIZE];
+static struct hlist_head kretprobe_inst_table[KPROBE_TABLE_SIZE];
 
 atomic_t kprobe_count;
 
@@ -369,7 +364,7 @@ void copy_kprobe (struct kprobe *old_p, struct kprobe *p)
  * Add the new probe to old_p->list. Fail if this is the
  * second jprobe at the address - two jprobes can't coexist
  */
-int add_new_kprobe (struct kprobe *old_p, struct kprobe *p)
+static int add_new_kprobe (struct kprobe *old_p, struct kprobe *p)
 {
        if (p->break_handler)
        {
@@ -601,7 +596,7 @@ int dbi_register_jprobe (struct jprobe *jp)
 
 void dbi_unregister_jprobe (struct jprobe *jp)
 {
-       dbi_unregister_kprobe (&jp->kp, 0);
+       dbi_unregister_kprobe (&jp->kp, NULL);
 }
 
 /*
@@ -726,7 +721,7 @@ void dbi_unregister_kretprobe (struct kretprobe *rp)
        unsigned long flags;
        struct kretprobe_instance *ri;
 
-       dbi_unregister_kprobe (&rp->kp, 0);
+       dbi_unregister_kprobe (&rp->kp, NULL);
 
        if ((unsigned long)rp->kp.addr == sched_addr) {
                unpatch_suspended_all_task_ret_addr(rp);
@@ -899,7 +894,7 @@ static void unpatch_suspended_all_task_ret_addr(struct kretprobe *rp)
        rcu_read_unlock();
 }
 
-int __init init_kprobes (void)
+static int __init init_kprobes (void)
 {
        int i, err = 0;
 
@@ -921,7 +916,7 @@ int __init init_kprobes (void)
        return err;
 }
 
-void __exit exit_kprobes (void)
+static void __exit exit_kprobes (void)
 {
        dbi_arch_exit_kprobes ();
 }
index 84e14a5..38872f5 100644 (file)
@@ -268,6 +268,16 @@ int pre_handler_kretprobe (struct kprobe *p, struct pt_regs *regs, struct vm_are
 void set_normalized_timeval (struct timeval *tv, time_t sec, suseconds_t usec);
 #endif
 
+extern DEFINE_PER_CPU (struct kprobe *, current_kprobe);
+extern spinlock_t kretprobe_lock;
+extern struct hlist_head kprobe_table[KPROBE_TABLE_SIZE];
+//extern struct hlist_head kretprobe_inst_table[KPROBE_TABLE_SIZE];
+extern atomic_t kprobe_count;
+extern struct kretprobe *sched_rp;
+
+struct kprobe *kprobe_running (void);
+void reset_current_kprobe (void);
+struct kprobe_ctlblk *get_kprobe_ctlblk (void);
 
 #endif /* _DBI_KPROBES_H */
 
index e3c5736..dc9487c 100644 (file)
@@ -40,7 +40,7 @@ unsigned long sched_addr;
 unsigned long fork_addr;
 
 #if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 29)
-struct mm_struct* init_mm_ptr;
+static struct mm_struct* init_mm_ptr;
 struct mm_struct init_mm;
 #endif
 
@@ -312,7 +312,7 @@ static inline int use_zero_page(struct vm_area_struct *vma)
 
 
 #if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 38)
-unsigned long zero_pfn __read_mostly;
+static unsigned long zero_pfn __read_mostly;
 
 #ifndef is_zero_pfn
 static inline int is_zero_pfn(unsigned long pfn)
@@ -327,7 +327,7 @@ static inline int stack_guard_page(struct vm_area_struct *vma, unsigned long add
               stack_guard_page_end(vma, addr+PAGE_SIZE);
 }
 
-int __get_user_pages_uprobe(struct task_struct *tsk, struct mm_struct *mm,
+static int __get_user_pages_uprobe(struct task_struct *tsk, struct mm_struct *mm,
                     unsigned long start, int nr_pages, unsigned int gup_flags,
                     struct page **pages, struct vm_area_struct **vmas,
                     int *nonblocking)
@@ -523,7 +523,7 @@ next_page:
 }
 #else /* LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 38) */
 
-int __get_user_pages_uprobe(struct task_struct *tsk, struct mm_struct *mm,
+static int __get_user_pages_uprobe(struct task_struct *tsk, struct mm_struct *mm,
                     unsigned long start, int len, int flags,
                struct page **pages, struct vm_area_struct **vmas)
 {
@@ -748,7 +748,7 @@ int get_user_pages_uprobe(struct task_struct *tsk, struct mm_struct *mm,
        return __get_user_pages_uprobe(tsk, mm,
                                start, len, flags,
 #if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 38)
-                                      pages, vmas, 0);
+                                      pages, vmas, NULL);
 #else /* LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 38) */
                                       pages, vmas);
 #endif /* LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 38) */
index 6f1f12d..7b8eff3 100644 (file)
@@ -90,6 +90,7 @@ int page_present (struct mm_struct *mm, unsigned long addr);
 
 #define get_user_pages_atomic  get_user_pages_uprobe
 
-
+extern unsigned long sched_addr;
+extern unsigned long fork_addr;
 
 #endif /* _DBI_KPROBES_DEPS_H */
index 1843ada..7d916dc 100644 (file)
 #include <linux/mempolicy.h>
 #include <linux/module.h>
 
-
-extern atomic_t kprobe_count;
-extern struct hlist_head kprobe_table[KPROBE_TABLE_SIZE];
-extern struct hlist_head kretprobe_inst_table[KPROBE_TABLE_SIZE];
-extern spinlock_t kretprobe_lock;
-
-extern struct kretprobe *sched_rp;
-
 struct hlist_head uprobe_insn_slot_table[KPROBE_TABLE_SIZE];
 
 
@@ -359,8 +351,8 @@ void dbi_unregister_all_uprobes(struct task_struct *task, int atomic)
                head = &kprobe_table[i];
                hlist_for_each_entry_safe(p, node, tnode, head, hlist) {
                        if (p->tgid == task->tgid) {
-                               printk("dbi_unregister_all_uprobes: delete uprobe at %p[%x] for %s/%d\n",
-                                               p->addr, p->opcode, task->comm, task->pid);
+                               printk("dbi_unregister_all_uprobes: delete uprobe at %p[%lx] for %s/%d\n",
+                                               p->addr, (unsigned long)p->opcode, task->comm, task->pid);
                                unregister_uprobe(p, task, atomic);
                        }
                }
index 5a8d2c6..aef1819 100644 (file)
@@ -44,6 +44,6 @@ void init_uprobes_insn_slots(int i) ;
 
 void dbi_uprobe_return(void);
 
-
+extern struct hlist_head uprobe_insn_slot_table[KPROBE_TABLE_SIZE];
 
 #endif /*  _DBI_UPROBES_H */