mirror of https://gitee.com/openkylin/linux.git
dell-laptop: Fix krealloc() misuse in parse_da_table()
If krealloc() returns NULL, it *doesn't* free the original. So any code of the form 'foo = krealloc(foo, …);' is almost certainly a bug. Signed-off-by: David Woodhouse <David.Woodhouse@intel.com> Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
This commit is contained in:
parent
7783819920
commit
a30450c7bb
|
@ -284,6 +284,7 @@ static void __init parse_da_table(const struct dmi_header *dm)
|
|||
{
|
||||
/* Final token is a terminator, so we don't want to copy it */
|
||||
int tokens = (dm->length-11)/sizeof(struct calling_interface_token)-1;
|
||||
struct calling_interface_token *new_da_tokens;
|
||||
struct calling_interface_structure *table =
|
||||
container_of(dm, struct calling_interface_structure, header);
|
||||
|
||||
|
@ -296,12 +297,13 @@ static void __init parse_da_table(const struct dmi_header *dm)
|
|||
da_command_address = table->cmdIOAddress;
|
||||
da_command_code = table->cmdIOCode;
|
||||
|
||||
da_tokens = krealloc(da_tokens, (da_num_tokens + tokens) *
|
||||
sizeof(struct calling_interface_token),
|
||||
GFP_KERNEL);
|
||||
new_da_tokens = krealloc(da_tokens, (da_num_tokens + tokens) *
|
||||
sizeof(struct calling_interface_token),
|
||||
GFP_KERNEL);
|
||||
|
||||
if (!da_tokens)
|
||||
if (!new_da_tokens)
|
||||
return;
|
||||
da_tokens = new_da_tokens;
|
||||
|
||||
memcpy(da_tokens+da_num_tokens, table->tokens,
|
||||
sizeof(struct calling_interface_token) * tokens);
|
||||
|
|
Loading…
Reference in New Issue