Merge pull request #11852 from keszybz/coverity-memory-issues

Two small fixes for memory issues found by coverity
This commit is contained in:
Lennart Poettering 2019-02-28 19:04:04 +01:00 committed by GitHub
commit 8e4fbe3f2d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 14 additions and 16 deletions

View File

@ -2827,19 +2827,14 @@ static int presets_find_config(UnitFileScope scope, const char *root_dir, char *
assert(scope >= 0);
assert(scope < _UNIT_FILE_SCOPE_MAX);
switch (scope) {
case UNIT_FILE_SYSTEM:
if (scope == UNIT_FILE_SYSTEM)
dirs = (const char* const*) CONF_PATHS_STRV("systemd/system-preset");
break;
case UNIT_FILE_GLOBAL:
case UNIT_FILE_USER:
else if (IN_SET(scope, UNIT_FILE_GLOBAL, UNIT_FILE_USER))
dirs = (const char* const*) CONF_PATHS_USR_STRV("systemd/user-preset");
break;
default:
else
assert_not_reached("Invalid unit file scope");
}
return conf_files_list_strv(files, ".preset", root_dir, 0, dirs);
}

View File

@ -138,13 +138,12 @@ static void set_scsi_type(char *to, const char *from, size_t len) {
#define USB_DT_INTERFACE 0x04
static int dev_if_packed_info(sd_device *dev, char *ifs_str, size_t len) {
_cleanup_free_ char *filename = NULL;
_cleanup_close_ int fd = -1;
ssize_t size;
unsigned char buf[18 + 65535];
size_t pos = 0;
unsigned strpos = 0;
const char *syspath;
const char *filename, *syspath;
int r;
struct usb_interface_descriptor {
uint8_t bLength;
@ -161,16 +160,17 @@ static int dev_if_packed_info(sd_device *dev, char *ifs_str, size_t len) {
r = sd_device_get_syspath(dev, &syspath);
if (r < 0)
return r;
if (asprintf(&filename, "%s/descriptors", syspath) < 0)
return log_oom();
filename = strjoina(syspath, "/descriptors");
fd = open(filename, O_RDONLY|O_CLOEXEC);
if (fd < 0)
return log_device_debug_errno(dev, errno, "Failed to open USB device 'descriptors' file: %m");
return log_device_debug_errno(dev, errno, "Failed to open \"%s\": %m", filename);
size = read(fd, buf, sizeof(buf));
if (size < 18 || (size_t) size >= sizeof(buf))
return -EIO;
if (size < 18)
return log_device_warning_errno(dev, SYNTHETIC_ERRNO(EIO),
"Short read from \"%s\"", filename);
assert((size_t) size <= sizeof buf);
ifs_str[0] = '\0';
while (pos + sizeof(struct usb_interface_descriptor) < (size_t) size &&
@ -179,9 +179,12 @@ static int dev_if_packed_info(sd_device *dev, char *ifs_str, size_t len) {
struct usb_interface_descriptor *desc;
char if_str[8];
desc = (struct usb_interface_descriptor *) &buf[pos];
desc = (struct usb_interface_descriptor *) (buf + pos);
if (desc->bLength < 3)
break;
if (desc->bLength > size - sizeof(struct usb_interface_descriptor))
return log_device_debug_errno(dev, SYNTHETIC_ERRNO(EIO),
"Corrupt data read from \"%s\"", filename);
pos += desc->bLength;
if (desc->bDescriptorType != USB_DT_INTERFACE)