snprintf() will return the 'ideal' length which may be larger than real buffer length, if we only want to use real length, need use scnprintf() instead of.
Showing the changes to kernel/sysctl_binary.c (1 of 1 file). Show all
Unified · Split
| @@ -1024,7 +1024,7 @@ static ssize_t bin_intvec(struct file *file, · 1023 unmodified lines | |||
| 1024 | if (get_user(value, vec + i)) | 1024 | if (get_user(value, vec + i)) |
| 1025 | goto out_kfree; | 1025 | goto out_kfree; |
| 1026 | 1026 | ||
| 1027 | str += snprintf(str, end - str, "%lu\t", value); | 1027 | str += scnprintf(str, end - str, "%lu\t", value); |
| 1028 | } | 1028 | } |
| 1029 | 1029 | ||
| 1030 | result = kernel_write(file, buffer, str - buffer, 0); | 1030 | result = kernel_write(file, buffer, str - buffer, 0); |
| @@ -1095,7 +1095,7 @@ static ssize_t bin_ulongvec(struct file *file, · 64 unmodified lines | |||
| 1095 | if (get_user(value, vec + i)) | 1095 | if (get_user(value, vec + i)) |
| 1096 | goto out_kfree; | 1096 | goto out_kfree; |
| 1097 | 1097 | ||
| 1098 | str += snprintf(str, end - str, "%lu\t", value); | 1098 | str += scnprintf(str, end - str, "%lu\t", value); |
| 1099 | } | 1099 | } |
| 1100 | 1100 | ||
| 1101 | result = kernel_write(file, buffer, str - buffer, 0); | 1101 | result = kernel_write(file, buffer, str - buffer, 0); |
| @@ -1205,7 +1205,7 @@ static ssize_t bin_dn_node_address(struct file *file, · 103 unmodified lines | |||
| 1205 | if (get_user(dnaddr, (__le16 __user *)newval)) | 1205 | if (get_user(dnaddr, (__le16 __user *)newval)) |
| 1206 | goto out; | 1206 | goto out; |
| 1207 | 1207 | ||
| 1208 | len = snprintf(buf, sizeof(buf), "%hu.%hu", | 1208 | len = scnprintf(buf, sizeof(buf), "%hu.%hu", |
| 1209 | le16_to_cpu(dnaddr) >> 10, | 1209 | le16_to_cpu(dnaddr) >> 10, |
| 1210 | le16_to_cpu(dnaddr) & 0x3ff); | 1210 | le16_to_cpu(dnaddr) & 0x3ff); |
| 1211 | 1211 | ||