.. | .. |
---|
114 | 114 | static int sixty = 60; |
---|
115 | 115 | #endif |
---|
116 | 116 | |
---|
117 | | -static int __maybe_unused neg_one = -1; |
---|
118 | | -static int __maybe_unused two = 2; |
---|
119 | | -static int __maybe_unused four = 4; |
---|
120 | 117 | static unsigned long zero_ul; |
---|
121 | 118 | static unsigned long one_ul = 1; |
---|
122 | 119 | static unsigned long long_max = LONG_MAX; |
---|
123 | | -static int one_hundred = 100; |
---|
124 | | -static int two_hundred = 200; |
---|
125 | | -static int one_thousand = 1000; |
---|
126 | 120 | #ifdef CONFIG_PRINTK |
---|
127 | 121 | static int ten_thousand = 10000; |
---|
128 | 122 | #endif |
---|
.. | .. |
---|
1064 | 1058 | do_proc_douintvec_minmax_conv, ¶m); |
---|
1065 | 1059 | } |
---|
1066 | 1060 | |
---|
| 1061 | +/** |
---|
| 1062 | + * proc_dou8vec_minmax - read a vector of unsigned chars with min/max values |
---|
| 1063 | + * @table: the sysctl table |
---|
| 1064 | + * @write: %TRUE if this is a write to the sysctl file |
---|
| 1065 | + * @buffer: the user buffer |
---|
| 1066 | + * @lenp: the size of the user buffer |
---|
| 1067 | + * @ppos: file position |
---|
| 1068 | + * |
---|
| 1069 | + * Reads/writes up to table->maxlen/sizeof(u8) unsigned chars |
---|
| 1070 | + * values from/to the user buffer, treated as an ASCII string. Negative |
---|
| 1071 | + * strings are not allowed. |
---|
| 1072 | + * |
---|
| 1073 | + * This routine will ensure the values are within the range specified by |
---|
| 1074 | + * table->extra1 (min) and table->extra2 (max). |
---|
| 1075 | + * |
---|
| 1076 | + * Returns 0 on success or an error on write when the range check fails. |
---|
| 1077 | + */ |
---|
| 1078 | +int proc_dou8vec_minmax(struct ctl_table *table, int write, |
---|
| 1079 | + void *buffer, size_t *lenp, loff_t *ppos) |
---|
| 1080 | +{ |
---|
| 1081 | + struct ctl_table tmp; |
---|
| 1082 | + unsigned int min = 0, max = 255U, val; |
---|
| 1083 | + u8 *data = table->data; |
---|
| 1084 | + struct do_proc_douintvec_minmax_conv_param param = { |
---|
| 1085 | + .min = &min, |
---|
| 1086 | + .max = &max, |
---|
| 1087 | + }; |
---|
| 1088 | + int res; |
---|
| 1089 | + |
---|
| 1090 | + /* Do not support arrays yet. */ |
---|
| 1091 | + if (table->maxlen != sizeof(u8)) |
---|
| 1092 | + return -EINVAL; |
---|
| 1093 | + |
---|
| 1094 | + if (table->extra1) { |
---|
| 1095 | + min = *(unsigned int *) table->extra1; |
---|
| 1096 | + if (min > 255U) |
---|
| 1097 | + return -EINVAL; |
---|
| 1098 | + } |
---|
| 1099 | + if (table->extra2) { |
---|
| 1100 | + max = *(unsigned int *) table->extra2; |
---|
| 1101 | + if (max > 255U) |
---|
| 1102 | + return -EINVAL; |
---|
| 1103 | + } |
---|
| 1104 | + |
---|
| 1105 | + tmp = *table; |
---|
| 1106 | + |
---|
| 1107 | + tmp.maxlen = sizeof(val); |
---|
| 1108 | + tmp.data = &val; |
---|
| 1109 | + val = READ_ONCE(*data); |
---|
| 1110 | + res = do_proc_douintvec(&tmp, write, buffer, lenp, ppos, |
---|
| 1111 | + do_proc_douintvec_minmax_conv, ¶m); |
---|
| 1112 | + if (res) |
---|
| 1113 | + return res; |
---|
| 1114 | + if (write) |
---|
| 1115 | + WRITE_ONCE(*data, val); |
---|
| 1116 | + return 0; |
---|
| 1117 | +} |
---|
| 1118 | +EXPORT_SYMBOL_GPL(proc_dou8vec_minmax); |
---|
| 1119 | + |
---|
1067 | 1120 | static int do_proc_dopipe_max_size_conv(unsigned long *lvalp, |
---|
1068 | 1121 | unsigned int *valp, |
---|
1069 | 1122 | int write, void *data) |
---|
.. | .. |
---|
1615 | 1668 | return -ENOSYS; |
---|
1616 | 1669 | } |
---|
1617 | 1670 | |
---|
| 1671 | +int proc_dou8vec_minmax(struct ctl_table *table, int write, |
---|
| 1672 | + void *buffer, size_t *lenp, loff_t *ppos) |
---|
| 1673 | +{ |
---|
| 1674 | + return -ENOSYS; |
---|
| 1675 | +} |
---|
| 1676 | + |
---|
1618 | 1677 | int proc_dointvec_jiffies(struct ctl_table *table, int write, |
---|
1619 | 1678 | void *buffer, size_t *lenp, loff_t *ppos) |
---|
1620 | 1679 | { |
---|
.. | .. |
---|
1964 | 2023 | .maxlen = sizeof(int), |
---|
1965 | 2024 | .mode = 0644, |
---|
1966 | 2025 | .proc_handler = proc_dointvec_minmax, |
---|
1967 | | - .extra1 = &neg_one, |
---|
| 2026 | + .extra1 = SYSCTL_NEG_ONE, |
---|
1968 | 2027 | .extra2 = SYSCTL_ONE, |
---|
1969 | 2028 | }, |
---|
1970 | 2029 | #endif |
---|
.. | .. |
---|
2218 | 2277 | .proc_handler = proc_dointvec, |
---|
2219 | 2278 | }, |
---|
2220 | 2279 | #endif |
---|
2221 | | -#ifdef CONFIG_SMP |
---|
2222 | | - { |
---|
2223 | | - .procname = "oops_all_cpu_backtrace", |
---|
2224 | | - .data = &sysctl_oops_all_cpu_backtrace, |
---|
2225 | | - .maxlen = sizeof(int), |
---|
2226 | | - .mode = 0644, |
---|
2227 | | - .proc_handler = proc_dointvec_minmax, |
---|
2228 | | - .extra1 = SYSCTL_ZERO, |
---|
2229 | | - .extra2 = SYSCTL_ONE, |
---|
2230 | | - }, |
---|
2231 | | -#endif /* CONFIG_SMP */ |
---|
2232 | 2280 | { |
---|
2233 | 2281 | .procname = "pid_max", |
---|
2234 | 2282 | .data = &pid_max, |
---|
.. | .. |
---|
2306 | 2354 | .mode = 0644, |
---|
2307 | 2355 | .proc_handler = proc_dointvec_minmax_sysadmin, |
---|
2308 | 2356 | .extra1 = SYSCTL_ZERO, |
---|
2309 | | - .extra2 = &two, |
---|
| 2357 | + .extra2 = SYSCTL_TWO, |
---|
2310 | 2358 | }, |
---|
2311 | 2359 | #endif |
---|
2312 | 2360 | { |
---|
.. | .. |
---|
2566 | 2614 | .maxlen = sizeof(int), |
---|
2567 | 2615 | .mode = 0644, |
---|
2568 | 2616 | .proc_handler = proc_dointvec_minmax, |
---|
2569 | | - .extra1 = &neg_one, |
---|
| 2617 | + .extra1 = SYSCTL_NEG_ONE, |
---|
2570 | 2618 | }, |
---|
2571 | 2619 | #endif |
---|
2572 | 2620 | #ifdef CONFIG_RT_MUTEXES |
---|
.. | .. |
---|
2628 | 2676 | .mode = 0644, |
---|
2629 | 2677 | .proc_handler = perf_cpu_time_max_percent_handler, |
---|
2630 | 2678 | .extra1 = SYSCTL_ZERO, |
---|
2631 | | - .extra2 = &one_hundred, |
---|
| 2679 | + .extra2 = SYSCTL_ONE_HUNDRED, |
---|
2632 | 2680 | }, |
---|
2633 | 2681 | { |
---|
2634 | 2682 | .procname = "perf_event_max_stack", |
---|
.. | .. |
---|
2646 | 2694 | .mode = 0644, |
---|
2647 | 2695 | .proc_handler = perf_event_max_stack_handler, |
---|
2648 | 2696 | .extra1 = SYSCTL_ZERO, |
---|
2649 | | - .extra2 = &one_thousand, |
---|
| 2697 | + .extra2 = SYSCTL_ONE_THOUSAND, |
---|
2650 | 2698 | }, |
---|
2651 | 2699 | #endif |
---|
2652 | 2700 | { |
---|
.. | .. |
---|
2677 | 2725 | .mode = 0644, |
---|
2678 | 2726 | .proc_handler = bpf_unpriv_handler, |
---|
2679 | 2727 | .extra1 = SYSCTL_ZERO, |
---|
2680 | | - .extra2 = &two, |
---|
| 2728 | + .extra2 = SYSCTL_TWO, |
---|
2681 | 2729 | }, |
---|
2682 | 2730 | { |
---|
2683 | 2731 | .procname = "bpf_stats_enabled", |
---|
.. | .. |
---|
2720 | 2768 | .mode = 0644, |
---|
2721 | 2769 | .proc_handler = overcommit_policy_handler, |
---|
2722 | 2770 | .extra1 = SYSCTL_ZERO, |
---|
2723 | | - .extra2 = &two, |
---|
| 2771 | + .extra2 = SYSCTL_TWO, |
---|
2724 | 2772 | }, |
---|
2725 | 2773 | { |
---|
2726 | 2774 | .procname = "panic_on_oom", |
---|
.. | .. |
---|
2729 | 2777 | .mode = 0644, |
---|
2730 | 2778 | .proc_handler = proc_dointvec_minmax, |
---|
2731 | 2779 | .extra1 = SYSCTL_ZERO, |
---|
2732 | | - .extra2 = &two, |
---|
| 2780 | + .extra2 = SYSCTL_TWO, |
---|
2733 | 2781 | }, |
---|
2734 | 2782 | { |
---|
2735 | 2783 | .procname = "oom_kill_allocating_task", |
---|
.. | .. |
---|
2774 | 2822 | .mode = 0644, |
---|
2775 | 2823 | .proc_handler = dirty_background_ratio_handler, |
---|
2776 | 2824 | .extra1 = SYSCTL_ZERO, |
---|
2777 | | - .extra2 = &one_hundred, |
---|
| 2825 | + .extra2 = SYSCTL_ONE_HUNDRED, |
---|
2778 | 2826 | }, |
---|
2779 | 2827 | { |
---|
2780 | 2828 | .procname = "dirty_background_bytes", |
---|
.. | .. |
---|
2791 | 2839 | .mode = 0644, |
---|
2792 | 2840 | .proc_handler = dirty_ratio_handler, |
---|
2793 | 2841 | .extra1 = SYSCTL_ZERO, |
---|
2794 | | - .extra2 = &one_hundred, |
---|
| 2842 | + .extra2 = SYSCTL_ONE_HUNDRED, |
---|
2795 | 2843 | }, |
---|
2796 | 2844 | { |
---|
2797 | 2845 | .procname = "dirty_bytes", |
---|
.. | .. |
---|
2831 | 2879 | .mode = 0644, |
---|
2832 | 2880 | .proc_handler = proc_dointvec_minmax, |
---|
2833 | 2881 | .extra1 = SYSCTL_ZERO, |
---|
2834 | | - .extra2 = &two_hundred, |
---|
| 2882 | + .extra2 = SYSCTL_TWO_HUNDRED, |
---|
2835 | 2883 | }, |
---|
2836 | 2884 | #ifdef CONFIG_NUMA |
---|
2837 | 2885 | { |
---|
.. | .. |
---|
2890 | 2938 | .mode = 0200, |
---|
2891 | 2939 | .proc_handler = drop_caches_sysctl_handler, |
---|
2892 | 2940 | .extra1 = SYSCTL_ONE, |
---|
2893 | | - .extra2 = &four, |
---|
| 2941 | + .extra2 = SYSCTL_FOUR, |
---|
2894 | 2942 | }, |
---|
2895 | 2943 | #ifdef CONFIG_COMPACTION |
---|
2896 | 2944 | { |
---|
.. | .. |
---|
2907 | 2955 | .mode = 0644, |
---|
2908 | 2956 | .proc_handler = compaction_proactiveness_sysctl_handler, |
---|
2909 | 2957 | .extra1 = SYSCTL_ZERO, |
---|
2910 | | - .extra2 = &one_hundred, |
---|
| 2958 | + .extra2 = SYSCTL_ONE_HUNDRED, |
---|
2911 | 2959 | }, |
---|
2912 | 2960 | { |
---|
2913 | 2961 | .procname = "extfrag_threshold", |
---|
.. | .. |
---|
2952 | 3000 | .mode = 0644, |
---|
2953 | 3001 | .proc_handler = watermark_scale_factor_sysctl_handler, |
---|
2954 | 3002 | .extra1 = SYSCTL_ONE, |
---|
2955 | | - .extra2 = &one_thousand, |
---|
| 3003 | + .extra2 = SYSCTL_THREE_THOUSAND, |
---|
2956 | 3004 | }, |
---|
2957 | 3005 | { |
---|
2958 | 3006 | .procname = "extra_free_kbytes", |
---|
.. | .. |
---|
3047 | 3095 | .mode = 0644, |
---|
3048 | 3096 | .proc_handler = sysctl_min_unmapped_ratio_sysctl_handler, |
---|
3049 | 3097 | .extra1 = SYSCTL_ZERO, |
---|
3050 | | - .extra2 = &one_hundred, |
---|
| 3098 | + .extra2 = SYSCTL_ONE_HUNDRED, |
---|
3051 | 3099 | }, |
---|
3052 | 3100 | { |
---|
3053 | 3101 | .procname = "min_slab_ratio", |
---|
.. | .. |
---|
3056 | 3104 | .mode = 0644, |
---|
3057 | 3105 | .proc_handler = sysctl_min_slab_ratio_sysctl_handler, |
---|
3058 | 3106 | .extra1 = SYSCTL_ZERO, |
---|
3059 | | - .extra2 = &one_hundred, |
---|
| 3107 | + .extra2 = SYSCTL_ONE_HUNDRED, |
---|
3060 | 3108 | }, |
---|
3061 | 3109 | #endif |
---|
3062 | 3110 | #ifdef CONFIG_SMP |
---|
.. | .. |
---|
3339 | 3387 | .mode = 0600, |
---|
3340 | 3388 | .proc_handler = proc_dointvec_minmax, |
---|
3341 | 3389 | .extra1 = SYSCTL_ZERO, |
---|
3342 | | - .extra2 = &two, |
---|
| 3390 | + .extra2 = SYSCTL_TWO, |
---|
3343 | 3391 | }, |
---|
3344 | 3392 | { |
---|
3345 | 3393 | .procname = "protected_regular", |
---|
.. | .. |
---|
3348 | 3396 | .mode = 0600, |
---|
3349 | 3397 | .proc_handler = proc_dointvec_minmax, |
---|
3350 | 3398 | .extra1 = SYSCTL_ZERO, |
---|
3351 | | - .extra2 = &two, |
---|
| 3399 | + .extra2 = SYSCTL_TWO, |
---|
3352 | 3400 | }, |
---|
3353 | 3401 | { |
---|
3354 | 3402 | .procname = "suid_dumpable", |
---|
.. | .. |
---|
3357 | 3405 | .mode = 0644, |
---|
3358 | 3406 | .proc_handler = proc_dointvec_minmax_coredump, |
---|
3359 | 3407 | .extra1 = SYSCTL_ZERO, |
---|
3360 | | - .extra2 = &two, |
---|
| 3408 | + .extra2 = SYSCTL_TWO, |
---|
3361 | 3409 | }, |
---|
3362 | 3410 | #if defined(CONFIG_BINFMT_MISC) || defined(CONFIG_BINFMT_MISC_MODULE) |
---|
3363 | 3411 | { |
---|