History

strscpy: zero any trailing garbage bytes in the destination

It's possible that the destination can be shadowed in userspace (as, for example, the perf buffers are now). So we should take care not to leak data that could be inspected by userspace.

Chris Metcalf committed 11 years ago

Commit 990486c1 parent c753bf31 file · +2 −1Browse files

Showing the changes to lib/string.c (1 of 1 file). Show all

Unified · Split

lib/string.c+2−1
@@ -203,12 +203,13 @@ ssize_t strscpy(char *dest, const char *src, size_t count) · 202 unmodified lines
203203 unsigned long c, data;
204204
205205 c = *(unsigned long *)(src+res);
206− *(unsigned long *)(dest+res) = c;
207206 if (has_zero(c, &data, &constants)) {
208207 data = prep_zero_mask(c, data, &constants);
209208 data = create_zero_mask(data);
209+ *(unsigned long *)(dest+res) = c & zero_bytemask(data);
210210 return res + find_zero(data);
211211 }
212+ *(unsigned long *)(dest+res) = c;
212213 res += sizeof(unsigned long);
213214 count -= sizeof(unsigned long);
214215 max -= sizeof(unsigned long);