diff options
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/sysctl.c | 29 | ||||
-rw-r--r-- | kernel/utsname_sysctl.c | 5 |
2 files changed, 15 insertions, 19 deletions
diff --git a/kernel/sysctl.c b/kernel/sysctl.c index ec88fcc9a0d2..9792c315676a 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c | |||
@@ -1500,7 +1500,6 @@ void register_sysctl_root(struct ctl_table_root *root) | |||
1500 | /* Perform the actual read/write of a sysctl table entry. */ | 1500 | /* Perform the actual read/write of a sysctl table entry. */ |
1501 | static int do_sysctl_strategy(struct ctl_table_root *root, | 1501 | static int do_sysctl_strategy(struct ctl_table_root *root, |
1502 | struct ctl_table *table, | 1502 | struct ctl_table *table, |
1503 | int __user *name, int nlen, | ||
1504 | void __user *oldval, size_t __user *oldlenp, | 1503 | void __user *oldval, size_t __user *oldlenp, |
1505 | void __user *newval, size_t newlen) | 1504 | void __user *newval, size_t newlen) |
1506 | { | 1505 | { |
@@ -1514,8 +1513,7 @@ static int do_sysctl_strategy(struct ctl_table_root *root, | |||
1514 | return -EPERM; | 1513 | return -EPERM; |
1515 | 1514 | ||
1516 | if (table->strategy) { | 1515 | if (table->strategy) { |
1517 | rc = table->strategy(table, name, nlen, oldval, oldlenp, | 1516 | rc = table->strategy(table, oldval, oldlenp, newval, newlen); |
1518 | newval, newlen); | ||
1519 | if (rc < 0) | 1517 | if (rc < 0) |
1520 | return rc; | 1518 | return rc; |
1521 | if (rc > 0) | 1519 | if (rc > 0) |
@@ -1525,8 +1523,7 @@ static int do_sysctl_strategy(struct ctl_table_root *root, | |||
1525 | /* If there is no strategy routine, or if the strategy returns | 1523 | /* If there is no strategy routine, or if the strategy returns |
1526 | * zero, proceed with automatic r/w */ | 1524 | * zero, proceed with automatic r/w */ |
1527 | if (table->data && table->maxlen) { | 1525 | if (table->data && table->maxlen) { |
1528 | rc = sysctl_data(table, name, nlen, oldval, oldlenp, | 1526 | rc = sysctl_data(table, oldval, oldlenp, newval, newlen); |
1529 | newval, newlen); | ||
1530 | if (rc < 0) | 1527 | if (rc < 0) |
1531 | return rc; | 1528 | return rc; |
1532 | } | 1529 | } |
@@ -1558,7 +1555,7 @@ repeat: | |||
1558 | table = table->child; | 1555 | table = table->child; |
1559 | goto repeat; | 1556 | goto repeat; |
1560 | } | 1557 | } |
1561 | error = do_sysctl_strategy(root, table, name, nlen, | 1558 | error = do_sysctl_strategy(root, table, |
1562 | oldval, oldlenp, | 1559 | oldval, oldlenp, |
1563 | newval, newlen); | 1560 | newval, newlen); |
1564 | return error; | 1561 | return error; |
@@ -2707,7 +2704,7 @@ int proc_doulongvec_ms_jiffies_minmax(struct ctl_table *table, int write, | |||
2707 | */ | 2704 | */ |
2708 | 2705 | ||
2709 | /* The generic sysctl data routine (used if no strategy routine supplied) */ | 2706 | /* The generic sysctl data routine (used if no strategy routine supplied) */ |
2710 | int sysctl_data(struct ctl_table *table, int __user *name, int nlen, | 2707 | int sysctl_data(struct ctl_table *table, |
2711 | void __user *oldval, size_t __user *oldlenp, | 2708 | void __user *oldval, size_t __user *oldlenp, |
2712 | void __user *newval, size_t newlen) | 2709 | void __user *newval, size_t newlen) |
2713 | { | 2710 | { |
@@ -2741,7 +2738,7 @@ int sysctl_data(struct ctl_table *table, int __user *name, int nlen, | |||
2741 | } | 2738 | } |
2742 | 2739 | ||
2743 | /* The generic string strategy routine: */ | 2740 | /* The generic string strategy routine: */ |
2744 | int sysctl_string(struct ctl_table *table, int __user *name, int nlen, | 2741 | int sysctl_string(struct ctl_table *table, |
2745 | void __user *oldval, size_t __user *oldlenp, | 2742 | void __user *oldval, size_t __user *oldlenp, |
2746 | void __user *newval, size_t newlen) | 2743 | void __user *newval, size_t newlen) |
2747 | { | 2744 | { |
@@ -2787,7 +2784,7 @@ int sysctl_string(struct ctl_table *table, int __user *name, int nlen, | |||
2787 | * are between the minimum and maximum values given in the arrays | 2784 | * are between the minimum and maximum values given in the arrays |
2788 | * table->extra1 and table->extra2, respectively. | 2785 | * table->extra1 and table->extra2, respectively. |
2789 | */ | 2786 | */ |
2790 | int sysctl_intvec(struct ctl_table *table, int __user *name, int nlen, | 2787 | int sysctl_intvec(struct ctl_table *table, |
2791 | void __user *oldval, size_t __user *oldlenp, | 2788 | void __user *oldval, size_t __user *oldlenp, |
2792 | void __user *newval, size_t newlen) | 2789 | void __user *newval, size_t newlen) |
2793 | { | 2790 | { |
@@ -2823,7 +2820,7 @@ int sysctl_intvec(struct ctl_table *table, int __user *name, int nlen, | |||
2823 | } | 2820 | } |
2824 | 2821 | ||
2825 | /* Strategy function to convert jiffies to seconds */ | 2822 | /* Strategy function to convert jiffies to seconds */ |
2826 | int sysctl_jiffies(struct ctl_table *table, int __user *name, int nlen, | 2823 | int sysctl_jiffies(struct ctl_table *table, |
2827 | void __user *oldval, size_t __user *oldlenp, | 2824 | void __user *oldval, size_t __user *oldlenp, |
2828 | void __user *newval, size_t newlen) | 2825 | void __user *newval, size_t newlen) |
2829 | { | 2826 | { |
@@ -2857,7 +2854,7 @@ int sysctl_jiffies(struct ctl_table *table, int __user *name, int nlen, | |||
2857 | } | 2854 | } |
2858 | 2855 | ||
2859 | /* Strategy function to convert jiffies to seconds */ | 2856 | /* Strategy function to convert jiffies to seconds */ |
2860 | int sysctl_ms_jiffies(struct ctl_table *table, int __user *name, int nlen, | 2857 | int sysctl_ms_jiffies(struct ctl_table *table, |
2861 | void __user *oldval, size_t __user *oldlenp, | 2858 | void __user *oldval, size_t __user *oldlenp, |
2862 | void __user *newval, size_t newlen) | 2859 | void __user *newval, size_t newlen) |
2863 | { | 2860 | { |
@@ -2912,35 +2909,35 @@ asmlinkage long sys_sysctl(struct __sysctl_args __user *args) | |||
2912 | return error; | 2909 | return error; |
2913 | } | 2910 | } |
2914 | 2911 | ||
2915 | int sysctl_data(struct ctl_table *table, int __user *name, int nlen, | 2912 | int sysctl_data(struct ctl_table *table, |
2916 | void __user *oldval, size_t __user *oldlenp, | 2913 | void __user *oldval, size_t __user *oldlenp, |
2917 | void __user *newval, size_t newlen) | 2914 | void __user *newval, size_t newlen) |
2918 | { | 2915 | { |
2919 | return -ENOSYS; | 2916 | return -ENOSYS; |
2920 | } | 2917 | } |
2921 | 2918 | ||
2922 | int sysctl_string(struct ctl_table *table, int __user *name, int nlen, | 2919 | int sysctl_string(struct ctl_table *table, |
2923 | void __user *oldval, size_t __user *oldlenp, | 2920 | void __user *oldval, size_t __user *oldlenp, |
2924 | void __user *newval, size_t newlen) | 2921 | void __user *newval, size_t newlen) |
2925 | { | 2922 | { |
2926 | return -ENOSYS; | 2923 | return -ENOSYS; |
2927 | } | 2924 | } |
2928 | 2925 | ||
2929 | int sysctl_intvec(struct ctl_table *table, int __user *name, int nlen, | 2926 | int sysctl_intvec(struct ctl_table *table, |
2930 | void __user *oldval, size_t __user *oldlenp, | 2927 | void __user *oldval, size_t __user *oldlenp, |
2931 | void __user *newval, size_t newlen) | 2928 | void __user *newval, size_t newlen) |
2932 | { | 2929 | { |
2933 | return -ENOSYS; | 2930 | return -ENOSYS; |
2934 | } | 2931 | } |
2935 | 2932 | ||
2936 | int sysctl_jiffies(struct ctl_table *table, int __user *name, int nlen, | 2933 | int sysctl_jiffies(struct ctl_table *table, |
2937 | void __user *oldval, size_t __user *oldlenp, | 2934 | void __user *oldval, size_t __user *oldlenp, |
2938 | void __user *newval, size_t newlen) | 2935 | void __user *newval, size_t newlen) |
2939 | { | 2936 | { |
2940 | return -ENOSYS; | 2937 | return -ENOSYS; |
2941 | } | 2938 | } |
2942 | 2939 | ||
2943 | int sysctl_ms_jiffies(struct ctl_table *table, int __user *name, int nlen, | 2940 | int sysctl_ms_jiffies(struct ctl_table *table, |
2944 | void __user *oldval, size_t __user *oldlenp, | 2941 | void __user *oldval, size_t __user *oldlenp, |
2945 | void __user *newval, size_t newlen) | 2942 | void __user *newval, size_t newlen) |
2946 | { | 2943 | { |
diff --git a/kernel/utsname_sysctl.c b/kernel/utsname_sysctl.c index 4ab9659d269e..3b34b3545936 100644 --- a/kernel/utsname_sysctl.c +++ b/kernel/utsname_sysctl.c | |||
@@ -60,7 +60,7 @@ static int proc_do_uts_string(ctl_table *table, int write, struct file *filp, | |||
60 | 60 | ||
61 | #ifdef CONFIG_SYSCTL_SYSCALL | 61 | #ifdef CONFIG_SYSCTL_SYSCALL |
62 | /* The generic string strategy routine: */ | 62 | /* The generic string strategy routine: */ |
63 | static int sysctl_uts_string(ctl_table *table, int __user *name, int nlen, | 63 | static int sysctl_uts_string(ctl_table *table, |
64 | void __user *oldval, size_t __user *oldlenp, | 64 | void __user *oldval, size_t __user *oldlenp, |
65 | void __user *newval, size_t newlen) | 65 | void __user *newval, size_t newlen) |
66 | { | 66 | { |
@@ -69,8 +69,7 @@ static int sysctl_uts_string(ctl_table *table, int __user *name, int nlen, | |||
69 | write = newval && newlen; | 69 | write = newval && newlen; |
70 | memcpy(&uts_table, table, sizeof(uts_table)); | 70 | memcpy(&uts_table, table, sizeof(uts_table)); |
71 | uts_table.data = get_uts(table, write); | 71 | uts_table.data = get_uts(table, write); |
72 | r = sysctl_string(&uts_table, name, nlen, | 72 | r = sysctl_string(&uts_table, oldval, oldlenp, newval, newlen); |
73 | oldval, oldlenp, newval, newlen); | ||
74 | put_uts(table, write, uts_table.data); | 73 | put_uts(table, write, uts_table.data); |
75 | return r; | 74 | return r; |
76 | } | 75 | } |