Bug Summary

File:src/usr.sbin/iscsid/util.c
Warning:line 120, column 7
Although the value stored to 'flags' is used in the enclosing expression, the value is never actually read from 'flags'

Annotated Source Code

Press '?' to see keyboard shortcuts

clang -cc1 -cc1 -triple amd64-unknown-openbsd7.0 -analyze -disable-free -disable-llvm-verifier -discard-value-names -main-file-name util.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 1 -pic-is-pie -mframe-pointer=all -relaxed-aliasing -fno-rounding-math -mconstructor-aliases -munwind-tables -target-cpu x86-64 -target-feature +retpoline-indirect-calls -target-feature +retpoline-indirect-branches -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/usr/src/usr.sbin/iscsid/obj -resource-dir /usr/local/lib/clang/13.0.0 -internal-isystem /usr/local/lib/clang/13.0.0/include -internal-externc-isystem /usr/include -O2 -fdebug-compilation-dir=/usr/src/usr.sbin/iscsid/obj -ferror-limit 19 -fwrapv -D_RET_PROTECTOR -ret-protector -fgnuc-version=4.2.1 -vectorize-loops -vectorize-slp -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-valloc -fno-builtin-free -fno-builtin-strdup -fno-builtin-strndup -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /home/ben/Projects/vmm/scan-build/2022-01-12-194120-40624-1 -x c /usr/src/usr.sbin/iscsid/util.c
1/* $OpenBSD: util.c,v 1.9 2021/04/12 10:03:33 claudio Exp $ */
2
3/*
4 * Copyright (c) 2009 Claudio Jeker <claudio@openbsd.org>
5 *
6 * Permission to use, copy, modify, and distribute this software for any
7 * purpose with or without fee is hereby granted, provided that the above
8 * copyright notice and this permission notice appear in all copies.
9 *
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 */
18
19#include <sys/queue.h>
20#include <sys/socket.h>
21#include <sys/uio.h>
22
23#include <scsi/iscsi.h>
24
25#include <errno(*__errno()).h>
26#include <event.h>
27#include <fcntl.h>
28#include <netdb.h>
29#include <stdio.h>
30#include <stdlib.h>
31#include <string.h>
32#include <unistd.h>
33
34#include "iscsid.h"
35#include "log.h"
36
37struct pdu *
38pdu_new(void)
39{
40 struct pdu *p;
41
42 if (!(p = calloc(1, sizeof(*p))))
43 return NULL((void *)0);
44 return p;
45}
46
47void *
48pdu_alloc(size_t len)
49{
50 return malloc(PDU_LEN(len)((((len) + 3) / 4) * 4));
51}
52
53void *
54pdu_dup(void *data, size_t len)
55{
56 void *p;
57
58 if ((p = malloc(PDU_LEN(len)((((len) + 3) / 4) * 4))))
59 memcpy(p, data, len);
60 return p;
61}
62
63int
64pdu_addbuf(struct pdu *p, void *buf, size_t len, unsigned int elm)
65{
66 if (len & 0x3) {
67 bzero((char *)buf + len, 4 - (len & 0x3));
68 len += 4 - (len & 0x3);
69 }
70
71 if (elm < PDU_MAXIOV5)
72 if (!p->iov[elm].iov_base) {
73 p->iov[elm].iov_base = buf;
74 p->iov[elm].iov_len = len;
75 return 0;
76 }
77
78 /* no space left */
79 return -1;
80}
81
82void *
83pdu_getbuf(struct pdu *p, size_t *len, unsigned int elm)
84{
85 if (len)
86 *len = 0;
87 if (elm < PDU_MAXIOV5)
88 if (p->iov[elm].iov_base) {
89 if (len)
90 *len = p->iov[elm].iov_len;
91 return p->iov[elm].iov_base;
92 }
93
94 return NULL((void *)0);
95}
96
97void
98pdu_free(struct pdu *p)
99{
100 unsigned int j;
101
102 for (j = 0; j < PDU_MAXIOV5; j++)
103 free(p->iov[j].iov_base);
104 free(p);
105}
106
107int
108socket_setblockmode(int fd, int nonblocking)
109{
110 int flags;
111
112 if ((flags = fcntl(fd, F_GETFL3)) == -1)
113 return -1;
114
115 if (nonblocking)
116 flags |= O_NONBLOCK0x0004;
117 else
118 flags &= ~O_NONBLOCK0x0004;
119
120 if ((flags = fcntl(fd, F_SETFL4, flags)) == -1)
Although the value stored to 'flags' is used in the enclosing expression, the value is never actually read from 'flags'
121 return -1;
122 return 0;
123}
124
125const char *
126log_sockaddr(void *arg)
127{
128 struct sockaddr *sa = arg;
129 char port[6];
130 char host[NI_MAXHOST256];
131 static char buf[NI_MAXHOST256 + 8];
132
133 if (getnameinfo(sa, sa->sa_len, host, sizeof(host), port, sizeof(port),
134 NI_NUMERICHOST1))
135 return "unknown";
136 if (port[0] == '0')
137 strlcpy(buf, host, sizeof(buf));
138 else if (sa->sa_family == AF_INET2)
139 snprintf(buf, sizeof(buf), "%s:%s", host, port);
140 else
141 snprintf(buf, sizeof(buf), "[%s]:%s", host, port);
142 return buf;
143}
144
145int
146control_compose(void *ch, u_int16_t type, void *buf, size_t len)
147{
148 return control_build(ch, type, 1, CTRLARGV({ buf, len })((struct ctrldata []){ { buf, len } }));
149}
150
151int
152control_build(void *ch, u_int16_t type, int argc, struct ctrldata *argv)
153{
154 struct pdu *pdu;
155 struct ctrlmsghdr *cmh;
156 size_t size = 0;
157 int i;
158
159 if (argc > (int)nitems(cmh->len)(sizeof((cmh->len)) / sizeof((cmh->len)[0])))
160 return -1;
161
162 for (i = 0; i < argc; i++)
163 size += argv[i].len;
164 if (PDU_LEN(size)((((size) + 3) / 4) * 4) > CONTROL_READ_SIZE8192 - PDU_LEN(sizeof(*cmh))((((sizeof(*cmh)) + 3) / 4) * 4))
165 return -1;
166
167 if ((pdu = pdu_new()) == NULL((void *)0))
168 return -1;
169 if ((cmh = pdu_alloc(sizeof(*cmh))) == NULL((void *)0))
170 goto fail;
171 bzero(cmh, sizeof(*cmh));
172 cmh->type = type;
173 pdu_addbuf(pdu, cmh, sizeof(*cmh), 0);
174
175 for (i = 0; i < argc; i++)
176 if (argv[i].len > 0) {
177 void *ptr;
178
179 cmh->len[i] = argv[i].len;
180 if ((ptr = pdu_alloc(argv[i].len)) == NULL((void *)0))
181 goto fail;
182 memcpy(ptr, argv[i].buf, argv[i].len);
183 pdu_addbuf(pdu, ptr, argv[i].len, i + 1);
184 }
185
186 control_queue(ch, pdu);
187 return 0;
188fail:
189 pdu_free(pdu);
190 return -1;
191}