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()
|
Список | 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 по дате отправления: