git: 2f2a081e5c9d - stable/13 - Fix race in case of device destruction.
Alexander Motin
mav at FreeBSD.org
Tue Apr 27 12:47:41 UTC 2021
The branch stable/13 has been updated by mav:
URL: https://cgit.FreeBSD.org/src/commit/?id=2f2a081e5c9d1418c44b8b26501d9d34e357fca7
commit 2f2a081e5c9d1418c44b8b26501d9d34e357fca7
Author: Alexander Motin <mav at FreeBSD.org>
AuthorDate: 2021-04-13 15:19:10 +0000
Commit: Alexander Motin <mav at FreeBSD.org>
CommitDate: 2021-04-27 12:47:39 +0000
Fix race in case of device destruction.
During device destruction it is possible that open() succeed, but
fdevname() return NULL, that can't be assigned to string variable.
Fix that by adding explicit NULL check.
Also while there switch from fdevname() to fdevname_r().
Sponsored by: iXsystems, Inc.
MFC after: 2 weeks
(cherry picked from commit e49d3eb40324eaffaa13b93f2c4173dfa04dfa34)
---
lib/libdevdctl/event.cc | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/lib/libdevdctl/event.cc b/lib/libdevdctl/event.cc
index 36c9b725fed1..76ef1896975a 100644
--- a/lib/libdevdctl/event.cc
+++ b/lib/libdevdctl/event.cc
@@ -277,6 +277,7 @@ Event::GetTimestamp() const
bool
Event::DevPath(std::string &path) const
{
+ char buf[SPECNAMELEN + 1];
string devName;
if (!DevName(devName))
@@ -288,7 +289,11 @@ Event::DevPath(std::string &path) const
return (false);
/* Normalize the device name in case the DEVFS event is for a link. */
- devName = fdevname(devFd);
+ if (fdevname_r(devFd, buf, sizeof(buf)) == NULL) {
+ close(devFd);
+ return (false);
+ }
+ devName = buf;
path = _PATH_DEV + devName;
close(devFd);
More information about the dev-commits-src-branches
mailing list