diff options
Diffstat (limited to 'kernel/sysctl_binary.c')
-rw-r--r-- | kernel/sysctl_binary.c | 43 |
1 files changed, 9 insertions, 34 deletions
diff --git a/kernel/sysctl_binary.c b/kernel/sysctl_binary.c index 5a6384450501..ebf72358e86a 100644 --- a/kernel/sysctl_binary.c +++ b/kernel/sysctl_binary.c | |||
@@ -387,7 +387,6 @@ static const struct bin_table bin_net_ipv4_table[] = { | |||
387 | { CTL_INT, NET_TCP_MODERATE_RCVBUF, "tcp_moderate_rcvbuf" }, | 387 | { CTL_INT, NET_TCP_MODERATE_RCVBUF, "tcp_moderate_rcvbuf" }, |
388 | { CTL_INT, NET_TCP_TSO_WIN_DIVISOR, "tcp_tso_win_divisor" }, | 388 | { CTL_INT, NET_TCP_TSO_WIN_DIVISOR, "tcp_tso_win_divisor" }, |
389 | { CTL_STR, NET_TCP_CONG_CONTROL, "tcp_congestion_control" }, | 389 | { CTL_STR, NET_TCP_CONG_CONTROL, "tcp_congestion_control" }, |
390 | { CTL_INT, NET_TCP_ABC, "tcp_abc" }, | ||
391 | { CTL_INT, NET_TCP_MTU_PROBING, "tcp_mtu_probing" }, | 390 | { CTL_INT, NET_TCP_MTU_PROBING, "tcp_mtu_probing" }, |
392 | { CTL_INT, NET_TCP_BASE_MSS, "tcp_base_mss" }, | 391 | { CTL_INT, NET_TCP_BASE_MSS, "tcp_base_mss" }, |
393 | { CTL_INT, NET_IPV4_TCP_WORKAROUND_SIGNED_WINDOWS, "tcp_workaround_signed_windows" }, | 392 | { CTL_INT, NET_IPV4_TCP_WORKAROUND_SIGNED_WINDOWS, "tcp_workaround_signed_windows" }, |
@@ -971,7 +970,6 @@ out: | |||
971 | static ssize_t bin_intvec(struct file *file, | 970 | static ssize_t bin_intvec(struct file *file, |
972 | void __user *oldval, size_t oldlen, void __user *newval, size_t newlen) | 971 | void __user *oldval, size_t oldlen, void __user *newval, size_t newlen) |
973 | { | 972 | { |
974 | mm_segment_t old_fs = get_fs(); | ||
975 | ssize_t copied = 0; | 973 | ssize_t copied = 0; |
976 | char *buffer; | 974 | char *buffer; |
977 | ssize_t result; | 975 | ssize_t result; |
@@ -984,13 +982,10 @@ static ssize_t bin_intvec(struct file *file, | |||
984 | if (oldval && oldlen) { | 982 | if (oldval && oldlen) { |
985 | unsigned __user *vec = oldval; | 983 | unsigned __user *vec = oldval; |
986 | size_t length = oldlen / sizeof(*vec); | 984 | size_t length = oldlen / sizeof(*vec); |
987 | loff_t pos = 0; | ||
988 | char *str, *end; | 985 | char *str, *end; |
989 | int i; | 986 | int i; |
990 | 987 | ||
991 | set_fs(KERNEL_DS); | 988 | result = kernel_read(file, 0, buffer, BUFSZ - 1); |
992 | result = vfs_read(file, buffer, BUFSZ - 1, &pos); | ||
993 | set_fs(old_fs); | ||
994 | if (result < 0) | 989 | if (result < 0) |
995 | goto out_kfree; | 990 | goto out_kfree; |
996 | 991 | ||
@@ -1017,7 +1012,6 @@ static ssize_t bin_intvec(struct file *file, | |||
1017 | if (newval && newlen) { | 1012 | if (newval && newlen) { |
1018 | unsigned __user *vec = newval; | 1013 | unsigned __user *vec = newval; |
1019 | size_t length = newlen / sizeof(*vec); | 1014 | size_t length = newlen / sizeof(*vec); |
1020 | loff_t pos = 0; | ||
1021 | char *str, *end; | 1015 | char *str, *end; |
1022 | int i; | 1016 | int i; |
1023 | 1017 | ||
@@ -1033,9 +1027,7 @@ static ssize_t bin_intvec(struct file *file, | |||
1033 | str += snprintf(str, end - str, "%lu\t", value); | 1027 | str += snprintf(str, end - str, "%lu\t", value); |
1034 | } | 1028 | } |
1035 | 1029 | ||
1036 | set_fs(KERNEL_DS); | 1030 | result = kernel_write(file, buffer, str - buffer, 0); |
1037 | result = vfs_write(file, buffer, str - buffer, &pos); | ||
1038 | set_fs(old_fs); | ||
1039 | if (result < 0) | 1031 | if (result < 0) |
1040 | goto out_kfree; | 1032 | goto out_kfree; |
1041 | } | 1033 | } |
@@ -1049,7 +1041,6 @@ out: | |||
1049 | static ssize_t bin_ulongvec(struct file *file, | 1041 | static ssize_t bin_ulongvec(struct file *file, |
1050 | void __user *oldval, size_t oldlen, void __user *newval, size_t newlen) | 1042 | void __user *oldval, size_t oldlen, void __user *newval, size_t newlen) |
1051 | { | 1043 | { |
1052 | mm_segment_t old_fs = get_fs(); | ||
1053 | ssize_t copied = 0; | 1044 | ssize_t copied = 0; |
1054 | char *buffer; | 1045 | char *buffer; |
1055 | ssize_t result; | 1046 | ssize_t result; |
@@ -1062,13 +1053,10 @@ static ssize_t bin_ulongvec(struct file *file, | |||
1062 | if (oldval && oldlen) { | 1053 | if (oldval && oldlen) { |
1063 | unsigned long __user *vec = oldval; | 1054 | unsigned long __user *vec = oldval; |
1064 | size_t length = oldlen / sizeof(*vec); | 1055 | size_t length = oldlen / sizeof(*vec); |
1065 | loff_t pos = 0; | ||
1066 | char *str, *end; | 1056 | char *str, *end; |
1067 | int i; | 1057 | int i; |
1068 | 1058 | ||
1069 | set_fs(KERNEL_DS); | 1059 | result = kernel_read(file, 0, buffer, BUFSZ - 1); |
1070 | result = vfs_read(file, buffer, BUFSZ - 1, &pos); | ||
1071 | set_fs(old_fs); | ||
1072 | if (result < 0) | 1060 | if (result < 0) |
1073 | goto out_kfree; | 1061 | goto out_kfree; |
1074 | 1062 | ||
@@ -1095,7 +1083,6 @@ static ssize_t bin_ulongvec(struct file *file, | |||
1095 | if (newval && newlen) { | 1083 | if (newval && newlen) { |
1096 | unsigned long __user *vec = newval; | 1084 | unsigned long __user *vec = newval; |
1097 | size_t length = newlen / sizeof(*vec); | 1085 | size_t length = newlen / sizeof(*vec); |
1098 | loff_t pos = 0; | ||
1099 | char *str, *end; | 1086 | char *str, *end; |
1100 | int i; | 1087 | int i; |
1101 | 1088 | ||
@@ -1111,9 +1098,7 @@ static ssize_t bin_ulongvec(struct file *file, | |||
1111 | str += snprintf(str, end - str, "%lu\t", value); | 1098 | str += snprintf(str, end - str, "%lu\t", value); |
1112 | } | 1099 | } |
1113 | 1100 | ||
1114 | set_fs(KERNEL_DS); | 1101 | result = kernel_write(file, buffer, str - buffer, 0); |
1115 | result = vfs_write(file, buffer, str - buffer, &pos); | ||
1116 | set_fs(old_fs); | ||
1117 | if (result < 0) | 1102 | if (result < 0) |
1118 | goto out_kfree; | 1103 | goto out_kfree; |
1119 | } | 1104 | } |
@@ -1127,19 +1112,15 @@ out: | |||
1127 | static ssize_t bin_uuid(struct file *file, | 1112 | static ssize_t bin_uuid(struct file *file, |
1128 | void __user *oldval, size_t oldlen, void __user *newval, size_t newlen) | 1113 | void __user *oldval, size_t oldlen, void __user *newval, size_t newlen) |
1129 | { | 1114 | { |
1130 | mm_segment_t old_fs = get_fs(); | ||
1131 | ssize_t result, copied = 0; | 1115 | ssize_t result, copied = 0; |
1132 | 1116 | ||
1133 | /* Only supports reads */ | 1117 | /* Only supports reads */ |
1134 | if (oldval && oldlen) { | 1118 | if (oldval && oldlen) { |
1135 | loff_t pos = 0; | ||
1136 | char buf[40], *str = buf; | 1119 | char buf[40], *str = buf; |
1137 | unsigned char uuid[16]; | 1120 | unsigned char uuid[16]; |
1138 | int i; | 1121 | int i; |
1139 | 1122 | ||
1140 | set_fs(KERNEL_DS); | 1123 | result = kernel_read(file, 0, buf, sizeof(buf) - 1); |
1141 | result = vfs_read(file, buf, sizeof(buf) - 1, &pos); | ||
1142 | set_fs(old_fs); | ||
1143 | if (result < 0) | 1124 | if (result < 0) |
1144 | goto out; | 1125 | goto out; |
1145 | 1126 | ||
@@ -1175,18 +1156,14 @@ out: | |||
1175 | static ssize_t bin_dn_node_address(struct file *file, | 1156 | static ssize_t bin_dn_node_address(struct file *file, |
1176 | void __user *oldval, size_t oldlen, void __user *newval, size_t newlen) | 1157 | void __user *oldval, size_t oldlen, void __user *newval, size_t newlen) |
1177 | { | 1158 | { |
1178 | mm_segment_t old_fs = get_fs(); | ||
1179 | ssize_t result, copied = 0; | 1159 | ssize_t result, copied = 0; |
1180 | 1160 | ||
1181 | if (oldval && oldlen) { | 1161 | if (oldval && oldlen) { |
1182 | loff_t pos = 0; | ||
1183 | char buf[15], *nodep; | 1162 | char buf[15], *nodep; |
1184 | unsigned long area, node; | 1163 | unsigned long area, node; |
1185 | __le16 dnaddr; | 1164 | __le16 dnaddr; |
1186 | 1165 | ||
1187 | set_fs(KERNEL_DS); | 1166 | result = kernel_read(file, 0, buf, sizeof(buf) - 1); |
1188 | result = vfs_read(file, buf, sizeof(buf) - 1, &pos); | ||
1189 | set_fs(old_fs); | ||
1190 | if (result < 0) | 1167 | if (result < 0) |
1191 | goto out; | 1168 | goto out; |
1192 | 1169 | ||
@@ -1194,9 +1171,10 @@ static ssize_t bin_dn_node_address(struct file *file, | |||
1194 | 1171 | ||
1195 | /* Convert the decnet address to binary */ | 1172 | /* Convert the decnet address to binary */ |
1196 | result = -EIO; | 1173 | result = -EIO; |
1197 | nodep = strchr(buf, '.') + 1; | 1174 | nodep = strchr(buf, '.'); |
1198 | if (!nodep) | 1175 | if (!nodep) |
1199 | goto out; | 1176 | goto out; |
1177 | ++nodep; | ||
1200 | 1178 | ||
1201 | area = simple_strtoul(buf, NULL, 10); | 1179 | area = simple_strtoul(buf, NULL, 10); |
1202 | node = simple_strtoul(nodep, NULL, 10); | 1180 | node = simple_strtoul(nodep, NULL, 10); |
@@ -1215,7 +1193,6 @@ static ssize_t bin_dn_node_address(struct file *file, | |||
1215 | } | 1193 | } |
1216 | 1194 | ||
1217 | if (newval && newlen) { | 1195 | if (newval && newlen) { |
1218 | loff_t pos = 0; | ||
1219 | __le16 dnaddr; | 1196 | __le16 dnaddr; |
1220 | char buf[15]; | 1197 | char buf[15]; |
1221 | int len; | 1198 | int len; |
@@ -1232,9 +1209,7 @@ static ssize_t bin_dn_node_address(struct file *file, | |||
1232 | le16_to_cpu(dnaddr) >> 10, | 1209 | le16_to_cpu(dnaddr) >> 10, |
1233 | le16_to_cpu(dnaddr) & 0x3ff); | 1210 | le16_to_cpu(dnaddr) & 0x3ff); |
1234 | 1211 | ||
1235 | set_fs(KERNEL_DS); | 1212 | result = kernel_write(file, buf, len, 0); |
1236 | result = vfs_write(file, buf, len, &pos); | ||
1237 | set_fs(old_fs); | ||
1238 | if (result < 0) | 1213 | if (result < 0) |
1239 | goto out; | 1214 | goto out; |
1240 | } | 1215 | } |