summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Golle <daniel@makrotopia.org>2023-01-13 18:53:07 +0000
committerDaniel Golle <daniel@makrotopia.org>2023-01-16 21:07:48 +0000
commit6b9629b7448cd11fc204c63608910700a4b47040 (patch)
treee8ba17b6c8790042a4d9fbdf7e99e31c5e24ef4d
parent04d7570f473ca2a657a89f74ac4027f6c94f4305 (diff)
downloadprocd-6b9629b7448cd11fc204c63608910700a4b47040.tar.gz
jail: don't assume positive return value of creat
Handle a (theoretical) error case when calling creat in create_dev_console function. Coverity CID: 1490100 (Argument cannot be negative) Signed-off-by: Daniel Golle <daniel@makrotopia.org>
-rw-r--r--jail/jail.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/jail/jail.c b/jail/jail.c
index 31b64e5..09780ac 100644
--- a/jail/jail.c
+++ b/jail/jail.c
@@ -374,7 +374,7 @@ static int create_dev_console(const char *jail_root)
{
char *console_fname;
char dev_console_path[PATH_MAX];
- int slave_console_fd;
+ int slave_console_fd, dev_console_dummy;
/* Open UNIX/98 virtual console */
console_fd = posix_openpt(O_RDWR | O_NOCTTY);
@@ -394,7 +394,11 @@ static int create_dev_console(const char *jail_root)
/* mount-bind PTY slave to /dev/console in jail */
snprintf(dev_console_path, sizeof(dev_console_path), "%s/dev/console", jail_root);
- close(creat(dev_console_path, 0620));
+ dev_console_dummy = creat(dev_console_path, 0620);
+ if (dev_console_dummy < 0)
+ goto no_console;
+
+ close(dev_console_dummy);
if (mount(console_fname, dev_console_path, "bind", MS_BIND, NULL))
goto no_console;