]> err.no Git - linux-2.6/blobdiff - kernel/sysctl.c
Avoid potential NULL dereference in unregister_sysctl_table
[linux-2.6] / kernel / sysctl.c
index 3a1744fed2b68d589da4cbf4e5f088e652066262..8ac51714b08ca7ec4261b8544fc62524dad8a3e4 100644 (file)
@@ -1588,6 +1588,10 @@ struct ctl_table_header *register_sysctl_table(struct ctl_table * table)
 void unregister_sysctl_table(struct ctl_table_header * header)
 {
        might_sleep();
+
+       if (header == NULL)
+               return;
+
        spin_lock(&sysctl_lock);
        start_unregistering(header);
        spin_unlock(&sysctl_lock);
@@ -2620,6 +2624,10 @@ static int deprecated_sysctl_warning(struct __sysctl_args *args)
        int name[CTL_MAXNAME];
        int i;
 
+       /* Check args->nlen. */
+       if (args->nlen < 0 || args->nlen > CTL_MAXNAME)
+               return -ENOTDIR;
+
        /* Read in the sysctl name for better debug message logging */
        for (i = 0; i < args->nlen; i++)
                if (get_user(name[i], args->name + i))