aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/sysctl.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/sysctl.c')
-rw-r--r--kernel/sysctl.c64
1 files changed, 41 insertions, 23 deletions
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index 62e53a0de4a3..c25e67e19af7 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -55,6 +55,8 @@
55#include <asm/stacktrace.h> 55#include <asm/stacktrace.h>
56#endif 56#endif
57 57
58static int deprecated_sysctl_warning(struct __sysctl_args *args);
59
58#if defined(CONFIG_SYSCTL) 60#if defined(CONFIG_SYSCTL)
59 61
60/* External variables not in a header file. */ 62/* External variables not in a header file. */
@@ -1347,10 +1349,15 @@ asmlinkage long sys_sysctl(struct __sysctl_args __user *args)
1347 if (copy_from_user(&tmp, args, sizeof(tmp))) 1349 if (copy_from_user(&tmp, args, sizeof(tmp)))
1348 return -EFAULT; 1350 return -EFAULT;
1349 1351
1352 error = deprecated_sysctl_warning(&tmp);
1353 if (error)
1354 goto out;
1355
1350 lock_kernel(); 1356 lock_kernel();
1351 error = do_sysctl(tmp.name, tmp.nlen, tmp.oldval, tmp.oldlenp, 1357 error = do_sysctl(tmp.name, tmp.nlen, tmp.oldval, tmp.oldlenp,
1352 tmp.newval, tmp.newlen); 1358 tmp.newval, tmp.newlen);
1353 unlock_kernel(); 1359 unlock_kernel();
1360out:
1354 return error; 1361 return error;
1355} 1362}
1356#endif /* CONFIG_SYSCTL_SYSCALL */ 1363#endif /* CONFIG_SYSCTL_SYSCALL */
@@ -2540,35 +2547,19 @@ int sysctl_ms_jiffies(struct ctl_table *table, int __user *name, int nlen,
2540 2547
2541asmlinkage long sys_sysctl(struct __sysctl_args __user *args) 2548asmlinkage long sys_sysctl(struct __sysctl_args __user *args)
2542{ 2549{
2543 static int msg_count;
2544 struct __sysctl_args tmp; 2550 struct __sysctl_args tmp;
2545 int name[CTL_MAXNAME]; 2551 int error;
2546 int i;
2547 2552
2548 /* Read in the sysctl name for better debug message logging */
2549 if (copy_from_user(&tmp, args, sizeof(tmp))) 2553 if (copy_from_user(&tmp, args, sizeof(tmp)))
2550 return -EFAULT; 2554 return -EFAULT;
2551 if (tmp.nlen <= 0 || tmp.nlen >= CTL_MAXNAME)
2552 return -ENOTDIR;
2553 for (i = 0; i < tmp.nlen; i++)
2554 if (get_user(name[i], tmp.name + i))
2555 return -EFAULT;
2556 2555
2557 /* Ignore accesses to kernel.version */ 2556 error = deprecated_sysctl_warning(&tmp);
2558 if ((tmp.nlen == 2) && (name[0] == CTL_KERN) && (name[1] == KERN_VERSION))
2559 goto out;
2560 2557
2561 if (msg_count < 5) { 2558 /* If no error reading the parameters then just -ENOSYS ... */
2562 msg_count++; 2559 if (!error)
2563 printk(KERN_INFO 2560 error = -ENOSYS;
2564 "warning: process `%s' used the removed sysctl " 2561
2565 "system call with ", current->comm); 2562 return error;
2566 for (i = 0; i < tmp.nlen; i++)
2567 printk("%d.", name[i]);
2568 printk("\n");
2569 }
2570out:
2571 return -ENOSYS;
2572} 2563}
2573 2564
2574int sysctl_data(struct ctl_table *table, int __user *name, int nlen, 2565int sysctl_data(struct ctl_table *table, int __user *name, int nlen,
@@ -2608,6 +2599,33 @@ int sysctl_ms_jiffies(struct ctl_table *table, int __user *name, int nlen,
2608 2599
2609#endif /* CONFIG_SYSCTL_SYSCALL */ 2600#endif /* CONFIG_SYSCTL_SYSCALL */
2610 2601
2602static int deprecated_sysctl_warning(struct __sysctl_args *args)
2603{
2604 static int msg_count;
2605 int name[CTL_MAXNAME];
2606 int i;
2607
2608 /* Read in the sysctl name for better debug message logging */
2609 for (i = 0; i < args->nlen; i++)
2610 if (get_user(name[i], args->name + i))
2611 return -EFAULT;
2612
2613 /* Ignore accesses to kernel.version */
2614 if ((args->nlen == 2) && (name[0] == CTL_KERN) && (name[1] == KERN_VERSION))
2615 return 0;
2616
2617 if (msg_count < 5) {
2618 msg_count++;
2619 printk(KERN_INFO
2620 "warning: process `%s' used the deprecated sysctl "
2621 "system call with ", current->comm);
2622 for (i = 0; i < args->nlen; i++)
2623 printk("%d.", name[i]);
2624 printk("\n");
2625 }
2626 return 0;
2627}
2628
2611/* 2629/*
2612 * No sense putting this after each symbol definition, twice, 2630 * No sense putting this after each symbol definition, twice,
2613 * exception granted :-) 2631 * exception granted :-)