Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:15.5:Update
fwupd.30945
fwupd-Do-not-assume-a-file-descriptor-of-zero-i...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File fwupd-Do-not-assume-a-file-descriptor-of-zero-is-invalid.patch of Package fwupd.30945
From c03870c206dd07ded2c7dd4e7046d644f7c5c7fb Mon Sep 17 00:00:00 2001 From: Richard Hughes <richard@hughsie.com> Date: Tue, 23 May 2023 12:12:31 +0100 Subject: [PATCH] Do not assume a file descriptor of zero is invalid The open() call says than any valid result is 'a nonnegative integer'. See also https://github.com/fwupd/fwupd/discussions/5841 --- libfwupdplugin/fu-udev-device.c | 17 +++++++++-------- plugins/logind/fu-logind-plugin.c | 9 +++++---- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/libfwupdplugin/fu-udev-device.c b/libfwupdplugin/fu-udev-device.c index ffafc04c1..dd0d19c37 100644 --- a/libfwupdplugin/fu-udev-device.c +++ b/libfwupdplugin/fu-udev-device.c @@ -1432,7 +1432,7 @@ fu_udev_device_set_fd(FuUdevDevice *self, gint fd) FuUdevDevicePrivate *priv = GET_PRIVATE(self); g_return_if_fail(FU_IS_UDEV_DEVICE(self)); - if (priv->fd > 0) + if (priv->fd >= 0) close(priv->fd); priv->fd = fd; } @@ -1554,10 +1554,10 @@ fu_udev_device_close(FuDevice *device, GError **error) FuUdevDevicePrivate *priv = GET_PRIVATE(self); /* close device */ - if (priv->fd > 0) { + if (priv->fd >= 0) { if (!g_close(priv->fd, error)) return FALSE; - priv->fd = 0; + priv->fd = -1; } /* success */ @@ -1598,7 +1598,7 @@ fu_udev_device_ioctl(FuUdevDevice *self, g_return_val_if_fail(error == NULL || *error == NULL, FALSE); /* not open! */ - if (priv->fd == 0) { + if (priv->fd < 0) { g_set_error(error, FWUPD_ERROR, FWUPD_ERROR_INTERNAL, @@ -1679,7 +1679,7 @@ fu_udev_device_pread(FuUdevDevice *self, goffset port, guint8 *buf, gsize bufsz, g_return_val_if_fail(error == NULL || *error == NULL, FALSE); /* not open! */ - if (priv->fd == 0) { + if (priv->fd < 0) { g_set_error(error, FWUPD_ERROR, FWUPD_ERROR_INTERNAL, @@ -1730,7 +1730,7 @@ fu_udev_device_seek(FuUdevDevice *self, goffset offset, GError **error) g_return_val_if_fail(error == NULL || *error == NULL, FALSE); /* not open! */ - if (priv->fd == 0) { + if (priv->fd < 0) { g_set_error(error, FWUPD_ERROR, FWUPD_ERROR_INTERNAL, @@ -1787,7 +1787,7 @@ fu_udev_device_pwrite(FuUdevDevice *self, g_return_val_if_fail(error == NULL || *error == NULL, FALSE); /* not open! */ - if (priv->fd == 0) { + if (priv->fd < 0) { g_set_error(error, FWUPD_ERROR, FWUPD_ERROR_INTERNAL, @@ -2283,7 +2283,7 @@ fu_udev_device_finalize(GObject *object) g_free(priv->device_file); if (priv->udev_device != NULL) g_object_unref(priv->udev_device); - if (priv->fd > 0) + if (priv->fd >= 0) g_close(priv->fd, NULL); G_OBJECT_CLASS(fu_udev_device_parent_class)->finalize(object); @@ -2293,6 +2293,7 @@ static void fu_udev_device_init(FuUdevDevice *self) { FuUdevDevicePrivate *priv = GET_PRIVATE(self); + priv->fd = -1; priv->flags = FU_UDEV_DEVICE_FLAG_OPEN_READ | FU_UDEV_DEVICE_FLAG_OPEN_WRITE; fu_device_set_acquiesce_delay(FU_DEVICE(self), 2500); } diff --git a/plugins/logind/fu-logind-plugin.c b/plugins/logind/fu-logind-plugin.c index cd9b8f1de..38ffb31a4 100644 --- a/plugins/logind/fu-logind-plugin.c +++ b/plugins/logind/fu-logind-plugin.c @@ -72,7 +72,7 @@ fu_logind_plugin_prepare(FuPlugin *plugin, "handle-hibernate-key:handle-lid-switch"; /* already inhibited */ - if (self->logind_fd != 0) + if (self->logind_fd >= 0) return TRUE; /* not yet connected */ @@ -115,25 +115,26 @@ fu_logind_plugin_cleanup(FuPlugin *plugin, GError **error) { FuLogindPlugin *self = FU_LOGIND_PLUGIN(plugin); - if (self->logind_fd == 0) + if (self->logind_fd < 0) return TRUE; g_debug("closed logind fd %i", self->logind_fd); if (!g_close(self->logind_fd, error)) return FALSE; - self->logind_fd = 0; + self->logind_fd = -1; return TRUE; } static void fu_logind_plugin_init(FuLogindPlugin *self) { + self->logind_fd = -1; } static void fu_logind_finalize(GObject *obj) { FuLogindPlugin *self = FU_LOGIND_PLUGIN(obj); - if (self->logind_fd != 0) + if (self->logind_fd >= 0) g_close(self->logind_fd, NULL); if (self->logind_proxy != NULL) g_object_unref(self->logind_proxy); -- 2.31.1
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor