Re: BUG #14929: Unchecked AllocateDir() return value inrestoreTwoPhaseData()

Поиск
Список
Период
Сортировка
От Amit Langote
Тема Re: BUG #14929: Unchecked AllocateDir() return value inrestoreTwoPhaseData()
Дата
Msg-id 728f1223-9a35-56cb-8854-afb84849c2cc@lab.ntt.co.jp
обсуждение исходный текст
Ответ на BUG #14929: Unchecked AllocateDir() return value inrestoreTwoPhaseData()  (bianpan2016@163.com)
Ответы Re: BUG #14929: Unchecked AllocateDir() return value in restoreTwoPhaseData()  (Michael Paquier <michael.paquier@gmail.com>)
Список pgsql-bugs
On 2017/11/27 18:31, bianpan2016@163.com wrote:
> The following bug has been logged on the website:
> 
> Bug reference:      14929
> Logged by:          Pan Bian
> Email address:      bianpan2016@163.com
> PostgreSQL version: 10.1
> Operating system:   Linux
> Description:        
> 
> File: src/backend/access/transam/twophase.c
> Function: restoreTwoPhaseData
> Line: 1738
> 
> AllocateDir() will return a NULL pointer if it fails to open the specified
> directory. However, in function restoreTwoPhaseData(), its return value is
> not checked. This may result in a NULL pointer dereference when trying to
> free it (see line 1759).
> 
> For your convenience, I copy and paste related codes as follows:
> 
> 1732 void
> 1733 restoreTwoPhaseData(void)
> 1734 {
> 1735     DIR        *cldir;
> 1736     struct dirent *clde;
> 1737 
> 1738     cldir = AllocateDir(TWOPHASE_DIR);
> 1739     LWLockAcquire(TwoPhaseStateLock, LW_EXCLUSIVE);
> 1740     while ((clde = ReadDir(cldir, TWOPHASE_DIR)) != NULL)
> 1741     {
>          ...
> 1758     LWLockRelease(TwoPhaseStateLock);
> 1759     FreeDir(cldir);
> 1760 }

Thanks for the report.

It seems like a good idea to check cldir for NULL before freeing.  Please
find attached a patch to implement the same.

Thanks,
Amit

Вложения

В списке pgsql-bugs по дате отправления:

Предыдущее
От: Amit Langote
Дата:
Сообщение: Re: BUG #14928: Unchecked SearchSysCacheCopy1() return value
Следующее
От: Michael Paquier
Дата:
Сообщение: Re: BUG #14929: Unchecked AllocateDir() return value in restoreTwoPhaseData()