[FIX] check not implemented syscall
authorVyacheslav Cherkashin <v.cherkashin@samsung.com>
Tue, 9 Jul 2013 11:05:08 +0000 (15:05 +0400)
committerVyacheslav Cherkashin <v.cherkashin@samsung.com>
Tue, 9 Jul 2013 11:05:08 +0000 (15:05 +0400)
ks_features/ks_features.c

index 1bbaaf0..fa3cb78 100644 (file)
@@ -76,6 +76,9 @@ static int register_syscall(size_t id)
        int ret;
        printk("register_syscall: %s\n", get_sys_name(id));
 
+       if (ksp[id].jp.kp.addr == NULL)
+               return 0;
+
        ret = dbi_register_jprobe(&ksp[id].jp);
        if (ret)
                return ret;
@@ -91,6 +94,9 @@ static int unregister_syscall(size_t id)
 {
        printk("unregister_syscall: %s\n", get_sys_name(id));
 
+       if (ksp[id].jp.kp.addr == NULL)
+               return 0;
+
        dbi_unregister_kretprobe(&ksp[id].rp);
        dbi_unregister_jprobe(&ksp[id].jp);
 
@@ -177,9 +183,11 @@ EXPORT_SYMBOL_GPL(unset_feature);
 static int __init init_ks_feature(void)
 {
        int i;
-       unsigned long addr;
+       unsigned long addr, ni_syscall;
        char *name;
 
+       ni_syscall = swap_ksyms("sys_ni_syscall");
+
        for (i = 0; i < syscall_name_cnt; ++i) {
                name = get_sys_name(i);
                addr = swap_ksyms(name);
@@ -188,6 +196,11 @@ static int __init init_ks_feature(void)
                        return -EFAULT;
                }
 
+               if (ni_syscall == addr) {
+                       printk("INFO: %s is not install\n", get_sys_name(i));
+                       addr = 0;
+               }
+
                ksp[i].jp.kp.addr = ksp[i].rp.kp.addr = addr;
        }