80 extern int sysctl_drop_caches; |
80 extern int sysctl_drop_caches; |
81 extern int percpu_pagelist_fraction; |
81 extern int percpu_pagelist_fraction; |
82 extern int compat_log; |
82 extern int compat_log; |
83 extern int latencytop_enabled; |
83 extern int latencytop_enabled; |
84 extern int sysctl_nr_open_min, sysctl_nr_open_max; |
84 extern int sysctl_nr_open_min, sysctl_nr_open_max; |
|
85 #ifndef CONFIG_MMU |
|
86 extern int sysctl_nr_trim_pages; |
|
87 #endif |
85 #ifdef CONFIG_RCU_TORTURE_TEST |
88 #ifdef CONFIG_RCU_TORTURE_TEST |
86 extern int rcutorture_runnable; |
89 extern int rcutorture_runnable; |
87 #endif /* #ifdef CONFIG_RCU_TORTURE_TEST */ |
90 #endif /* #ifdef CONFIG_RCU_TORTURE_TEST */ |
88 |
91 |
89 /* Constants used for minimum and maximum */ |
92 /* Constants used for minimum and maximum */ |
90 #if defined(CONFIG_HIGHMEM) || defined(CONFIG_DETECT_SOFTLOCKUP) |
|
91 static int one = 1; |
|
92 #endif |
|
93 |
|
94 #ifdef CONFIG_DETECT_SOFTLOCKUP |
93 #ifdef CONFIG_DETECT_SOFTLOCKUP |
95 static int sixty = 60; |
94 static int sixty = 60; |
96 static int neg_one = -1; |
95 static int neg_one = -1; |
97 #endif |
96 #endif |
98 |
97 |
99 #if defined(CONFIG_MMU) && defined(CONFIG_FILE_LOCKING) |
98 #if defined(CONFIG_MMU) && defined(CONFIG_FILE_LOCKING) |
100 static int two = 2; |
99 static int two = 2; |
101 #endif |
100 #endif |
102 |
101 |
103 static int zero; |
102 static int zero; |
|
103 static int one = 1; |
|
104 static unsigned long one_ul = 1; |
104 static int one_hundred = 100; |
105 static int one_hundred = 100; |
105 |
106 |
106 /* this is needed for the proc_dointvec_minmax for [fs_]overflow UID and GID */ |
107 /* this is needed for the proc_dointvec_minmax for [fs_]overflow UID and GID */ |
107 static int maxolduid = 65535; |
108 static int maxolduid = 65535; |
108 static int minolduid; |
109 static int minolduid; |
449 .maxlen = sizeof (int), |
455 .maxlen = sizeof (int), |
450 .mode = 0644, |
456 .mode = 0644, |
451 .proc_handler = &proc_dointvec, |
457 .proc_handler = &proc_dointvec, |
452 }, |
458 }, |
453 #endif |
459 #endif |
|
460 #ifdef CONFIG_SPARC64 |
|
461 { |
|
462 .ctl_name = CTL_UNNUMBERED, |
|
463 .procname = "tsb-ratio", |
|
464 .data = &sysctl_tsb_ratio, |
|
465 .maxlen = sizeof (int), |
|
466 .mode = 0644, |
|
467 .proc_handler = &proc_dointvec, |
|
468 }, |
|
469 #endif |
454 #ifdef __hppa__ |
470 #ifdef __hppa__ |
455 { |
471 { |
456 .ctl_name = KERN_HPPA_PWRSW, |
472 .ctl_name = KERN_HPPA_PWRSW, |
457 .procname = "soft-power", |
473 .procname = "soft-power", |
458 .data = &pwrsw_enabled, |
474 .data = &pwrsw_enabled, |
483 .procname = "ftrace_enabled", |
499 .procname = "ftrace_enabled", |
484 .data = &ftrace_enabled, |
500 .data = &ftrace_enabled, |
485 .maxlen = sizeof(int), |
501 .maxlen = sizeof(int), |
486 .mode = 0644, |
502 .mode = 0644, |
487 .proc_handler = &ftrace_enable_sysctl, |
503 .proc_handler = &ftrace_enable_sysctl, |
|
504 }, |
|
505 #endif |
|
506 #ifdef CONFIG_STACK_TRACER |
|
507 { |
|
508 .ctl_name = CTL_UNNUMBERED, |
|
509 .procname = "stack_tracer_enabled", |
|
510 .data = &stack_tracer_enabled, |
|
511 .maxlen = sizeof(int), |
|
512 .mode = 0644, |
|
513 .proc_handler = &stack_trace_sysctl, |
|
514 }, |
|
515 #endif |
|
516 #ifdef CONFIG_TRACING |
|
517 { |
|
518 .ctl_name = CTL_UNNUMBERED, |
|
519 .procname = "ftrace_dump_on_oops", |
|
520 .data = &ftrace_dump_on_oops, |
|
521 .maxlen = sizeof(int), |
|
522 .mode = 0644, |
|
523 .proc_handler = &proc_dointvec, |
488 }, |
524 }, |
489 #endif |
525 #endif |
490 #ifdef CONFIG_MODULES |
526 #ifdef CONFIG_MODULES |
491 { |
527 { |
492 .ctl_name = KERN_MODPROBE, |
528 .ctl_name = KERN_MODPROBE, |
745 .data = &no_unaligned_warning, |
781 .data = &no_unaligned_warning, |
746 .maxlen = sizeof (int), |
782 .maxlen = sizeof (int), |
747 .mode = 0644, |
783 .mode = 0644, |
748 .proc_handler = &proc_dointvec, |
784 .proc_handler = &proc_dointvec, |
749 }, |
785 }, |
|
786 { |
|
787 .ctl_name = CTL_UNNUMBERED, |
|
788 .procname = "unaligned-dump-stack", |
|
789 .data = &unaligned_dump_stack, |
|
790 .maxlen = sizeof (int), |
|
791 .mode = 0644, |
|
792 .proc_handler = &proc_dointvec, |
|
793 }, |
750 #endif |
794 #endif |
751 #ifdef CONFIG_DETECT_SOFTLOCKUP |
795 #ifdef CONFIG_DETECT_SOFTLOCKUP |
752 { |
796 { |
753 .ctl_name = CTL_UNNUMBERED, |
797 .ctl_name = CTL_UNNUMBERED, |
754 .procname = "softlockup_panic", |
798 .procname = "softlockup_panic", |
764 .ctl_name = CTL_UNNUMBERED, |
808 .ctl_name = CTL_UNNUMBERED, |
765 .procname = "softlockup_thresh", |
809 .procname = "softlockup_thresh", |
766 .data = &softlockup_thresh, |
810 .data = &softlockup_thresh, |
767 .maxlen = sizeof(int), |
811 .maxlen = sizeof(int), |
768 .mode = 0644, |
812 .mode = 0644, |
769 .proc_handler = &proc_dointvec_minmax, |
813 .proc_handler = &proc_dosoftlockup_thresh, |
770 .strategy = &sysctl_intvec, |
814 .strategy = &sysctl_intvec, |
771 .extra1 = &neg_one, |
815 .extra1 = &neg_one, |
772 .extra2 = &sixty, |
816 .extra2 = &sixty, |
773 }, |
817 }, |
774 { |
818 { |
916 .ctl_name = VM_DIRTY_BACKGROUND, |
960 .ctl_name = VM_DIRTY_BACKGROUND, |
917 .procname = "dirty_background_ratio", |
961 .procname = "dirty_background_ratio", |
918 .data = &dirty_background_ratio, |
962 .data = &dirty_background_ratio, |
919 .maxlen = sizeof(dirty_background_ratio), |
963 .maxlen = sizeof(dirty_background_ratio), |
920 .mode = 0644, |
964 .mode = 0644, |
921 .proc_handler = &proc_dointvec_minmax, |
965 .proc_handler = &dirty_background_ratio_handler, |
922 .strategy = &sysctl_intvec, |
966 .strategy = &sysctl_intvec, |
923 .extra1 = &zero, |
967 .extra1 = &zero, |
924 .extra2 = &one_hundred, |
968 .extra2 = &one_hundred, |
|
969 }, |
|
970 { |
|
971 .ctl_name = CTL_UNNUMBERED, |
|
972 .procname = "dirty_background_bytes", |
|
973 .data = &dirty_background_bytes, |
|
974 .maxlen = sizeof(dirty_background_bytes), |
|
975 .mode = 0644, |
|
976 .proc_handler = &dirty_background_bytes_handler, |
|
977 .strategy = &sysctl_intvec, |
|
978 .extra1 = &one_ul, |
925 }, |
979 }, |
926 { |
980 { |
927 .ctl_name = VM_DIRTY_RATIO, |
981 .ctl_name = VM_DIRTY_RATIO, |
928 .procname = "dirty_ratio", |
982 .procname = "dirty_ratio", |
929 .data = &vm_dirty_ratio, |
983 .data = &vm_dirty_ratio, |
931 .mode = 0644, |
985 .mode = 0644, |
932 .proc_handler = &dirty_ratio_handler, |
986 .proc_handler = &dirty_ratio_handler, |
933 .strategy = &sysctl_intvec, |
987 .strategy = &sysctl_intvec, |
934 .extra1 = &zero, |
988 .extra1 = &zero, |
935 .extra2 = &one_hundred, |
989 .extra2 = &one_hundred, |
|
990 }, |
|
991 { |
|
992 .ctl_name = CTL_UNNUMBERED, |
|
993 .procname = "dirty_bytes", |
|
994 .data = &vm_dirty_bytes, |
|
995 .maxlen = sizeof(vm_dirty_bytes), |
|
996 .mode = 0644, |
|
997 .proc_handler = &dirty_bytes_handler, |
|
998 .strategy = &sysctl_intvec, |
|
999 .extra1 = &one_ul, |
936 }, |
1000 }, |
937 { |
1001 { |
938 .procname = "dirty_writeback_centisecs", |
1002 .procname = "dirty_writeback_centisecs", |
939 .data = &dirty_writeback_interval, |
1003 .data = &dirty_writeback_interval, |
940 .maxlen = sizeof(dirty_writeback_interval), |
1004 .maxlen = sizeof(dirty_writeback_interval), |
1048 .procname = "max_map_count", |
1112 .procname = "max_map_count", |
1049 .data = &sysctl_max_map_count, |
1113 .data = &sysctl_max_map_count, |
1050 .maxlen = sizeof(sysctl_max_map_count), |
1114 .maxlen = sizeof(sysctl_max_map_count), |
1051 .mode = 0644, |
1115 .mode = 0644, |
1052 .proc_handler = &proc_dointvec |
1116 .proc_handler = &proc_dointvec |
|
1117 }, |
|
1118 #else |
|
1119 { |
|
1120 .ctl_name = CTL_UNNUMBERED, |
|
1121 .procname = "nr_trim_pages", |
|
1122 .data = &sysctl_nr_trim_pages, |
|
1123 .maxlen = sizeof(sysctl_nr_trim_pages), |
|
1124 .mode = 0644, |
|
1125 .proc_handler = &proc_dointvec_minmax, |
|
1126 .strategy = &sysctl_intvec, |
|
1127 .extra1 = &zero, |
1053 }, |
1128 }, |
1054 #endif |
1129 #endif |
1055 { |
1130 { |
1056 .ctl_name = VM_LAPTOP_MODE, |
1131 .ctl_name = VM_LAPTOP_MODE, |
1057 .procname = "laptop_mode", |
1132 .procname = "laptop_mode", |
1649 * some sysctl variables are readonly even to root. |
1724 * some sysctl variables are readonly even to root. |
1650 */ |
1725 */ |
1651 |
1726 |
1652 static int test_perm(int mode, int op) |
1727 static int test_perm(int mode, int op) |
1653 { |
1728 { |
1654 if (!current->euid) |
1729 if (!current_euid()) |
1655 mode >>= 6; |
1730 mode >>= 6; |
1656 else if (in_egroup_p(0)) |
1731 else if (in_egroup_p(0)) |
1657 mode >>= 3; |
1732 mode >>= 3; |
1658 if ((op & ~mode & (MAY_READ|MAY_WRITE|MAY_EXEC)) == 0) |
1733 if ((op & ~mode & (MAY_READ|MAY_WRITE|MAY_EXEC)) == 0) |
1659 return 0; |
1734 return 0; |
2922 |
2997 |
2923 |
2998 |
2924 #else /* CONFIG_SYSCTL_SYSCALL */ |
2999 #else /* CONFIG_SYSCTL_SYSCALL */ |
2925 |
3000 |
2926 |
3001 |
2927 asmlinkage long sys_sysctl(struct __sysctl_args __user *args) |
3002 SYSCALL_DEFINE1(sysctl, struct __sysctl_args __user *, args) |
2928 { |
3003 { |
2929 struct __sysctl_args tmp; |
3004 struct __sysctl_args tmp; |
2930 int error; |
3005 int error; |
2931 |
3006 |
2932 if (copy_from_user(&tmp, args, sizeof(tmp))) |
3007 if (copy_from_user(&tmp, args, sizeof(tmp))) |