udev: fix a few issues detected by the llvm static analyzer

This commit is contained in:
Kay Sievers 2012-04-13 15:08:55 +02:00
parent 7ea07dcdda
commit b49d9b50cf
9 changed files with 32 additions and 36 deletions

View File

@ -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 = \

View File

@ -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;

View File

@ -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);

View File

@ -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;

View File

@ -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 |

View File

@ -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;

View File

@ -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:

View File

@ -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;

View File

@ -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;
} }