flatten_string/process env: realign env and clear trailing bits

envs are stuck after args which are now possibly unaligned, and used
from a non-aligned pointer in prepare_process_ranges_args_envs (env)

The memory immediately after args/envs is copied anyway with memcpy_long,
so make sure the bits are initialized and realign env correctly

Fixes: 70e52faf36 ("flatten_strings: do not return unused trailing bits")
Change-Id: Ic747e947d151c0eea65dec36bc9c888cf6e0c394
This commit is contained in:
Dominique Martinet
2018-10-16 10:52:39 +09:00
committed by Dominique Martinet
parent 38e68f358a
commit 525b90d028
3 changed files with 22 additions and 9 deletions

View File

@@ -234,7 +234,7 @@ int memcmp(const void *s1, const void *s2, size_t n)
*/
int flatten_strings_from_user(char *pre_strings, char **strings, char **flat)
{
int full_len, i;
int full_len, len, i;
int nr_strings = 0;
int pre_strings_count = 0;
int pre_strings_len = 0;
@@ -333,5 +333,8 @@ int flatten_strings_from_user(char *pre_strings, char **strings, char **flat)
_flat[nr_strings + pre_strings_count + 1] = p - (char *)_flat;
*flat = (char *)_flat;
return p - (char *)_flat;
len = p - (char *)_flat;
if (len < full_len)
memset(p, 0, full_len - len);
return len;
}