[linux-cifs-client] [PATCH] [CIFS] Fixed race: Read freed memory
when accessing cifs_sb->prepath
Igor Mammedov
niallain at gmail.com
Mon Oct 6 16:22:56 GMT 2008
Jeff Layton wrote:
> On Mon, 06 Oct 2008 19:51:08 +0400
> Igor Mammedov <niallain at gmail.com> wrote:
>
>> >From a902e94f1e603855797a56237a30726e088f3f05 Mon Sep 17 00:00:00 2001
>> From: Igor Mammedov <niallain at gmail.com>
>> Date: Mon, 6 Oct 2008 18:28:21 +0400
>> Subject: [PATCH] [CIFS] Fixed race: Read freed memory when accessing cifs_sb->prepath
>>
>> Signed-off-by: Igor Mammedov <niallain at gmail.com>
>> ---
>> fs/cifs/connect.c | 4 +++-
>> 1 files changed, 3 insertions(+), 1 deletions(-)
>>
>> diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
>> index 4c13bcd..0665b89 100644
>> --- a/fs/cifs/connect.c
>> +++ b/fs/cifs/connect.c
>> @@ -2308,13 +2308,15 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
>> the password ptr is put in the new session structure (in which case the
>> password will be freed at unmount time) */
>> out:
>> + if (rc)
>> + kfree(volume_info.prepath);
>> +
>> /* zero out password before freeing */
>> if (volume_info.password != NULL) {
>> memset(volume_info.password, 0, strlen(volume_info.password));
>> kfree(volume_info.password);
>> }
>> kfree(volume_info.UNC);
>> - kfree(volume_info.prepath);
>> FreeXid(xid);
>> return rc;
>> }
>
> I don't see any race here. Can you explain how this happens? The only place
> we reference volume_info.prepath is here:
>
> /* calculate prepath */
> cifs_sb->prepath = volume_info.prepath;
> if (cifs_sb->prepath) {
> cifs_sb->prepathlen = strlen(cifs_sb->prepath);
> /* we can not convert the / to \ in the path
> separators in the prefixpath yet because we do not
> know (until reset_cifs_unix_caps is called later)
> whether POSIX PATH CAP is available. We normalize
> the / to \ after reset_cifs_unix_caps is called */
> volume_info.prepath = NULL;
>
> The pointer should be NULL after this, and that should make the kfree
> harmless.
Sorry I've not noticed:
'volume_info.prepath = NULL;'
--
Best regards,
-------------------------
Igor Mammedov,
niallain "at" gmail.com
More information about the linux-cifs-client
mailing list