diff options
Diffstat (limited to 'kernel/sysctl_binary.c')
| -rw-r--r-- | kernel/sysctl_binary.c | 18 |
1 files changed, 6 insertions, 12 deletions
diff --git a/kernel/sysctl_binary.c b/kernel/sysctl_binary.c index 8f5d16e0707a..1357c5786064 100644 --- a/kernel/sysctl_binary.c +++ b/kernel/sysctl_binary.c | |||
| @@ -13,6 +13,8 @@ | |||
| 13 | #include <linux/file.h> | 13 | #include <linux/file.h> |
| 14 | #include <linux/ctype.h> | 14 | #include <linux/ctype.h> |
| 15 | #include <linux/netdevice.h> | 15 | #include <linux/netdevice.h> |
| 16 | #include <linux/kernel.h> | ||
| 17 | #include <linux/slab.h> | ||
| 16 | 18 | ||
| 17 | #ifdef CONFIG_SYSCTL_SYSCALL | 19 | #ifdef CONFIG_SYSCTL_SYSCALL |
| 18 | 20 | ||
| @@ -223,7 +225,6 @@ static const struct bin_table bin_net_ipv4_route_table[] = { | |||
| 223 | { CTL_INT, NET_IPV4_ROUTE_MTU_EXPIRES, "mtu_expires" }, | 225 | { CTL_INT, NET_IPV4_ROUTE_MTU_EXPIRES, "mtu_expires" }, |
| 224 | { CTL_INT, NET_IPV4_ROUTE_MIN_PMTU, "min_pmtu" }, | 226 | { CTL_INT, NET_IPV4_ROUTE_MIN_PMTU, "min_pmtu" }, |
| 225 | { CTL_INT, NET_IPV4_ROUTE_MIN_ADVMSS, "min_adv_mss" }, | 227 | { CTL_INT, NET_IPV4_ROUTE_MIN_ADVMSS, "min_adv_mss" }, |
| 226 | { CTL_INT, NET_IPV4_ROUTE_SECRET_INTERVAL, "secret_interval" }, | ||
| 227 | {} | 228 | {} |
| 228 | }; | 229 | }; |
| 229 | 230 | ||
| @@ -1124,11 +1125,6 @@ out: | |||
| 1124 | return result; | 1125 | return result; |
| 1125 | } | 1126 | } |
| 1126 | 1127 | ||
| 1127 | static unsigned hex_value(int ch) | ||
| 1128 | { | ||
| 1129 | return isdigit(ch) ? ch - '0' : ((ch | 0x20) - 'a') + 10; | ||
| 1130 | } | ||
| 1131 | |||
| 1132 | static ssize_t bin_uuid(struct file *file, | 1128 | static ssize_t bin_uuid(struct file *file, |
| 1133 | void __user *oldval, size_t oldlen, void __user *newval, size_t newlen) | 1129 | void __user *oldval, size_t oldlen, void __user *newval, size_t newlen) |
| 1134 | { | 1130 | { |
| @@ -1156,7 +1152,8 @@ static ssize_t bin_uuid(struct file *file, | |||
| 1156 | if (!isxdigit(str[0]) || !isxdigit(str[1])) | 1152 | if (!isxdigit(str[0]) || !isxdigit(str[1])) |
| 1157 | goto out; | 1153 | goto out; |
| 1158 | 1154 | ||
| 1159 | uuid[i] = (hex_value(str[0]) << 4) | hex_value(str[1]); | 1155 | uuid[i] = (hex_to_bin(str[0]) << 4) | |
| 1156 | hex_to_bin(str[1]); | ||
| 1160 | str += 2; | 1157 | str += 2; |
| 1161 | if (*str == '-') | 1158 | if (*str == '-') |
| 1162 | str++; | 1159 | str++; |
| @@ -1331,7 +1328,7 @@ static ssize_t binary_sysctl(const int *name, int nlen, | |||
| 1331 | ssize_t result; | 1328 | ssize_t result; |
| 1332 | char *pathname; | 1329 | char *pathname; |
| 1333 | int flags; | 1330 | int flags; |
| 1334 | int acc_mode, fmode; | 1331 | int acc_mode; |
| 1335 | 1332 | ||
| 1336 | pathname = sysctl_getname(name, nlen, &table); | 1333 | pathname = sysctl_getname(name, nlen, &table); |
| 1337 | result = PTR_ERR(pathname); | 1334 | result = PTR_ERR(pathname); |
| @@ -1342,15 +1339,12 @@ static ssize_t binary_sysctl(const int *name, int nlen, | |||
| 1342 | if (oldval && oldlen && newval && newlen) { | 1339 | if (oldval && oldlen && newval && newlen) { |
| 1343 | flags = O_RDWR; | 1340 | flags = O_RDWR; |
| 1344 | acc_mode = MAY_READ | MAY_WRITE; | 1341 | acc_mode = MAY_READ | MAY_WRITE; |
| 1345 | fmode = FMODE_READ | FMODE_WRITE; | ||
| 1346 | } else if (newval && newlen) { | 1342 | } else if (newval && newlen) { |
| 1347 | flags = O_WRONLY; | 1343 | flags = O_WRONLY; |
| 1348 | acc_mode = MAY_WRITE; | 1344 | acc_mode = MAY_WRITE; |
| 1349 | fmode = FMODE_WRITE; | ||
| 1350 | } else if (oldval && oldlen) { | 1345 | } else if (oldval && oldlen) { |
| 1351 | flags = O_RDONLY; | 1346 | flags = O_RDONLY; |
| 1352 | acc_mode = MAY_READ; | 1347 | acc_mode = MAY_READ; |
| 1353 | fmode = FMODE_READ; | ||
| 1354 | } else { | 1348 | } else { |
| 1355 | result = 0; | 1349 | result = 0; |
| 1356 | goto out_putname; | 1350 | goto out_putname; |
| @@ -1361,7 +1355,7 @@ static ssize_t binary_sysctl(const int *name, int nlen, | |||
| 1361 | if (result) | 1355 | if (result) |
| 1362 | goto out_putname; | 1356 | goto out_putname; |
| 1363 | 1357 | ||
| 1364 | result = may_open(&nd.path, acc_mode, fmode); | 1358 | result = may_open(&nd.path, acc_mode, flags); |
| 1365 | if (result) | 1359 | if (result) |
| 1366 | goto out_putpath; | 1360 | goto out_putpath; |
| 1367 | 1361 | ||
