udev: fix a few issues detected by the llvm static analyzer
This commit is contained in:
parent
7ea07dcdda
commit
b49d9b50cf
|
@ -1518,9 +1518,9 @@ DISTCLEAN_LOCAL_HOOKS += test-sys-distclean
|
||||||
|
|
||||||
EXTRA_DIST += \
|
EXTRA_DIST += \
|
||||||
src/udev/test/sys.tar.xz \
|
src/udev/test/sys.tar.xz \
|
||||||
src/udev/test/rule-syntax-check.py \
|
|
||||||
src/udev/test/udev-test.pl \
|
src/udev/test/udev-test.pl \
|
||||||
src/udev/test/rules-test.sh
|
src/udev/test/rules-test.sh \
|
||||||
|
src/udev/test/rule-syntax-check.py
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
ata_id_SOURCES = \
|
ata_id_SOURCES = \
|
||||||
|
|
|
@ -360,7 +360,6 @@ static int disk_identify(struct udev *udev,
|
||||||
int is_packet_device;
|
int is_packet_device;
|
||||||
|
|
||||||
/* init results */
|
/* init results */
|
||||||
ret = -1;
|
|
||||||
memset(out_identify, '\0', 512);
|
memset(out_identify, '\0', 512);
|
||||||
is_packet_device = 0;
|
is_packet_device = 0;
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
|
|
||||||
#include "libudev.h"
|
#include "libudev.h"
|
||||||
#include "libudev-private.h"
|
#include "libudev-private.h"
|
||||||
|
#include "socket-util.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SECTION:libudev-monitor
|
* SECTION:libudev-monitor
|
||||||
|
@ -43,9 +44,9 @@ struct udev_monitor {
|
||||||
struct udev *udev;
|
struct udev *udev;
|
||||||
int refcount;
|
int refcount;
|
||||||
int sock;
|
int sock;
|
||||||
struct sockaddr_nl snl;
|
union sockaddr_union snl;
|
||||||
struct sockaddr_nl snl_trusted_sender;
|
union sockaddr_union snl_trusted_sender;
|
||||||
struct sockaddr_nl snl_destination;
|
union sockaddr_union snl_destination;
|
||||||
socklen_t addrlen;
|
socklen_t addrlen;
|
||||||
struct udev_list filter_subsystem_list;
|
struct udev_list filter_subsystem_list;
|
||||||
struct udev_list filter_tag_list;
|
struct udev_list filter_tag_list;
|
||||||
|
@ -144,12 +145,12 @@ struct udev_monitor *udev_monitor_new_from_netlink_fd(struct udev *udev, const c
|
||||||
udev_monitor->sock = fd;
|
udev_monitor->sock = fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
udev_monitor->snl.nl_family = AF_NETLINK;
|
udev_monitor->snl.nl.nl_family = AF_NETLINK;
|
||||||
udev_monitor->snl.nl_groups = group;
|
udev_monitor->snl.nl.nl_groups = group;
|
||||||
|
|
||||||
/* default destination for sending */
|
/* default destination for sending */
|
||||||
udev_monitor->snl_destination.nl_family = AF_NETLINK;
|
udev_monitor->snl_destination.nl.nl_family = AF_NETLINK;
|
||||||
udev_monitor->snl_destination.nl_groups = UDEV_MONITOR_UDEV;
|
udev_monitor->snl_destination.nl.nl_groups = UDEV_MONITOR_UDEV;
|
||||||
|
|
||||||
return udev_monitor;
|
return udev_monitor;
|
||||||
}
|
}
|
||||||
|
@ -314,7 +315,7 @@ _public_ int udev_monitor_filter_update(struct udev_monitor *udev_monitor)
|
||||||
|
|
||||||
int udev_monitor_allow_unicast_sender(struct udev_monitor *udev_monitor, struct udev_monitor *sender)
|
int udev_monitor_allow_unicast_sender(struct udev_monitor *udev_monitor, struct udev_monitor *sender)
|
||||||
{
|
{
|
||||||
udev_monitor->snl_trusted_sender.nl_pid = sender->snl.nl_pid;
|
udev_monitor->snl_trusted_sender.nl.nl_pid = sender->snl.nl.nl_pid;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
|
@ -330,20 +331,20 @@ _public_ int udev_monitor_enable_receiving(struct udev_monitor *udev_monitor)
|
||||||
int err = 0;
|
int err = 0;
|
||||||
const int on = 1;
|
const int on = 1;
|
||||||
|
|
||||||
if (udev_monitor->snl.nl_family == 0)
|
if (udev_monitor->snl.nl.nl_family == 0)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
udev_monitor_filter_update(udev_monitor);
|
udev_monitor_filter_update(udev_monitor);
|
||||||
|
|
||||||
if (!udev_monitor->bound) {
|
if (!udev_monitor->bound) {
|
||||||
err = bind(udev_monitor->sock,
|
err = bind(udev_monitor->sock,
|
||||||
(struct sockaddr *)&udev_monitor->snl, sizeof(struct sockaddr_nl));
|
&udev_monitor->snl.sa, sizeof(struct sockaddr_nl));
|
||||||
if (err == 0)
|
if (err == 0)
|
||||||
udev_monitor->bound = true;
|
udev_monitor->bound = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (err >= 0) {
|
if (err >= 0) {
|
||||||
struct sockaddr_nl snl;
|
union sockaddr_union snl;
|
||||||
socklen_t addrlen;
|
socklen_t addrlen;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -351,9 +352,9 @@ _public_ int udev_monitor_enable_receiving(struct udev_monitor *udev_monitor)
|
||||||
* it is usually, but not necessarily the pid
|
* it is usually, but not necessarily the pid
|
||||||
*/
|
*/
|
||||||
addrlen = sizeof(struct sockaddr_nl);
|
addrlen = sizeof(struct sockaddr_nl);
|
||||||
err = getsockname(udev_monitor->sock, (struct sockaddr *)&snl, &addrlen);
|
err = getsockname(udev_monitor->sock, &snl.sa, &addrlen);
|
||||||
if (err == 0)
|
if (err == 0)
|
||||||
udev_monitor->snl.nl_pid = snl.nl_pid;
|
udev_monitor->snl.nl.nl_pid = snl.nl.nl_pid;
|
||||||
} else {
|
} else {
|
||||||
err(udev_monitor->udev, "bind failed: %m\n");
|
err(udev_monitor->udev, "bind failed: %m\n");
|
||||||
return err;
|
return err;
|
||||||
|
@ -518,7 +519,7 @@ _public_ struct udev_device *udev_monitor_receive_device(struct udev_monitor *ud
|
||||||
struct iovec iov;
|
struct iovec iov;
|
||||||
char cred_msg[CMSG_SPACE(sizeof(struct ucred))];
|
char cred_msg[CMSG_SPACE(sizeof(struct ucred))];
|
||||||
struct cmsghdr *cmsg;
|
struct cmsghdr *cmsg;
|
||||||
struct sockaddr_nl snl;
|
union sockaddr_union snl;
|
||||||
struct ucred *cred;
|
struct ucred *cred;
|
||||||
char buf[8192];
|
char buf[8192];
|
||||||
ssize_t buflen;
|
ssize_t buflen;
|
||||||
|
@ -536,7 +537,7 @@ retry:
|
||||||
smsg.msg_control = cred_msg;
|
smsg.msg_control = cred_msg;
|
||||||
smsg.msg_controllen = sizeof(cred_msg);
|
smsg.msg_controllen = sizeof(cred_msg);
|
||||||
|
|
||||||
if (udev_monitor->snl.nl_family != 0) {
|
if (udev_monitor->snl.nl.nl_family != 0) {
|
||||||
smsg.msg_name = &snl;
|
smsg.msg_name = &snl;
|
||||||
smsg.msg_namelen = sizeof(snl);
|
smsg.msg_namelen = sizeof(snl);
|
||||||
}
|
}
|
||||||
|
@ -553,18 +554,18 @@ retry:
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (udev_monitor->snl.nl_family != 0) {
|
if (udev_monitor->snl.nl.nl_family != 0) {
|
||||||
if (snl.nl_groups == 0) {
|
if (snl.nl.nl_groups == 0) {
|
||||||
/* unicast message, check if we trust the sender */
|
/* unicast message, check if we trust the sender */
|
||||||
if (udev_monitor->snl_trusted_sender.nl_pid == 0 ||
|
if (udev_monitor->snl_trusted_sender.nl.nl_pid == 0 ||
|
||||||
snl.nl_pid != udev_monitor->snl_trusted_sender.nl_pid) {
|
snl.nl.nl_pid != udev_monitor->snl_trusted_sender.nl.nl_pid) {
|
||||||
dbg(udev_monitor->udev, "unicast netlink message ignored\n");
|
dbg(udev_monitor->udev, "unicast netlink message ignored\n");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
} else if (snl.nl_groups == UDEV_MONITOR_KERNEL) {
|
} else if (snl.nl.nl_groups == UDEV_MONITOR_KERNEL) {
|
||||||
if (snl.nl_pid > 0) {
|
if (snl.nl.nl_pid > 0) {
|
||||||
dbg(udev_monitor->udev, "multicast kernel netlink message from pid %d ignored\n",
|
dbg(udev_monitor->udev, "multicast kernel netlink message from pid %d ignored\n",
|
||||||
snl.nl_pid);
|
snl.nl.nl_pid);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -663,7 +664,7 @@ int udev_monitor_send_device(struct udev_monitor *udev_monitor,
|
||||||
struct udev_list_entry *list_entry;
|
struct udev_list_entry *list_entry;
|
||||||
uint64_t tag_bloom_bits;
|
uint64_t tag_bloom_bits;
|
||||||
|
|
||||||
if (udev_monitor->snl.nl_family == 0)
|
if (udev_monitor->snl.nl.nl_family == 0)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
blen = udev_device_get_properties_monitor_buf(udev_device, &buf);
|
blen = udev_device_get_properties_monitor_buf(udev_device, &buf);
|
||||||
|
|
|
@ -143,14 +143,13 @@ gid_t util_lookup_group(struct udev *udev, const char *group)
|
||||||
struct group *gr;
|
struct group *gr;
|
||||||
gid_t gid = 0;
|
gid_t gid = 0;
|
||||||
size_t buflen = sysconf(_SC_GETPW_R_SIZE_MAX);
|
size_t buflen = sysconf(_SC_GETPW_R_SIZE_MAX);
|
||||||
char *buf = alloca(buflen);
|
char *buf = NULL;
|
||||||
|
|
||||||
if (strcmp(group, "root") == 0)
|
if (strcmp(group, "root") == 0)
|
||||||
return 0;
|
return 0;
|
||||||
gid = strtoul(group, &endptr, 10);
|
gid = strtoul(group, &endptr, 10);
|
||||||
if (endptr[0] == '\0')
|
if (endptr[0] == '\0')
|
||||||
return gid;
|
return gid;
|
||||||
buf = NULL;
|
|
||||||
gid = 0;
|
gid = 0;
|
||||||
for (;;) {
|
for (;;) {
|
||||||
char *newbuf;
|
char *newbuf;
|
||||||
|
|
|
@ -150,10 +150,8 @@ static int builtin_blkid(struct udev_device *dev, int argc, char *argv[], bool t
|
||||||
}
|
}
|
||||||
|
|
||||||
pr = blkid_new_probe();
|
pr = blkid_new_probe();
|
||||||
if (!pr) {
|
if (!pr)
|
||||||
err = -ENOMEM;
|
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
|
||||||
|
|
||||||
blkid_probe_set_superblocks_flags(pr,
|
blkid_probe_set_superblocks_flags(pr,
|
||||||
BLKID_SUBLKS_LABEL | BLKID_SUBLKS_UUID |
|
BLKID_SUBLKS_LABEL | BLKID_SUBLKS_UUID |
|
||||||
|
|
|
@ -84,7 +84,7 @@ static int builtin_firmware(struct udev_device *dev, int argc, char *argv[], boo
|
||||||
char datapath[UTIL_PATH_SIZE];
|
char datapath[UTIL_PATH_SIZE];
|
||||||
char fwpath[UTIL_PATH_SIZE];
|
char fwpath[UTIL_PATH_SIZE];
|
||||||
const char *firmware;
|
const char *firmware;
|
||||||
FILE *fwfile;
|
FILE *fwfile = NULL;
|
||||||
struct utsname kernel;
|
struct utsname kernel;
|
||||||
struct stat statbuf;
|
struct stat statbuf;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
|
@ -715,8 +715,8 @@ int udev_event_spawn(struct udev_event *event,
|
||||||
|
|
||||||
log_debug("starting '%s'\n", cmd);
|
log_debug("starting '%s'\n", cmd);
|
||||||
|
|
||||||
err = spawn_exec(event, cmd, argv, envp, sigmask,
|
spawn_exec(event, cmd, argv, envp, sigmask,
|
||||||
outpipe[WRITE_END], errpipe[WRITE_END]);
|
outpipe[WRITE_END], errpipe[WRITE_END]);
|
||||||
|
|
||||||
_exit(2 );
|
_exit(2 );
|
||||||
case -1:
|
case -1:
|
||||||
|
|
|
@ -53,7 +53,7 @@ static int adm_settle(struct udev *udev, int argc, char *argv[])
|
||||||
int quiet = 0;
|
int quiet = 0;
|
||||||
const char *exists = NULL;
|
const char *exists = NULL;
|
||||||
unsigned int timeout = 120;
|
unsigned int timeout = 120;
|
||||||
struct pollfd pfd[1];
|
struct pollfd pfd[1] = { {.fd = -1}, };
|
||||||
struct udev_queue *udev_queue = NULL;
|
struct udev_queue *udev_queue = NULL;
|
||||||
int rc = EXIT_FAILURE;
|
int rc = EXIT_FAILURE;
|
||||||
|
|
||||||
|
|
|
@ -329,7 +329,6 @@ static void worker_new(struct event *event)
|
||||||
if (fdcount < 0) {
|
if (fdcount < 0) {
|
||||||
if (errno == EINTR)
|
if (errno == EINTR)
|
||||||
continue;
|
continue;
|
||||||
err = -errno;
|
|
||||||
log_error("failed to poll: %m\n");
|
log_error("failed to poll: %m\n");
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue